Fork me on GitHub

ZooKeeper在Kafka中的使用

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。

这里我个人不太确定,因此留个坑在这,有机会再补充吧。

本文标题:ZooKeeper在Kafka中的使用

原始链接:https://zhaoxiaofa.com/2020/05/02/ZooKeeper在Kafka中的使用/

许可协议: 署名-非商业性使用-禁止演绎 4.0 国际 转载请保留原文链接及作者。