###### tags: `message-queue` # Kafka ## Broker - Kafka 服務器,負責消息存儲和轉發;一 broker 就代表一個 kafka 節點。一個 broker 可以包含多個 topic ## Topic - 消息類別,Kafka 按照 topic 來分類消息 - Topic 是生產者發送消息的目標地址,是消費者的監聽目標。 - Topic 是一個邏輯概念,Partition 是最小的存儲單元,掌握着一個 Topic 的部分數據。 ## Partition - Producer 發送消息的時候,可以指定一個 Partition Key,這樣就可以寫入特定 Partition 了。 - 如果沒有使用 Partition Key,Kafka 就會使用輪詢的方式來決定寫入哪個 Partition。 - 消息的順序性需要注意,一個 Topic 如果有多個 Partition 的話,那麼從 Topic 這個層面來看,消息是無序的。 - 但單獨看 Partition 的話,Partition 內部消息是有序的。 - 所以,一個 Partition 內部消息有序,一個 Topic 跨 Partition 是無序的。 ## Consumer - Kafka 不像普通消息隊列具有發佈 / 訂閱功能,Kafka 不會向 Consumer 推送消息。 - Consumer 必須自己從 Topic 的 Partition 拉取消息。 ## Zookeeper - 管理 kafka 集羣,負責存儲了集羣 broker、topic、partition 等 meta 數據存儲,同時也負責 broker 故障發現,partition leader 選舉,負載均衡等功能。 ### 不使用 Zookeeper 也可以 - https://www.51cto.com/article/658581.html - https://blog.yowko.com/container-kafka-without-zookeeper-create-topic/ ### 數據同步 - 在 Kafka 中的 Partition 有一個 leader 與多個 follower,producer 往某個 Partition 中寫入數據是,只會往 leader 中寫入數據,然後數據纔會被複制進其他的 Replica 中。而每一個 follower 可以理解成一個消費者,定期去 leader 去拉去消息。而只有數據同步了後,kafka 纔會給生產者返回一個 ACK 告知消息已經存儲落地了。 --- [Kafka 詳解 1](https://www.readfog.com/a/1635090175644241920) [Kafka 詳解 2](https://www.readfog.com/a/16372629543301652481635090175644241920)