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连接,并获取消息。

 

 

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是瞬态的,可以发送后关闭,无需直接等待)

 

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

 

  • 6
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值