kafka是一套與昨天的NATS類似的分布式MQ系統,會用這兩套也不是想要做差異比較,單純只是有多一個可以選擇的而已,與NATS不同kafka在運行上還有依賴zookeeper,雖然今年釋出的kafka 2.8版本可以改為依賴quorum不用zookeeper的運行方式,不過官方也說明不建議使用於生產環境。
kafka的架構主要是broker topic partition replica ,使用者區分為producer和consumer,使用者的角色類似NATS的pub/sub,架構如下
而kafka的producer另外可以帶入寫入的acknowledgment,確保訊息送到kafka後sync給replicas的機制
acks=0:Producer將不會等待acknowledgment(可能資料遺失) ;
acks=1:為預設值,Producer將等待Leader acknowledgment(限制資料遺失)
acks=all:Leader + replicas acknowledgment (無資料遺失)
而consumer讀取資料時,會再需要consumer group訂閱topic,一個partition可以提供給多個consumer group收取訊息,但是在一個consumer group內一個partition的訊息只能給一個consumer收,另外要注意如果有新的consumer加入consumer group將會發生rebalance的狀況重新分配分區的接收,這段時間是不允許consumer group內的consumer收訊息的喔。