Kafka 3.0.0部署 (Zookeeper管理)

words: 726    views:    time: 3min

在Kafka中,Zookeeper扮演集群协调和管理的角色,负责管理和协调Kafka集群中的元数据,帮助Kafka实现高可用性、负载均衡和容错性。

下载kafka_2.13-3.0.0.tgz,https://kafka.apache.org/downloads

配置启动zookeeper

  • 分别修改zookeeper配置
kafka1/config/zookeeper.properties
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
# the directory where the snapshot is stored.
dataDir=/Users/shanhuiming/zooenv/kafka3.0.0/kafka1/zk-data
# the port at which the clients will connect
clientPort=2181
# disable the per-ip limit on the number of connections since this is a non-production config
maxClientCnxns=0
# Disable the adminserver by default to avoid port conflicts.
# Set the port to something non-conflicting if choosing to enable this
admin.enableServer=false
# admin.serverPort=8080

initLimit=10
syncLimit=5

server.101=127.0.0.1:2888:3888
server.102=127.0.0.1:2889:3889
server.103=127.0.0.1:2890:3890
kafka1/zk-data/myid
1
101
  • 分别启动zookeeper
1
bin/zookeeper-server-start.sh config/zookeeper.properties &

配置启动kafka

  • 分别修改kafka配置

这里advertised.listeners是作为metadata写到zk中,用来告诉客户端producer或consumer怎么连接的,在使用容器部署时要注意下

kafka1/config/server.properties
1
2
3
4
5
6
7
8
9
10
11
# The id of the broker. This must be set to a unique integer for each broker.
broker.id=1

# {listener名称}://{HOST/IP,默认0.0.0.0}:{PORT}
listeners=PLAINTEXT://:9092

advertised.listeners=PLAINTEXT://127.0.0.1:9092

log.dirs=/Users/shanhuiming/zooenv/kafka3.0.0/kafka1/kafka-logs

zookeeper.connect=127.0.0.1:2181,127.0.0.1:2182,127.0.0.1:2183
  • 内外网络区分场景

比如外部网络访问需要加密,而内部网络访问不需要

1
2
3
listener.security.protocol.map=INTERNAL:PLAINTEXT,EXTERNAL:SSL
listeners= INTERNAL://0.0.0.0:19092
advertised.listeners= INTERNAL://{internal_hostname}:19092,EXTERNAL://{external_hostname}:9092
  • 分别启动kafka
1
bin/kafka-server-start.sh config/server.properties &

本地测试

  • 创建Topic
1
./kafka-topics.sh --create --topic test --bootstrap-server localhost:9092 --partitions 1 --replication-factor 1
  • 查看Topic
1
./kafka-topics.sh --describe --bootstrap-server localhost:9092
  • 收发消息
1
2
3
4
5
## 打开终端发送消息
./kafka-console-producer.sh --topic test --bootstrap-server localhost:9092

## 打开终端消费消息
./kafka-console-consumer.sh --topic test --from-beginning --bootstrap-server localhost:9092

zookeeper中的kafka数据管理

  • kafka相关znode
1
2
3
4
5
6
7
/brokers/ids/[brokerId]    Broker注册信息
/brokers/topics/[topic] 主题和分区分配
/config/topics/[topic] 主题配置
/config/clients 客户端配置
/admin/delete_topics 待删除主题
/controller 控制器选举
/controller_epoch 控制器纪元(防止脑裂)
  • Broker元数据管理

Zookeeper存储了所有Kafka Broker的元数据信息,包括:

1
2
3
Broker列表及其状态
每个Broker负责的分区信息
主题(Topic)和分区(Partition)的元数据
  • Controller选举

Kafka集群中有一个特殊的Broker角色称为控制器Controller,负责分区Leader选举等关键操作,Zookeeper通过临时节点实现控制器的选举:

1
2
3
第一个成功在Zookeeper创建临时节点的Broker成为控制器
其他Broker监听该节点变化
当控制器失效时,临时节点消失,下一个节点晋级
  • 分区状态管理

Zookeeper维护着所有分区的状态信息,包括:

1
2
3
分区Leader和ISR(In-Sync Replicas)列表
分区分配和重新平衡
分区状态变更通知


参考:

  1. https://blog.csdn.net/qq_58299462/article/details/146528093