KafkaController介绍

在Kafka早期版本,对于分区和副本的状态的管理依赖于zookeeper的Watcher和队列:每一个broker都会在zookeeper注册Watcher,所以zookeeper就会出现大量的Watcher, 如果宕机的broker上的partition很多比较多,会造成多个Watcher触发,造成集群内大规模调整;每一个replica都要去再次zookeeper上注册监视器,当集群规模很大的时候,zookeeper负担很重。这种设计很容易出现脑裂和羊群效应以及zookeeper集群过载。

 

新版本该变了这种设计,使用KafkaController,只有KafkaController

Leader会向zookeeper上注册Watcher,其他broker几乎不用监听zookeeper的状态变化。

 

Kafka集群中多个broker,有一个会被选举为controller leader,负责管理整个集群中分区和副本的状态,比如partition的leader 副本故障,由controller 负责为该partition重新选举新的leader 副本;当检测到ISR列表发生变化,有controller通知集群中所有broker更新其MetadataCache信息;或者增加某个topic分区的时候也会由controller管理分区的重新分配工作

 

当broker启动的时候,都会创建KafkaController对象,但是集群中只能有一个leader对外提供服务,这些每个节点上的KafkaController会在指定的zookeeper路径下创建临时节点,只有第一个成功创建的节点的KafkaController才可以成为leader,其余的都是follower。当leader故障后,所有的follower会收到通知,再次竞争在该路径下创建节点从而选举新的leader

 

KafkaController vs ReplicaManager

KafkaController: 负责管理整个集群中分区和副本的状态

ReplicaManager:负责管理当前broker所有分区和副本的信息,会处理KafkaController发起的一些请求,副本状态的切换,添加/读取消息等

 

一 Kafka在zookeeper注册的一些节点路径

/brokers/ids/[id] 记录集群中的broker id

/brokers/topics/[topic]/partitions 记录了topic所有分区分配信息以及AR集合

/brokers/topics/[topic]/partitions/[partition_id]/state记录了某partition的leader副本所在brokerId,leader_epoch, ISR集合,zk 版本信息

/controller_epoch 记录了当前Controller Leader的年代信息

/controller 记录了当前Controller Leader的id,也用于Controller Leader的选择

/admin/reassign_partitions 记录了需要进行副本重新分配的分区

/admin/preferred_replica_election:记录了需要进行"优先副本"选举的分区,优先副本在创建分区的时候第一个副本

/admin/delete_topics 记录删除的topic

/isr_change_notification 记录一段时间内ISR列表变化的分区信息

/config 记录的一些配置信息


二 KafkaController核心组件和组件之间的依赖关系

ZookeeperLeaderElector: 主要用于KafkController Leader选举

ControllerContext: 维护了controller需要用到的上下文,同时也缓存一些zookeeper数据,包括可用的broker,全部的topic,分区和副本信息

ControllerChannelManager: 维护Controller Leader与集群中其他broker之间连接,是管理这个集群的基础

TopicDeletionManager: 用于删除指定的topic

PartitionStateMachine: 用于管理集群所有partition状态的状态机

ReplicaStateMachine: 用于管理集群中所有副本状态的状态机

ControllerBrokerRequestBatch: 实现了向broker批量发送请求的功能

PartitionLeaderSelector:选举leader副本的选举策略

IzkChildListener:是zookeeper上的监听器,实现了对zookeeper上某些节点数据,子节点或者session状态的监听,被处罚后调用对应的业务逻辑

 

组件之间的依赖关系图:


  • 12
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 4
    评论
Kafka ControllerKafka 集群中的一个特殊角色,它具有以下主要作用: 1. 集群管理:Kafka Controller 负责管理整个 Kafka 集群的状态和元数据信息。它负责监控和维护集群中的 Broker、Topic、分区等信息,并确保集群的正常运行。如果有新的 Broker 加入或退出集群,Controller 将负责处理相关的操作和任务。 2. 分区分配:当创建新的 Topic 或者增加了 Topic 的分区数时,Kafka Controller 负责计算和执行分区的分配方案。它会根据配置的分区分配策略(如默认的 Range、RoundRobin 或自定义策略),将分区均匀地分配给各个 Broker 和消费者组,以实现负载均衡和高可用性。 3. Leader 选举:每个分区在 Kafka 集群中都有一个 Leader Broker,负责处理该分区的所有读写请求。当 Leader Broker 发生故障或不可用时,Controller 将负责进行 Leader 选举,选择新的 Leader Broker 来接管该分区的工作。通过 Leader 选举,可以保证分区在发生故障时仍然能够继续提供服务。 4. 副本管理:Kafka 使用副本来提供数据冗余和故障容错能力。Controller 负责管理副本的创建、同步和分布等操作。它会监控副本的状态,并在副本发生故障或不可用时进行恢复和修复,以保证数据的可靠性和一致性。 总的来说,Kafka ControllerKafka 集群中的核心组件之一,负责管理和维护集群的状态、元数据和各种任务。它通过协调和执行各种操作,确保 Kafka 集群的正常运行、数据的可靠性和高可用性。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

莫言静好、

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值