kafka和zookeeper關係
kafka使用ZooKeeper用於管理、協調代理。每個Kafka代理通過Zookeeper協調其他Kafka代理。
當Kafka系統中新增了代理或某個代理失效時,Zookeeper服務將通知生產者和消費者。生產者與消費者據此開始與其他代理協調工作。
Zookeeper在Kakfa中扮演的角色:Kafka將元資料資訊儲存在Zookeeper中,但是傳送給Topic本身的資料是不會發到Zk上的
· kafka使用zookeeper來實現動態的叢集擴充套件,不需要更改客戶端(producer和consumer)的配置。broker會在zookeeper註冊並保持相關的元資料(topic,partition資訊等)更新。
· 而客戶端會在zookeeper上註冊相關的watcher。一旦zookeeper發生變化,客戶端能及時感知並作出相應調整。這樣就保證了新增或去除broker時,各broker間仍能自動實現負載均衡。這裡的客戶端指的是Kafka的訊息生產端(Producer)和訊息消費端(Consumer)
· Broker端使用zookeeper來註冊broker資訊,以及監測partitionleader存活性.
· Consumer端使用zookeeper用來註冊consumer資訊,其中包括consumer消費的partition列表等,同時也用來發現broker列表,並和partitionleader建立socket連線,並獲取訊息.
· Zookeer和Producer沒有建立關係,只和Brokers、Consumers建立關係以實現負載均衡,即同一個ConsumerGroup中的Consumers可以實現負載均衡(因為Producer是瞬態的,可以傳送後關閉,無需直接等待)