Kafka-Broker

Kafka使用Zookeeper管理集群成员,控制器是集群的核心,负责集群成员、主题、分区的管理。副本分为领导者副本和跟随者副本,ISRs确保数据同步。位移主题存储消费者消费位移,通过Compact策略清理。请求处理采用Reactor模式,优化了性能。高水位和Leader Epoch保障数据可见性和一致性。配置参数如replication.factor、min.insync.replicas影响数据一致性和可用性。
摘要由CSDN通过智能技术生成

1. 集群成员

Kafka使用Zookeeper来管理集群成员(Broker),Broker启动时通过创建临时节点将自己注册到在Zookeeper,Zookeeper会将Broker的变动信息通知给控制器。

1.1 控制器

控制器是一个Kafka集群中的一个Broker,其作用是在Zookeeper的帮助下管理和协调整个Kafka集群。

Zookeeper概述
Zookeeper是一个高可靠性的分布式协调框架,核心功能是提供了:文件系统+通知机制
ZK在内存中以树状目录结构存储数据,保证了高吞吐量和低延迟,但也限制了数据量的大小。
ZK赋予了客户端监听节点znode变更的能力,客户端通过在节点上注册Watcher,当事件发生时ZK会显示通知客户端。
常用作集群成员管理、Leader选举、注册中心、分布式锁等等。
在这里插入图片描述

选举
Broker启动时会尝试创建/controller临时节点,第一个成功创建的Broker会被指定为控制器。其它节点在该节点上注册Watcher以接收节点变更通知,并在控制器离线时,竞选控制器。
控制器使用epoch来避免“脑裂”,防止两个Broker同时认为自己是当前唯一的控制器。Broker在成为控制器之后,会自增epoch,旧控制器的epoch值较小,其消息会被其他Broker忽略。

功能

  1. 集群成员管理(Broker上下线)
    利用ZK的Watch机制和临时节点对集群Broker进行管理。比如:

    • 当有新Broker启动后,其会在/broker/ids下创建一个临时节点,ZK通过Watch机制将该事件通知给控制器,控制器进而开始新增Broker作业。
    • 当有Broker离线时,其与ZK之间的session结束,临时节点会被自动删除,ZK同样将该变更通知给控制器,控制器进而进行一些善后操作。比如首领副本离线,控制器需要为该分区重新选举分区首领(副本列表下一个副本),并将结果通知给该分区所有副本Broker。消费者需要重新发送Metadata请求获取新的分区首领信息
  2. 主题、分区管理(增删主题/分区、分区分配、首领选举)

  3. 数据存储
    控制器上保存了最全的集群元数据信息,其它Broker会定期接收控制器发来的元数据更新请求,从而更新其缓存数据,所以客户端元数据请求可发送给任意Broker。比较重要的数据有:所有主题信息、所有Broker信息。这些信息在ZK上也存储了一份,控制器初始化时会从ZK拉取。

故障转移Failover
任意时刻,Kafka集群中只有一个控制器,为了防止出现单点故障,Kafka为控制器提供了故障转移机制。
当控制器离线时,与ZK之间的session中断,ZK会删除/controller临时节点,集群中的其它Broker由于在/controller节点上注册了Watcher,会接收到ZK发来的节点变更通知,进而开始竞选控制器:抢先创建/controller节点。最终,第一个创建者成为控制器,从ZK拉取集群元数据,开始履行工作职责。

设计

  • 单线程 + 事件队列
  • 异步Zookeeper操作

1.2 群组协调器

群组协调器是为消费者群组服务的Broker,提供组成员管理位移管理。其位置是保存该群组位移主题分区首领副本所在的Broker,由groupID.hashCode % 位移主题分区数 即可确定群组位移主题分区。

2. 副本

复制和分区多副本机制是Kafka Broker高可用、高持久性的实现方案

副本通常是指分布式系统在多台机器上保存相同的数据拷贝,其作用有:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值