概述
在常规模式下,Kafka 依赖 ZooKeeper 存储元数据,通过动态选举产生 Controller 节点来管理集群。而在实验性的 KRaft 模式下,架构进行了重大改进:完全移除了对 ZooKeeper 的依赖,改用三个预配置的 Controller 节点来存储元数据并直接管理 Kafka 集群。
这种新架构带来多项优势:
- 实现完全自主运行,消除了对外部组件的依赖
- 提升集群性能,Controller 可直接访问本地存储的元数据,无需经过 ZooKeeper 中转
- 突破 ZooKeeper 的读写性能瓶颈,使集群扩展更加灵活
- 采用固定配置的 Controller 节点,取代原有的动态选举机制,便于针对性地优化 Controller 资源配置,有效解决了以往随机 Controller 节点负载过高的问题
1. 集群部署环境准备
- 准备了三台 Ubuntu-18.04.6 的虚拟机,IP 分别为:
| 需要 | IP | 备注 |
|---|---|---|
| 1 | 192.168.1.127 | 节点 1 |
| 2 | 192.168.1.173 | 节点 2 |
| 3 | 192.168.1.111 | 节点 3 |
- Kafka 二进制包下载并解压
tar -zxvf kafka_2.13-3.7.0.tgz # 复制到/opt/kafka目录下 mv kafka_2.13-3.7.0 /opt/kafka
- JAVA JDK 安装
我目前使用的是 JDK 11,系统最低要求为 Java 8 及以上版本。
sudo apt update
sudo apt install openjdk-11-jdk
2. 概述部署流程
首先不做任何修改单节点启动测试一下然后关闭。
因为我们要配置 SASL SCRAM-SHA-256 方式进行认证,所以部署方式如下:
注意:SASL SCRAM-SHA-256 需要先在不加密的情况下先创建用户。
- 调整配置
/opt/kafka/config/kraft/server.propertieslog.dirs=/home/kafka/log/kraft-combined-logs-1 - 单机测试
- 删除
/home/kafka/log/kraft-combined-logs-1下所有文件 (因为后续要初始化集群的) - 不加密配置集群
- 三台机器重新初始化
- 创建用户 (在一个节点上创建就行会三台机器会自行同步 我这里是 127 节点) 然后关闭三台机器的 kafka 服务
- 调整配置为 SASL SCRAM-SHA-256 后重启服务
3. 详细部署配置
1. 单节点测试
初始化集群数据目录并启动
cd /opt/kafka
bin/kafka-storage.sh random-uuid # 输出 ID:prdjjvFhRCGuxZ2EirIiyw
# kraft 前台启动
/opt/kafka/bin/kafka-server-start.sh /opt/kafka/config/kraft/server.properties
# 关闭 -daemon 代表是后台运行
/opt/kafka/bin/kafka-server-stop.sh -daemon /opt/kafka/config/kraft/server.properties

