一、版本信息
JDK | 1.8 |
kafka | 3.3.1 |
二、集群架构
Kafka-Kraft 架构介绍
左图为 Kafka 原有架构,元数据在 zookeeper 中,运行时动态选举 controller,由controller 进行 Kafka 集群管理。
右图为 kraft 模式架构, 不再依赖 zookeeper 集群,而是用三台 controller 节点代替 zookeeper,
元数据保存在 controller 中, 由 controller 直接进行 Kafka 集群管理。
这样做的好处有以下几个:
⚫ Kafka 不再依赖外部框架, 而是能够独立运行;
⚫ controller 管理集群时, 不再需要从 zookeeper 中先读取数据, 集群性能上升;
⚫ 由于不依赖 zookeeper, 集群扩展时不再受到 zookeeper 读写能力限制;
⚫ controller 不再动态选举, 而是由配置文件规定。 这样我们可以有针对性的加强
controller 节点的配置, 而不是像以前一样对随机 controller 节点的高负载束手无策。
三、Kafka-Kraft 集群部署
1)上传 kafka 安装包并解压文件
tar -zxvf kafka_2.13-3.3.1.tgz
|
2)重命名文件
mkdir /data
mv kafka_2.13-3.3.1 /data/kafka
|
3)修改/data/kafka/config/kraft/server.properties 配置文件
# kafka 的角色(controller 相当于主机、 broker 节点相当于从机,主机类似 zk 功能)
process.roles=broker, controller
# 节点 ID
node. id =1
# controller 服务协议别名
controller.listener.names=CONTROLLER
# 全 Controller 列表
[email protected]:9093,[email protected]:9093,[email protected]:9093
# 不同服务器绑定的端口
listeners=PLAINTEXT: //192 .168.11.204:9092,CONTROLLER: //192 .168.11.204:9093
# broker 服务协议别名
inter.broker.listener.name=PLAINTEXT
# broker 对外暴露的地址
advertised.Listeners=PLAINTEXT: //192 .168.11.204:9092
# 协议别名到安全协议的映射
listener.security.protocol.map=CONTROLLER:PLAINTEXT,PLAINTEXT:PLA
INTEXT,SSL:SSL,SASL_PLAINTEXT:SASL_PLAINTEXT,SASL_SSL:SASL_SSL
# kafka 数据存储目录
log. dirs = /data/kafka/data
# 新增下面内容
message.max.bytes=11534336
queued.max.requests=500
|
4)分发 kafka文件
scp -r /data/kafka 192.168.11.205: /data
scp -r /data/kafka 192.168.11.206: /data
|
⚫ 在 205 和 206 上 需 要 对 node.id 相 应 改 变 , 值 需 要 和controller.quorum.voters 对应。
⚫ 在 205 和 206 上 需 要 根 据 各 自 的 IP信息 , 修 改 相 应 的listeners和advertised.Listeners 地址。
5) 初始化集群数据目录
(1) 首先生成存储目录唯一 ID。
. /bin/kafka-storage .sh random-uuid
|
(2) 用该 ID 格式化 kafka 存储目录(三台节点)。
. /bin/kafka-storage .sh format -t J7s9e8PPTKOO47PxzI39VA -c /data/kafka/config/kraft/server .properties
|
6) 启动 kafka 集群
. /bin/kafka-server-start .sh -daemon config /kraft/server .properties
|
7)停止 kafka 集群
. /bin/kafka-server-stop .sh
|
四、添加系统服务
1)创建系统服务文件并写入内容
cat > /lib/systemd/system/kafka .service << EOF
[Unit]
Description=Kafka Service
After=network.target
[Service]
Type=simple
LimitNOFILE=65535
Environment= "PATH=/java/jdk1.8.0_161/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin"
ExecStart= /opt/kafka_2 .13-3.3.1 /bin/kafka-server-start .sh /opt/kafka_2 .13-3.3.1 /config/kraft/server .properties
ExecStop= /opt/kafka_2 .13-3.3.1 /bin/kafka-server-stop .sh
Restart=always
[Install]
WantedBy=multi-user.target
EOF
|
2)启动服务
systemctl daemon-reload
systemctl start kafka.service
systemctl enable kafka.service
|
3)查看服务
systemctl status kafka.service
|