kafka与zk的关系(一)

一个典型的kafka集群中包含若干个Producer,若干个broker(一般broker数量越多,集群吞吐率越高),若干Consumer Group,以及一个zk集群,kafka通过zk管理集群配置,选举leader,以及在Consumer Group发生变化时进行rebalanceProducer使用push模式将消息发布到brokerConsumer使用pull模式从broker订阅并消费消息。

1.Producer端直接连接broker.list直接连接broker.list从列表中返回TopicMetadataRepose,该Metadata包含Topic下每个partition leader,建立socket连接发送消息

2.Broker端使用zk用来注册broker信息,以及监控partition leader存活性

3.Consumer端使用zk用来注册consumer信息,其中包括consumer·消费的partition列表等,同时也用来发现broker列表,并和partition leader建立socket连接,并获取消息。

 

kafka与zk的关系(一)_第1张图片

 

Zookeeper:管理brokerconsumer

创建broker后,向zk注册新的broker信息,实现在服务器正常运行下的水平拓展,具体的通过注册watcher获取partition的信息。

 

Topic的注册,zk会维护brokertopic的关系,通过/brokers/topics/topic.name节点来记录。

 

Producer向zookeeper中注册watcher,了解topicpartition的消息,以动态了解运行情况,实现负载均衡。Zookeepr不管理producer,只是能够提供当前broker的相关信息

 

Consumer可以使用group形式消费kafka中的数据。所有的group将以轮询的方式消费broker中的数据,具体的按照启动的顺序。Zookeeper会给每个consumer group一个ID,即同一份数据可以被不同的用户ID多次消费。因此这就是单播与多播的实现。以单个消费者还是以组别的方式去消费数据,由用户自己去定义。Zookeeper管理consumeroffset跟踪当前消费的offset

 

kafka使用zookeeper来实现动态的集群扩展,不需要更改客户端(producerconsumer)的配置。broker会在zookeeper注册并保持相关的元数据(topicpartition信息等)更新。而客户端会在zookeeper上注册相关的watcher。一旦zookeeper发生变化,客户端能及时感知并作出相应调整。这样就保证了添加或去除broker时,各broker间仍能自动实现负载均衡。这里的客户端指的是Kafka的消息生产端(Producer)和消息消费端(Consumer)·        

Broker端使用zookeeper来注册broker信息,以及监测 partition  leader存活性.Consumer端使用zookeeper用来注册consumer信息,其中包括Consumer消费的Partition列表等,同时也用来发现Broker列表,并和Partitionleader建立Socket连接,并获取消息

 ZookeerProducer没有建立关系,只和BrokersConsumers建立关系以实现负载均衡,即同一个Consumer  Group中的Consumers可以实现负载均衡(因为Producer是瞬态的,可以发送后关闭,无需直接等待)

 

目前仅停留在比较浅的层面,后面会慢慢深入,如果理解不对的地方,一起交流,我也方便更正,以及更正理解不对的地方

 

你可能感兴趣的:(消息队列,Kafka)