1. 前言
本文涉及 Kafka 版本为 2.2.1。
2. ZooKeeper在Kafka中的使用场景
2.1 Broker端
2.1.1 Broker注册
本地启动 ZooKeeper 之后,再启动 Broker,ZooKeeper 打印了如下日志:
[2022-01-11 10:54:49,631] INFO Creating new log file: log.148 (org.apache.zookeeper.server.persistence.FileTxnLog)
查看 ZooKeeper 文件目录下的 log.148 文件,如下:
?$?$CV~GC?????????B?Z;d?$CW~GMX6/brokers/ids/0????worldanyone?/brokers/ids/0?{“features”:{},”listener_security_protocol_map”:{“PLAINTEXT”:”PLAINTEXT”},”endpoints”:[“PLAINTEXT://172.16.121.124:9092”],”jmx_port”:-1,”port”:9092,”host”:”172.16.121.124”,”version”:5,”timestamp”:”1641869692191”}Mά?kB
?’???$CX~GM?i
/controller6{“version”:1,”brokerid”:0,”timestamp”:”1641869692393”}worldanyone/controller_epoch/controller_epoch????????N??FB%
从乱码文件中,隐约能看到 /brokers/ids/
,这边是 Broker 启动时在 ZooKeeper 上进行注册,创建属于自己的节点。
每个 Broker 会将自己的 IP 地址和端口记录到该节点中去。其中,Broker 创建的节点类型是临时节点,一旦Broker 宕机,则对应的临时节点也会被自动删除。
2.1.2 Topic注册
使用 Kafka 官网上的脚本创建 topic ,脚本如下:
1
2 > bin/kafka-topics.sh --create --partitions 1 --replication-factor 1 --topic quickstart-events --bootstrap-server localhost:9092
>
创建 topic 之后,log.148 文件如下:
/brokers/ids/0????worldanyone?/brokers/ids/0?{“features”:{},”listener_security_protocol_map”:{“PLAINTEXT”:”PLAINTEXT”},”endpoints”:[“PLAINTEXT://172.16.121.124:9092”],”jmx_port”:-1,”port”:9092,”host”:”172.16.121.124”,”version”:5,”timestamp”:”1641869692191”}Mά?kB
?’???$CX~GM?i
/controller6{“version”:1,”brokerid”:0,”timestamp”:”1641869692393”}worldanyone/controller_epoch/controller_epoch????????N??FBoA
$?$CuZ~G ?????????B?? ???$Cv[~G ?a /config/topics/quickstart-events{“version”:1,”config”:{}}worldanyoneP???B??A???$Cw~G ??!/brokers/topics/quickstart-eventst{“partitions”:{“0”:[0]},”topic_id”:”WQ8tMohZSjuDb12MDFsmuQ”,”adding_replicas”:{},”remov/controller_epoch?4/brokers/topics/quickstart-events/partitions/0/stateI{“controller_epoch”:14,”leader”:0,”version”:1,”leader_epoch”:0,”isr”:[0]}worldanyoneQ??YB%
此时文件中出现了 /brokers/topics/quickstart-eventst{"partitions":{"0":[0]}
topic 和 partition 相关的信息。
2.1.3 Controller选举
ZooKeeper 作为分布式协调工具的一大重要功能就是用于 Leader 选举。Kafka 集群中有一个 Broker 会被选举为 Controller,该选举操作依赖 ZooKeeper。
2.2 Producer端
无
2.3 Consumer端
无
2.4 TODO 迷惑之处
在我自己分析之后发现,高版本 Kafka (版本大于0.9)中 Producer 和 Consumer 应该都没有直接使用 ZooKeeper,但是网上查询资料的时候发现很多文章(高版本 Kafka)依然指出 Consumer 依赖 ZooKeeper。
这里我个人不太确定,因此留个坑在这,有机会再补充吧。