zk相當于是kafka的一個基礎設施
Kafka是一種高吞吐量、可擴展的分布式發布訂閱消息系統,ZooKeeper是一個分布式協調服務,用于管理和協調分布式系統中的各種資源
Zookeeper:管理broker,consumer
創建broker后,向zk注冊新的broker信息,以及監測 partition ?leader存活性,實現在服務器正常運行下的水平拓展,Topic的注冊,zk會維護broker與topic的關系,通過/brokers/topics/topic.name節點來記錄
Consumer可以使用group形式消費kafka中的數據,Zookeeper會給每個consumer group一個ID,即同一份數據可以被不同的用戶ID多次消費。因此這就是單播與多播的實現。以單個消費者還是以組別的方式去消費數據,由用戶自己去定義。Zookeeper管理consumer的offset跟蹤當前消費的offset。
Zookeepr不管理producer
只是能夠提供當前broker的相關信息,Producer向zookeeper中注冊watcher,了解topic的partition的消息,以動態了解運行情況,實現負載均衡
具體而言,Kafka使用ZooKeeper來進行以下操作:
??? 協調管理:Kafka集群中的各個節點通過ZooKeeper來協調任務分配、負載均衡和故障恢復等操作。ZooKeeper充當了Kafka集群的協調者,確保集群的穩定運行。
??? 元數據存儲:Kafka使用ZooKeeper來存儲和管理關于主題(topics)、分區(partitions)和消費者(consumers)等元數據的信息。這些元數據包括主題的分區分配、分區的偏移量(offset)以及消費者組的成員關系等。
??? 服務發現:Kafka生產者和消費者在連接到Kafka集群時需要知道正確的Broker地址。ZooKeeper提供了服務發現功能,允許客戶端動態地發現可用的Kafka Broker。
- Broker 的上線、下線處理;
- 新創建的 topic 或已有 topic 的分區擴容,處理分區副本的分配、leader選舉;
- 管理所有副本的狀態機和分區的狀態機,處理狀態機的變化事件;
- topic刪除、副本遷移、leader切換等處理
總之,ZooKeeper在Kafka中充當了協調和元數據管理的角色,為Kafka提供了可靠性和高可用性的支持。Kafka依賴于ZooKeeper來保證集群的穩定運行,并利用其提供的功能來管理分布式系統中的各種資源
kafka使用zookeeper來實現動態的集群擴展,不需要更改客戶端(producer和consumer)的配置。broker會在zookeeper注冊并保持相關的元數據(topic,partition信息等)更新。而客戶端會在zookeeper上注冊相關的watcher。一旦zookeeper發生變化,客戶端能及時感知并作出相應調整。這樣就保證了添加或去除broker時,各broker間仍能自動實現負載均衡。這里的客戶端指的是Kafka的消息生產端(Producer)和消息消費端(Consumer)
??????????