跳到主要内容Kafka 3.7.2 KRaft 模式 SASL 认证集群安装与部署 | 极客日志Javajava
Kafka 3.7.2 KRaft 模式 SASL 认证集群安装与部署
基于 Kafka 3.7.2 KRaft 模式的无 ZooKeeper 集群搭建方案。内容涵盖三节点 Ubuntu 环境准备、KRaft 元数据初始化、SCRAM-SHA-256 用户创建以及 SASL_PLAINTEXT 安全协议的配置。通过分步操作实现了从非加密测试到启用 SASL 认证的完整集群部署流程。
PgDevote1 浏览 概述
在常规模式下,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 |
tar -zxvf kafka_2.13-3.7.0.tgz
我目前使用的是 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.properties log.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
/opt/kafka/bin/kafka-server-start.sh /opt/kafka/config/kraft/server.properties
/opt/kafka/bin/kafka-server-stop.sh -daemon /opt/kafka/config/kraft/server.properties
2. 不加密配置集群
vi /opt/kafka/config/kraft/server.properties
# 三个节点 controller.quorum.voters 一样
# listeners 配置本机 ip
# advertised.listeners 配置本机 ip
# 节点 1
node.id=1
[email protected]:9093,[email protected]:9093,[email protected]:9093
listeners=PLAINTEXT://192.168.1.127:9092,CONTROLLER://192.168.1.127:9093
advertised.listeners=PLAINTEXT://192.168.1.127:9092
log.dirs=/home/kafka/log/kraft-combined-logs-1
# 节点 2
node.id=2
[email protected]:9093,[email protected]:9093,[email protected]:9093
listeners=PLAINTEXT://192.168.1.173:9092,CONTROLLER://192.168.1.173:9093
advertised.listeners=PLAINTEXT://192.168.1.173:9092
log.dirs=/home/kafka/log/kraft-combined-logs-2
# 节点三
node.id=3
[email protected]:9093,[email protected]:9093,[email protected]:9093
listeners=PLAINTEXT://192.168.1.111:9092,CONTROLLER://192.168.1.111:9093
advertised.listeners=PLAINTEXT://192.168.1.111:9092
log.dirs=/home/kafka/log/kraft-combined-logs-3
bin/kafka-storage.sh random-uuid
/opt/kafka/bin/kafka-storage.sh format -t BrCGek6YSWq4NkQ5GN-4nw -c /opt/kafka/config/kraft/server.properties
/opt/kafka/bin/kafka-server-start.sh /opt/kafka/config/kraft/server.properties
/opt/kafka/bin/kafka-configs.sh --bootstrap-server 192.168.1.127:9092 --alter --add-config 'SCRAM-SHA-256=[password=admin-secret]' --entity-type users --entity-name admin
3. 加密集群配置
然后修改三台机器的 /kraft/server.properties 的配置 (SCRAM-SHA-256)
# 使用 SASL_PLAINTEXT ip 使用为当前节点 ip
listeners=SASL_PLAINTEXT://192.168.1.127:9092
# inter.broker.listener.name 注释掉 这个不能跟 security.inter.broker.protocol 一起添加
# 这个去掉 原来的 CONTROLLER://:9093 不对外暴露,配置的 ip 为当前节点 ip
advertised.listeners=SASL_PLAINTEXT://192.168.1.127:9092
listener.security.protocol.map=PLAINTEXT:PLAINTEXT,SASL_PLAINTEXT:SASL_PLAINTEXT
# 指定 Broker 间通信使用的安全协议和 SASL 机制
security.inter.broker.protocol=SASL_PLAINTEXT
sasl.mechanism.inter.broker.protocol=SCRAM-SHA-256
sasl.enabled.mechanisms=SCRAM-SHA-256
创建文件 kafka_server_jaas.conf,我这里放到了 /opt/kafka/config/kafka_server_jaas.conf 这里
KafkaServer {
org.apache.kafka.common.security.scram.ScramLoginModule required username="admin" password="admin-secret";
};
修改启动脚本 /opt/kafka/bin/kafka-server-start.sh
export KAFKA_HEAP_OPTS="-Xmx1G -Xms1G -Djava.security.auth.login.config=/opt/kafka/config/kafka_server_jaas.conf"
使用 Kafka 链接工具 Offset Explore 进行验证。
org.apache.kafka.common.security.scram.ScramLoginModule required username="admin" password="admin-secret";
4. 整体加密后的配置文件
下面是我整体的 127 节点配置文件,其他两个节点配置也一样的,仅有节点机器的 IP 变化。
/opt/kafka/config/kraft/server.properties
process.roles=broker,controller
node.id=1
# 三台机器配置一样
[email protected]:9093,[email protected]:9093,[email protected]:9093
# listeners 配置当前用节点 IP 使用 SASL_PLAINTEXT
listeners=SASL_PLAINTEXT://192.168.1.127:9092,PLAINTEXT://192.168.1.127:9093
#inter.broker.listener.name=PLAINTEXT
# advertised.listeners 配置当前用节点 IP 和 SASL_PLAINTEXT
advertised.listeners=SASL_PLAINTEXT://192.168.1.127:9092
controller.listener.names=PLAINTEXT
#listener.security.protocol.map=CONTROLLER:PLAINTEXT,PLAINTEXT:PLAINTEXT,SSL:SSL,SASL_PLAINTEXT:SASL_PLAINTEXT,SASL_SSL:SASL_SSL
listener.security.protocol.map=PLAINTEXT:PLAINTEXT,SASL_PLAINTEXT:SASL_PLAINTEXT
num.network.threads=3
num.io.threads=8
socket.send.buffer.bytes=102400
socket.receive.buffer.bytes=102400
socket.request.max.bytes=104857600
log.dirs=/home/kafka/log/kraft-combined-logs-1
num.partitions=1
num.recovery.threads.per.data.dir=1
offsets.topic.replication.factor=1
transaction.state.log.replication.factor=1
transaction.state.log.min.isr=1
log.retention.hours=168
log.segment.bytes=1073741824
log.retention.check.interval.ms=300000
# 启用 SASL
security.inter.broker.protocol=SASL_PLAINTEXT
sasl.enabled.mechanisms=SCRAM-SHA-256
sasl.mechanism.inter.broker.protocol=SCRAM-SHA-256
微信扫一扫,关注极客日志
微信公众号「极客日志」,在微信中扫描左侧二维码关注。展示文案:极客日志 zeeklog
相关免费在线工具
- Keycode 信息
查找任何按下的键的javascript键代码、代码、位置和修饰符。 在线工具,Keycode 信息在线工具,online
- Escape 与 Native 编解码
JavaScript 字符串转义/反转义;Java 风格 \uXXXX(Native2Ascii)编码与解码。 在线工具,Escape 与 Native 编解码在线工具,online
- JavaScript / HTML 格式化
使用 Prettier 在浏览器内格式化 JavaScript 或 HTML 片段。 在线工具,JavaScript / HTML 格式化在线工具,online
- JavaScript 压缩与混淆
Terser 压缩、变量名混淆,或 javascript-obfuscator 高强度混淆(体积会增大)。 在线工具,JavaScript 压缩与混淆在线工具,online
- Base64 字符串编码/解码
将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online
- Base64 文件转换器
将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online