Zookeeper在kafka中的应用

转自 : https://i-blog.csdnimg.cn/blog_migrate/cb75b0c0e99c0f0b0d33eaa2a99ab7bd.png


Zookeeper在kafka中的应用

 

简介

Kafka使用zookeeper作为其分布式协调框架,很好的将消息生产、消息存储、消息消费的过程结合在一起。同时借助zookeeper,kafka能够生产者、消费者和broker在内的所以组件在无状态的情况下,建立起生产者和消费者的订阅关系,并实现生产者与消费者的负载均衡。

 

从拓扑结构看kafka与zookeeper的关系:

看看kafka的拓扑结构图

 

如上图所示,在典型的Kafka集群中, Kafka通过Zookeeper管理集群配置,选举leader,以及在Consumer Group发生变化时进行rebalance。Producer使用push模式将消息发布到broker,Consumer使用pull模式从broker订阅并消费消息.

 

broker在zookeeper中的注册

为了记录broker的注册信息,在zookeeper上,专门创建了属于kafka的一个节点,其路径为/brokers,如:

[zk: localhost:2181(CONNECTED) 1] ls /brokers

[ids, topics]

 

Kafka的每个broker启动时,都会到zookeeper中进行注册,告诉zookeeper其broker.id, 在整个集群中,broker.id应该全局唯一,并在zookeeper上创建其属于自己的节点,其节点路径为/brokers/ids/{broker.id}. 如:

[zk: localhost:2181(CONNECTED) 2] ls /brokers/ids

[102, 103]

 

创建完节点后,kafka会将该broker的broker.name及端口号记录到改节点,如

[zk: localhost:2181(CONNECTED) 4] get /brokers/ids/102

{"jmx_port":-1,"timestamp":"1433209686575","host":"host102","version":1,"port":9092}

 

另外,改broker节点属性为临时节点,当broker会话失效时,zookeeper会删除该节点,这样,我们就可以很方便的监控到broker节点的变化,及时调整负载均衡等。

 

Topic在zookeeper中的注册

在kafka中,用户可以自定义多个topic,每个topic又可以划分为多个分区,一半情况下,每个分区存储在一个独立的broker上。所有这些topic与broker的对应关系都有zookeeper进行维护。

 

在zookeeper中,建立专门的节点来记录这些信息,其节点路径为/brokers/topics/{topic_name},如:

[zk: localhost:2181(CONNECTED) 6] ls /brokers/topics 

[toptic_t, test, my-replicated-topic, mykafka, mykafka6, mykafka5, mykafka4, test6, mykafka3, test7, mykafka2]

 

[zk: localhost:2181(CONNECTED) 17] get /brokers/topics/mykafka4   

{"version":1,"partitions":{"1":[102,103,104],"2":[103,104,102],"0":[104,102,103]}}

针对topic 的每一个分区与broker的对应关系,zookeeper通过节点 /brokers/topics/topic.name来记录,如:

 

当broker启动时,会到对应topic节点下注册自己的broker.id到对应分区的isr列表中,如:

[zk: localhost:2181(CONNECTED) 23] get /brokers/topics/mykafka4/partitions/1/state

{"controller_epoch":15,"leader":102,"version":1,"leader_epoch":2,"isr":[102,103,104]}

 

同样的,当broker退出数,也会触发zookeeper更新其对应topic分区的isr列表,并决定是否需要做消费者的负载均衡。

 

 

consumer在zookeeper中的注册

注册新的消费者分组

当新的消费者组注册到zookeeper中时,zookeeper会创建专用的节点来保存相关信息,其节点路径为ls /consumers/{group_id},其节点下有三个子节点,分别为[ids, owners, offsets]。

Ø ids节点:记录该消费组中当前正在消费的消费者;

Ø owners节点:记录该消费组消费的topic信息;

Ø offsets节点:记录每个topic的每个分区的offset,如:

[zk: localhost:2181(CONNECTED) 54] get /consumers/test-consumer2-group/offsets/mykafka4/0

142

 

注册新的消费者

当新的消费者注册到kafka中时,会在/consumers/{group_id}/ids节点下创建临时子节点,并记录相关信息,如:

[zk: localhost:2181(CONNECTED) 57] ls /consumers/test-consumer2-group/ids/test-consumer2-group_dev103-1433562901087-7b517b97

[]

[zk: localhost:2181(CONNECTED) 58] get /consumers/test-consumer2-group/ids/test-consumer2-group_dev103-1433562901087-7b517b97

{"version":1,"subscription":{"mykafka5":1},"pattern":"white_list","timestamp":"1433562901290"}

 

 

l 监听消费者分组中消费者的变化

每个消费者都要关注其所属消费者组中消费者数目的变化,即监听/consumers/{group_id}/ids下子节点的变化。一单发现消费者新增或减少,就会触发消费者的负载均衡。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 是什么? ZooKeeperKafka起到了仲裁者的作用,它维护了Kafka集群的元数据信息,并协调了Kafka代理之间的通信。它还确保了Kafka的高可用性和数据一致性。总的来说,ZooKeeperKafka集群的重要组成部分,对于Kafka的正常运行起到了关键作用。 ### 回答2: ZookeeperKafka扮演着重要的角色。首先,Zookeeper负责管理和协调Kafka集群的整个生命周期。它负责跟踪和记录Kafka集群的所有节点信息,包括broker节点以及它们的状态、健康状况和Leader信息等。通过监控和维护这些信息,Zookeeper确保了Kafka集群的高可用性和容错性。 其次,Zookeeper还负责Kafka消费者的组管理。当应用程序有多个消费者需要订阅同一个topic时,Zookeeper会为它们分配一个唯一的消费者组,并管理这些消费者的偏移量(offset)。消费者可以通过Zookeeper来查询和更新自己的偏移量,这样就可以实现消费者的位置跟踪和负载均衡等功能。 此外,Zookeeper还提供了Kafka集群的leader选举功能。当Kafka集群的某个broker节点的Leader发生故障或失效时,Zookeeper会通过选举算法来选择新的Leader,并通知集群的其他节点。这样,Kafka集群可以在出现故障时快速地恢复和重新平衡。 最后,Zookeeper还提供了Kafka集群的配置管理功能。它可以存储和管理Kafka的配置信息,并对外提供读写操作接口。Kafka可以通过与Zookeeper的交互来获取最新的配置信息,并实时更新配置。 综上所述,ZookeeperKafka的作用可以总结为集群管理、消费者组管理、偏移量管理、leader选举以及配置管理等功能。它提供了Kafka集群的稳定性、高性能和可靠性。 ### 回答3: zookeeperkafka扮演着重要的角色。首先,zookeeperkafka集群的管理和协调组件。它负责管理和存储kafka集群的元数据,包括主题的配置、分区信息、消费者组信息等。通过zookeeperkafka集群的各个节点可以共享和获取这些元数据,以便协调它们的工作。 其次,zookeeper还负责监测kafka集群的状态,并及时发现和恢复故障。它会持续地监控kafka节点的心跳信息,一旦发现某个节点宕机或失去连接,zookeeper会触发重新分配该节点上的分区,确保集群的可用性和数据的持久性。同时,zookeeper也会监控kafka的整体状态,如节点个数、分区个数等,提供给kafka控制器进行自动化的管理和调整。 此外,zookeeper还是kafka消费者组的协调者。它会维护消费者组的注册信息和消费位移信息,并将其存储在zookeeper的节点。消费者组的成员通过zookeeper来发现彼此,并协调消费位移的管理,以实现消费者在分布式环境的高效消费。 总之,zookeeperkafka具有至关重要的作用。它管理和存储kafka的元数据,监测集群状态并处理故障,以及协调消费者组的成员和消费位移信息。没有zookeeper的支持,kafka集群的可靠性和灵活性都将大大降低。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值