Kafka集群初始化过程及底层原理
Kafka集群初始化过程及底层原理
Apache Kafka是一种分布式流处理平台,广泛应用于大数据处理和实时数据流应用中。本文将深入探讨Kafka集群的初始化过程及其底层原理,帮助读者更好地理解Kafka的内部工作机制。
集群启动
相关概念
1.1.1 代理:Broker
使用Kafka前,我们都会启动Kafka服务进程,这里的Kafka服务进程我们一般会称之为Kafka Broker或Kafka Server。因为Kafka是分布式消息系统,所以在实际的生产环境中,是需要多个服务进程形成集群提供消息服务的。所以每一个服务节点都是一个broker,而且在Kafka集群中,为了区分不同的服务节点,每一个broker都应该有一个不重复的全局ID,称之为broker.id,这个ID可以在kafka软件的配置文件server.properties中进行配置
#集群ID
broker.id=0
咱们的Kafka集群中每一个节点都有自己的ID,整数且唯一。
主机 | broker.id |
---|---|
kafka-broker1 | 1 |
kafka-broker2 | 2 |
kafka-broker3 | 3 |
1.1.2 控制器:Controller
Kafka是分布式消息传输系统,所以存在多个Broker服务节点,但是它的软件架构采用的是分布式系统中比较常见的主从(Master - Slave)架构,也就是说需要从多个Broker中找到一个用于管理整个Kafka集群的Master节点,这个节点,我们就称之为Controller。它是Apache Kafka的核心组件非常重要。它的主要作用是在Apache Zookeeper的帮助下管理和协调控制整个Kafka集群。
如果在运行过程中,Controller节点出现了故障,那么Kafka会依托于ZooKeeper软件选举其他的节点作为新的Controller,让Kafka集群实现高可用。
Kafka集群中Controller的基本功能:
- Broker管理
- 监听/brokers/ids节点相关的变化:
- Broker数量增加或减少的变化
- Broker对应的数据变化
- Topic管理
- 新增:监听/brokers/topics节点相关的变化
- 修改:监听/brokers/topics节点相关的变化
- 删除:监听/admin/delete_topics节点相关的变化
- Partition管理
- 监听/admin/reassign_partitions节点相关的变化
- 监听/isr_change_notification节点相关的变化
- 监听/preferred_replica_election节点相关的变化
- 数据服务
- 启动分区状态机和副本状态机
集群启动
初始化服务
Kafka Broker中有很多的服务对象,用于实现内部管理和外部通信操作。
2.2.3.2.1 启动任务调度器
每一个Broker在启动时都会创建内部调度器(KafkaScheduler)并启动,用于完成节点内部的工作任务。底层就是Java中的定时任务线程池ScheduledThreadPoolExecutor
2.2 创建数据管理器
每一个Broker在启动时都会创建数据管理器(LogManager),用于接收到消息后,完成后续的数据创建,查询,清理等处理。
2.3 创建远程数据管理器
每一个Broker在启动时都会创建远程数据管理器(RemoteLogManager),用于和其他Broker节点进行数据状态同步。
2.4 注册Broker节点
Broker启动时,会通过ZK客户端对象向ZK注册当前的Broker 节点ID,注册后创捷的ZK节点为临时节点。如果当前Broker的ZK客户端断开和ZK的连接,注册的节点会被删除。
2.5 启动控制器
控制器(KafkaController)是每一个Broker启动时都会创建的核心对象,用于和ZK之间建立连接并申请自己为整个Kafka集群的Master管理者。如果申请成功,那么会完成管理者的初始化操作,并建立和其他Broker之间的数据通道接收各种事件,进行封装后交给事件管理器,并定义了process方法,用于真正处理各类事件。
2.5.1 初始化通道管理器
创建通道管理器(ControllerChannelManager),该管理器维护了Controller和集群所有Broker节点之间的网络连接,并向Broker发送控制类请求及接收响应。
2.5.2 初始化事件管理器
创建事件管理器(ControllerEventManager)维护了Controller和集群所有Broker节点之间的网络连接,并向Broker发送控制类请求及接收响应。
2.5.3 初始化状态管理器
创建状态管理器(ControllerChangeHandler)可以监听/controller节点的操作,一旦节点创建(ControllerChange),删除(Reelect),数据发生变化(ControllerChange),那么监听后执行相应的处理。
2.5.4 启动控制器
控制器对象启动后,会向事件管理器发送Startup事件,事件处理线程接收到事件后会通过ZK客户端向ZK申请/controller节点,申请成功后,执行当前节点成为Controller的一些列操作。主要是注册各类 ZooKeeper 监听器、删除日志路径变更和 ISR 副本变更通知事件、启动 Controller 通道管理器,以及启动副本状态机和分区状态机。