Kafka是公平式主从架构【即允许从节点选举成为新的主节点】。Kafka集群中所有的Broker节点分为两种,一个是Controller Broker主节点,一种是普通的Broker从节点。
主节点:Kafka Broker【Controller】
(1)是一种特殊的Broker,从所有的Broker中选举出来的,负责普通Broker的工作;
(2)负责管理所有的从节点:Topic、分区和副本【负责决定一个分区中leader副本和controller副本】
(3)每次启动集群,会从所有Broker中选举一个Controller【由zookeeper实现】
从节点:Kafka Broker
(1)对外提供读请求
(2)其他的Broker监听Controller在zookeeper中创建的临时节点,如果临时节点消息,即Controller故障,zookeeper会从Broker中选举一个新的Controller.
那么,我们如何查看本机中的 Kafka 是Controller 还是普通的 Kafka Broker呢?(虽然 Kafka 本身不需要我们去关心谁是主节点谁是从节点,无论是Kafka 3.0之前依赖 zk 的主从选举机制还是Kafka 3.0 之后它内部的主从选举机制,都会帮它完成这一点。)
我们通过 jps 是无法看出谁是主,谁是从。我们需要到 zookeeper 中去查看。命令如下:
(1)我们去到 zookeeper 的 bin 目录:
cd /export/server/zookeeper-3.4.6/bin/
(2)我们运行 zkCli.sh 脚本
sh zkCli.sh
(3)我们通过 ls / 的命令,来查看当前 zookeeper 下所有的子节点:
[zk: localhost:2181(CONNECTED) 1] ls /
[cluster, controller_epoch, controller, brokers, zookeeper, admin, isr_change_notification, consumers, log_dir_event_notification, latest_producer_id_block, config]
(4)我们可以通过 ls /controller 来查看 controller 下是否有子节点(通过该命令可以看到controller下并无子节点)
[zk: localhost:2181(CONNECTED) 3] ls /controller
[]
(5)我们可以通过 get /controller 命令来查看谁是 Kafka 的主节点
[zk: localhost:2181(CONNECTED) 4] get /controller
{"version":1,"brokerid":0,"timestamp":"1660444862682"}
cZxid = 0x50000003f
ctime = Sun Aug 14 10:41:02 CST 2022
mZxid = 0x50000003f
mtime = Sun Aug 14 10:41:02 CST 2022
pZxid = 0x50000003f
cversion = 0
dataVersion = 0
aclVersion = 0
ephemeralOwner = 0x2829a1718820001
dataLength = 54
numChildren = 0
可以看到,brokerid 为0 的机器就是我们的 Kafka 主节点。而 Brokerid 是我们安装好 Kafka 后必须在某台机器上所做的对应的 Kafka 的相关配置。Kafka中,每个节点的节点id(Brokerid)必须不同。
网友评论