kafka 集群原理设计(三)之启动原理介绍
业务背景问题描述
现在有三个机器节点192.168.0.200、192.168.0.201、192.168.0.202,分别安装部署zookeeper、
kafka集群,每个topic有3个分区,3个副本,则kafka各个节点在刚启动时,是如何选择哪个Kafka节
点为管理节点,哪个副本为主,其余为副本?
在 Kafka 集群中,部署 ZooKeeper 和 Kafka 后,各个节点在启动时的行为包括以下几个步骤:
- ZooKeeper 启动和配置:每个节点启动 ZooKeeper,配置 ZooKeeper 集群。
- Kafka 启动和注册:每个 Kafka Broker 启动并向 ZooKeeper 注册自身信息。
- Controller 选举:ZooKeeper 选举出 Kafka Controller。
- Partition 领导者和副本分配:Kafka Controller 负责分配 Partition 的领导者和副本。
以下是详细的启动过程、实现原理和核心代码示意:
1. ZooKeeper 启动和配置
每个机器节点启动 ZooKeeper,并配置集群。
配置文件 (zoo.cfg
) 示例:
tickTime=2000
dataDir=/var/lib/zookeeper
clientPort=2181
initLimit=5
syncLimit=2
server.1=192.168.0.200:2888:3888
server.2=192.168.0.201:2888:3888
server.3=192.168.0.202:2888:3888
启动 ZooKeeper:
# 在每个节点上执行
bin/zkServer.sh start
2. Kafka 启动和注册
每个 Kafka Broker 启动并向 ZooKeeper 注册自身信息。
配置文件 (server.properties
) 示例:
broker.id=0
listeners=PLAINTEXT://192.168.0.200:9092
log.dirs=/var/lib/kafka/logs
zookeeper.connect=192.168.0.200:2181,192.168.0.201:2181,192.168.0.202:2181
启动 Kafka Broker:
# 在每个节点上执行
bin/kafka-server-start.sh config/server.properties
3. Controller 选举
当所有 Broker 启动后,ZooKeeper 开始选举 Kafka Controller。Controller 是负责管理集群范
围内的管理任务的 Broker。
核心代码示例(ControllerElection.scala):
class ControllerElection(zooKeeperClient: KafkaZkClient) {def elect