赞
踩
一个典型的kafka集群中包含若干个Producer,若干个broker(一般broker数量越多,集群吞吐率越高),若干Consumer Group,以及一个zk集群,kafka通过zk管理集群配置,选举leader,以及在Consumer Group发生变化时进行rebalance。Producer使用push模式将消息发布到broker,Consumer使用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:管理broker,consumer
创建broker后,向zk注册新的broker信息,实现在服务器正常运行下的水平拓展,具体的通过注册watcher获取partition的信息。
Topic的注册,zk会维护broker与topic的关系,通过/brokers/topics/topic.name节点来记录。Producer向zookeeper中注册watcher,了解topic的partition的消息,以动态了解运行情况,实现负载均衡。Zookeepr不管理producer,只是能够提供当前broker的相关信息。
Consumer可以使用group形式消费kafka中的数据。所有的group将以轮询的方式消费broker中的数据,具体的按照启动的顺序。Zookeeper会给每个consumer group一个ID,即同一份数据可以被不同的用户ID多次消费。因此这就是单播与多播的实现。以单个消费者还是以组别的方式去消费数据,由用户自己去定义。Zookeeper管理consumer的offset跟踪当前消费的offset。
kafka使用zookeeper来实现动态的集群扩展,不需要更改客户端(producer和consumer)的配置。broker会在zookeeper注册并保持相关的元数据(topic,partition信息等)更新。而客户端会在zookeeper上注册相关的watcher。一旦zookeeper发生变化,客户端能及时感知并作出相应调整。这样就保证了添加或去除broker时,各broker间仍能自动实现负载均衡。这里的客户端指的是Kafka的消息生产端(Producer)和消息消费端(Consumer)·
Broker端使用zookeeper来注册broker信息,以及监测 partition leader存活性.Consumer端使用zookeeper用来注册consumer信息,其中包括Consumer消费的Partition列表等,同时也用来发现Broker列表,并和Partitionleader建立Socket连接,并获取消息
Zookeer和Producer没有建立关系,只和Brokers、Consumers建立关系以实现负载均衡,即同一个Consumer Group中的Consumers可以实现负载均衡
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。