在Kakfa中扮演的角色
Kafka將元數(shù)據(jù)信息保存在Zookeeper中,但是發(fā)送給Topic本身的數(shù)據(jù)是不會發(fā)到Zk上的,否則Zk就瘋了。kafka使用zookeeper來實現(xiàn)動態(tài)的集群擴(kuò)展,不需要更改客戶端(producer和consumer)的配置。broker會在zookeeper注冊并保持相關(guān)的元數(shù)據(jù)(topic,partition信息等)更新。而客戶端會在zookeeper上注冊相關(guān)的watcher。一旦zookeeper發(fā)生變化,客戶端能及時感知并作出相應(yīng)調(diào)整。這樣就保證了添加或去除broker時,各broker間仍能自動實現(xiàn)負(fù)載均衡。這里的客戶端指的是Kafka的消息生產(chǎn)端(Producer)和消息消費端(Consumer)Producer端使用zookeeper用來"發(fā)現(xiàn)"broker列表,以及和Topic下每個partition的leader建立socket連接并發(fā)送消息。也就是說每個Topic的partition是由Lead角色的Broker端使用zookeeper來注冊broker信息,以及監(jiān)測partition leader存活性.Consumer端使用zookeeper用來注冊consumer信息,其中包括consumer消費的partition列表等,同時也用來發(fā)現(xiàn)broker列表,并和partition leader建立socket連接,并獲取消息.zookeeper中信息
