Kafka 正式生产环境部署实战笔记:KRaft + SSL + ACL + 独立管理机

Kafka 正式生产环境部署实战笔记:KRaft + SSL + ACL + 独立管理机

这篇笔记记录了我一次完整的 Kafka 正式生产环境部署过程,最终方案采用:

  • Kafka 4.2.0
  • KRaft 模式
  • 3 台 Controller + 3 台 Broker
  • 独立管理机
  • SSL 双向认证
  • ACL 权限控制
  • 独立管理机负责证书签发、集群管理、备份

整套环境最终已经完成以下验证:

  • KRaft Quorum 正常选主
  • 3 台 Broker 正常注册
  • Topic 正常创建
  • 副本同步正常
  • Producer / Consumer 消息链路正常
  • 管理机可以正常执行 Topic、ACL、Quorum 管理命令

一、为什么选择这套架构

这次部署没有再使用 ZooKeeper,而是直接使用 Kafka 新一代的 KRaft 模式。相比旧方案,KRaft 直接由 Kafka 自身管理元数据,不再依赖外部 ZooKeeper,架构更清晰,后续维护也更简单。

生产环境下,我没有使用 broker,controller 混合部署,而是直接拆成:

  • 3 台 Controller:专门负责元数据仲裁
  • 3 台 Broker:专门负责消息读写与副本同步
  • 1 台独立管理机:专门负责证书、命令行管理、备份与迁移

这样做的好处很明确:

  1. 控制面和数据面分离,结构更清晰。
  2. Controller 宕机不会直接影响 Broker 承载消息流量。
  3. Broker 扩容时不需要一起动 Controller。
  4. 管理机独立后,证书和 CA 私钥不必散落在 Kafka 节点上,更安全。

二、最终使用的机器规划

管理机

  • kafka-admin192.168.8.120

Controller 节点

  • controller-1192.168.8.101
  • controller-2192.168.8.102
  • controller-3192.168.8.103

Broker 节点

  • broker-1192.168.8.111
  • broker-2192.168.8.112
  • broker-3192.168.8.113

端口规划

  • 9093:Controller Quorum 通信
  • 9092:Broker 内部复制通信
  • 9094:业务访问端口

角色说明

  • 管理机:只负责证书、备份、管理命令,不参与 Kafka Quorum
  • Controller:负责 KRaft 元数据仲裁
  • Broker:负责消息读写、存储、副本复制

三、服务器配置建议

管理机

  • 2 核 4G
  • 40G~60G SSD

管理机不参与 Kafka Quorum,也不承载 Broker 流量,所以 2C4G 完全够用。它只负责这些事:

  • 生成 CA
  • 签发节点证书
  • 保存 admin 证书
  • 执行 Kafka 管理命令
  • 打包备份和迁移资料

Controller

  • 4 核 8G
  • 100G SSD

Controller 主要承担 KRaft 元数据仲裁,不负责业务流量。

Broker

  • 8 核 32G
  • 100G 系统盘 + 2T 数据盘

Broker 是 Kafka 的核心承载节点,真正决定吞吐能力的还是磁盘和内存,所以 Broker 不要配得太抠。

四、目录规划

管理机

/opt/kafka
/root/kafka-ca
/etc/kafka/ssl
/root/admin.properties
/root/kafka-backup

Controller

/opt/kafka
/opt/kafka/config
/data/kafka/meta
/etc/kafka/ssl
/var/log/kafka

Broker

/opt/kafka
/opt/kafka/config
/data/kafka/data
/etc/kafka/ssl
/var/log/kafka

五、为什么一定要单独做管理机

这次实践下来,我非常建议单独做管理机。

因为 Kafka 节点真正需要长期保存的敏感信息有:

  • 根 CA 私钥
  • 根 CA 证书
  • admin 管理证书
  • truststore
  • admin.properties

如果直接把这些东西长期放在 Broker 上,不但安全性差,后续迁移也麻烦。

独立管理机的最大价值在于:

  1. 证书中心独立。
  2. 后续新增 Broker 或业务系统时,可以统一签发客户端证书。
  3. 管理机损坏不会影响 Kafka 集群继续提供服务。
  4. 后续迁移管理机时,只需要迁移证书、配置和 Kafka CLI 工具包。

六、部署顺序

严格按以下顺序执行:

  1. 安装管理机
  2. 安装 6 台 Kafka 节点基础环境
  3. 管理机生成 CA、节点证书、admin 证书
  4. 分发证书到 6 台 Kafka 节点
  5. 安装 Kafka 到 6 台节点
  6. 写入 6 台节点配置文件
  7. 生成 Cluster ID 和 Controller UUID
  8. 格式化 3 台 Controller
  9. 格式化 3 台 Broker
  10. 修正目录权限
  11. 启动 Controller
  12. 启动 Broker
  13. 管理机验证 Quorum
  14. 创建 Topic、测试生产消费
  15. 配置 ACL
  16. 备份管理机证书和配置

七、管理机安装

主机名

hostnamectl set-hostname kafka-admin

hosts

cat >> /etc/hosts <<'EOF'
192.168.8.101 controller-1
192.168.8.102 controller-2
192.168.8.103 controller-3
192.168.8.111 broker-1
192.168.8.112 broker-2
192.168.8.113 broker-3
192.168.8.120 kafka-admin
EOF

软件安装

apt update
apt install -y openssl rsync wget curl vim tar unzip net-tools dnsutils

JDK安装

apt update && \
apt install -y wget apt-transport-https gpg ca-certificates && \
mkdir -p /usr/share/keyrings && \
wget -qO - https://packages.adoptium.net/artifactory/api/gpg/key/public | gpg --dearmor -o /usr/share/keyrings/adoptium.gpg && \
CODENAME="$(awk -F= '/^VERSION_CODENAME/{print $2}' /etc/os-release)" && \
echo "deb [signed-by=/usr/share/keyrings/adoptium.gpg] https://mirrors.tuna.tsinghua.edu.cn/Adoptium/deb ${CODENAME} main" > /etc/apt/sources.list.d/adoptium.list && \
apt update && \
apt install -y temurin-21-jdk && \
java -version && javac -version

安装 Kafka 工具包

mkdir -p /opt
cd /opt
wget https://downloads.apache.org/kafka/4.2.0/kafka_2.13-4.2.0.tgz
tar -xzf kafka_2.13-4.2.0.tgz
mv kafka_2.13-4.2.0 kafka

目录初始化

mkdir -p /root/kafka-ca
mkdir -p /etc/kafka/ssl
mkdir -p /root/kafka-backup
chmod 700 /root/kafka-ca
chmod 700 /etc/kafka/ssl

环境变量

cat > /etc/profile.d/kafka.sh <<'EOF'
export KAFKA_HOME=/opt/kafka
export PATH=$PATH:$KAFKA_HOME/bin
EOF
​
chmod +x /etc/profile.d/kafka.sh
source /etc/profile.d/kafka.sh

八. Kafka 节点基础环境

安装基础软件

apt update
apt install -y openjdk-21-jdk wget curl vim tar

创建 kafka 用户与目录

useradd -r -m -s /bin/bash kafka || true
​
mkdir -p /opt/kafka
mkdir -p /opt/kafka/config
mkdir -p /etc/kafka/ssl
mkdir -p /var/log/kafka
​
chown -R kafka:kafka /opt/kafka /etc/kafka /var/log/kafka
chmod 755 /etc/kafka
chmod 700 /etc/kafka/ssl

Controller 额外目录

mkdir -p /data/kafka/meta
chown -R kafka:kafka /data/kafka

Broker 额外目录

mkdir -p /data/kafka/data
chown -R kafka:kafka /data/kafka

九、证书体系

管理机生成 CA

cd /root/kafka-ca
openssl req -new -x509 -keyout ca-key.pem -out ca-cert.pem -days 3650 -nodes \
  -subj "/CN=Kafka-Internal-CA"

生成节点证书脚本

cd /root/kafka-ca
​
gen_cert() {
  local NAME="$1"
  local IP="$2"
​
  openssl req -newkey rsa:4096 -nodes \
    -keyout "${NAME}.key" \
    -out "${NAME}.csr" \
    -subj "/CN=${NAME}"
​
  cat > "${NAME}.ext" <<EOF
subjectAltName = DNS:${NAME},IP:${IP}
extendedKeyUsage = serverAuth,clientAuth
EOF
​
  openssl x509 -req -in "${NAME}.csr" \
    -CA ca-cert.pem -CAkey ca-key.pem -CAcreateserial \
    -out "${NAME}.crt" -days 3650 -extfile "${NAME}.ext"
​
  openssl pkcs12 -export \
    -in "${NAME}.crt" \
    -inkey "${NAME}.key" \
    -name "${NAME}" \
    -out "${NAME}.keystore.p12" \
    -passout pass:changeit
}
​
gen_cert controller-1 192.168.8.101
gen_cert controller-2 192.168.8.102
gen_cert controller-3 192.168.8.103
gen_cert broker-1 192.168.8.111
gen_cert broker-2 192.168.8.112
gen_cert broker-3 192.168.8.113

生成 admin 证书

cd /root/kafka-ca
​
openssl req -newkey rsa:4096 -nodes \
  -keyout admin.key \
  -out admin.csr \
  -subj "/CN=admin"
​
cat > admin.ext <<'EOF'
subjectAltName = DNS:admin
extendedKeyUsage = serverAuth,clientAuth
EOF
​
openssl x509 -req -in admin.csr \
  -CA ca-cert.pem -CAkey ca-key.pem -CAcreateserial \
  -out admin.crt -days 3650 -extfile admin.ext
​
openssl pkcs12 -export \
  -in admin.crt \
  -inkey admin.key \
  -name admin \
  -out admin.keystore.p12 \
  -passout pass:changeit

生成 truststore

cd /root/kafka-ca
​
keytool -importcert \
  -keystore kafka.truststore.p12 \
  -storetype PKCS12 \
  -alias kafka-ca \
  -file ca-cert.pem \
  -storepass changeit \
  -noprompt

十、证书分发

Controller

scp /root/kafka-ca/controller-1.keystore.p12 root@192.168.8.101:/etc/kafka/ssl/
scp /root/kafka-ca/kafka.truststore.p12 root@192.168.8.101:/etc/kafka/ssl/
scp /root/kafka-ca/ca-cert.pem root@192.168.8.101:/etc/kafka/ssl/
​
scp /root/kafka-ca/controller-2.keystore.p12 root@192.168.8.102:/etc/kafka/ssl/
scp /root/kafka-ca/kafka.truststore.p12 root@192.168.8.102:/etc/kafka/ssl/
scp /root/kafka-ca/ca-cert.pem root@192.168.8.102:/etc/kafka/ssl/
​
scp /root/kafka-ca/controller-3.keystore.p12 root@192.168.8.103:/etc/kafka/ssl/
scp /root/kafka-ca/kafka.truststore.p12 root@192.168.8.103:/etc/kafka/ssl/
scp /root/kafka-ca/ca-cert.pem root@192.168.8.103:/etc/kafka/ssl/

Broker

scp /root/kafka-ca/broker-1.keystore.p12 root@192.168.8.111:/etc/kafka/ssl/
scp /root/kafka-ca/kafka.truststore.p12 root@192.168.8.111:/etc/kafka/ssl/
scp /root/kafka-ca/ca-cert.pem root@192.168.8.111:/etc/kafka/ssl/
scp /root/kafka-ca/admin.keystore.p12 root@192.168.8.111:/etc/kafka/ssl/
​
scp /root/kafka-ca/broker-2.keystore.p12 root@192.168.8.112:/etc/kafka/ssl/
scp /root/kafka-ca/kafka.truststore.p12 root@192.168.8.112:/etc/kafka/ssl/
scp /root/kafka-ca/ca-cert.pem root@192.168.8.112:/etc/kafka/ssl/
scp /root/kafka-ca/admin.keystore.p12 root@192.168.8.112:/etc/kafka/ssl/
​
scp /root/kafka-ca/broker-3.keystore.p12 root@192.168.8.113:/etc/kafka/ssl/
scp /root/kafka-ca/kafka.truststore.p12 root@192.168.8.113:/etc/kafka/ssl/
scp /root/kafka-ca/ca-cert.pem root@192.168.8.113:/etc/kafka/ssl/
scp /root/kafka-ca/admin.keystore.p12 root@192.168.8.113:/etc/kafka/ssl/

节点统一修权限

chown -R kafka:kafka /etc/kafka/ssl
chmod 600 /etc/kafka/ssl/*

十一、Kafka 安装

六台 Kafka 节点都执行:

cd /usr/local/src
wget https://downloads.apache.org/kafka/4.2.0/kafka_2.13-4.2.0.tgz
tar -xzf kafka_2.13-4.2.0.tgz
cp -a kafka_2.13-4.2.0/* /opt/kafka/
chown -R kafka:kafka /opt/kafka

十二、节点配置文件

以下 6 份配置文件为当前环境最终生效版本。

Controller 统一说明

  • 文件路径:/opt/kafka/config/controller.properties
  • node.idlistenersssl.keystore.location 不同

Broker 统一说明

  • 文件路径:/opt/kafka/config/server.properties
  • node.idlistenersadvertised.listenersssl.keystore.location 不同

实际内容请直接采用当前已验证版本,不建议临时变更参数。

十三、systemd 服务

Controller

[Unit]
Description=Apache Kafka Controller (KRaft)
After=network.target
​
[Service]
Type=simple
User=kafka
Group=kafka
Environment=KAFKA_HEAP_OPTS=-Xms1g -Xmx1g
ExecStart=/opt/kafka/bin/kafka-server-start.sh /opt/kafka/config/controller.properties
ExecStop=/opt/kafka/bin/kafka-server-stop.sh
Restart=always
RestartSec=5
LimitNOFILE=100000
StandardOutput=append:/var/log/kafka/controller.log
StandardError=append:/var/log/kafka/controller-error.log
​
[Install]
WantedBy=multi-user.target

Broker

[Unit]
Description=Apache Kafka Broker (KRaft)
After=network.target
​
[Service]
Type=simple
User=kafka
Group=kafka
Environment=KAFKA_HEAP_OPTS=-Xms8g -Xmx8g
ExecStart=/opt/kafka/bin/kafka-server-start.sh /opt/kafka/config/server.properties
ExecStop=/opt/kafka/bin/kafka-server-stop.sh
Restart=always
RestartSec=5
LimitNOFILE=200000
StandardOutput=append:/var/log/kafka/broker.log
StandardError=append:/var/log/kafka/broker-error.log
​
[Install]
WantedBy=multi-user.target

十四、初始化与格式化

管理机生成 ID

cd /opt/kafka
​
CLUSTER_ID=$(bin/kafka-storage.sh random-uuid)
C1_UUID=$(bin/kafka-storage.sh random-uuid)
C2_UUID=$(bin/kafka-storage.sh random-uuid)
C3_UUID=$(bin/kafka-storage.sh random-uuid)
​
echo "CLUSTER_ID=$CLUSTER_ID"
echo "C1_UUID=$C1_UUID"
echo "C2_UUID=$C2_UUID"
echo "C3_UUID=$C3_UUID"

Controller 格式化

su -s /bin/bash -c '/opt/kafka/bin/kafka-storage.sh format --cluster-id 你的CLUSTER_ID --initial-controllers "1@192.168.8.101:9093:你的C1_UUID,2@192.168.8.102:9093:你的C2_UUID,3@192.168.8.103:9093:你的C3_UUID" --config /opt/kafka/config/controller.properties' kafka

Broker 格式化

su -s /bin/bash -c '/opt/kafka/bin/kafka-storage.sh format --cluster-id 你的CLUSTER_ID --config /opt/kafka/config/server.properties --no-initial-controllers' kafka

十五、权限修正(非常关键)

如果曾经用 root 执行过 format,就必须修权限,否则会出现:

java.nio.file.AccessDeniedException: /data/kafka/meta/__cluster_metadata-0/leader-epoch-checkpoint

Controller

chown -R kafka:kafka /data/kafka/meta /opt/kafka /etc/kafka /var/log/kafka
chmod -R u+rwX /data/kafka/meta
chmod 600 /etc/kafka/ssl/*

Broker

chown -R kafka:kafka /data/kafka/data /opt/kafka /etc/kafka /var/log/kafka
chmod -R u+rwX /data/kafka/data
chmod 600 /etc/kafka/ssl/*

十六、启动顺序

Controller

systemctl daemon-reload
systemctl enable kafka-controller
systemctl start kafka-controller
systemctl status kafka-controller --no-pager

Broker

systemctl daemon-reload
systemctl enable kafka-broker
systemctl start kafka-broker
systemctl status kafka-broker --no-pager

十七、管理机配置文件

/root/admin.properties

security.protocol=SSL
ssl.truststore.location=/etc/kafka/ssl/kafka.truststore.p12
ssl.truststore.password=changeit
ssl.truststore.type=PKCS12
​
ssl.keystore.location=/etc/kafka/ssl/admin.keystore.p12
ssl.keystore.password=changeit
ssl.key.password=changeit
ssl.keystore.type=PKCS12

十八、集群验证

查看 KRaft Quorum

/opt/kafka/bin/kafka-metadata-quorum.sh \
  --bootstrap-controller 192.168.8.101:9093 \
  --command-config /root/admin.properties \
  describe --status

查看 Topic 列表

/opt/kafka/bin/kafka-topics.sh \
  --bootstrap-server 192.168.8.111:9094 \
  --command-config /root/admin.properties \
  --list

创建测试 Topic

/opt/kafka/bin/kafka-topics.sh \
  --bootstrap-server 192.168.8.111:9094 \
  --command-config /root/admin.properties \
  --create \
  --topic app.order.created \
  --partitions 6 \
  --replication-factor 3 \
  --config min.insync.replicas=2

查看 Topic 详情

/opt/kafka/bin/kafka-topics.sh \
  --bootstrap-server 192.168.8.111:9094 \
  --command-config /root/admin.properties \
  --describe \
  --topic app.order.created

生产测试

/opt/kafka/bin/kafka-console-producer.sh \
  --bootstrap-server 192.168.8.111:9094 \
  --command-config /root/admin.properties \
  --topic app.order.created \
  --producer-property acks=all

消费测试

/opt/kafka/bin/kafka-console-consumer.sh \
  --bootstrap-server 192.168.8.111:9094 \
  --command-config /root/admin.properties \
  --topic app.order.created \
  --from-beginning

十九、ACL 与业务接入

原则

  • 不让业务系统使用 CN=admin
  • 每个业务系统单独签发客户端证书
  • 按 Topic / Group 最小授权

示例

/opt/kafka/bin/kafka-acls.sh \
  --bootstrap-server 192.168.8.111:9094 \
  --command-config /root/admin.properties \
  --add \
  --allow-principal "User:CN=order-producer" \
  --operation WRITE \
  --operation DESCRIBE \
  --topic app.order.created
/opt/kafka/bin/kafka-acls.sh \
  --bootstrap-server 192.168.8.111:9094 \
  --command-config /root/admin.properties \
  --add \
  --allow-principal "User:CN=order-consumer" \
  --operation READ \
  --operation DESCRIBE \
  --topic app.order.created
/opt/kafka/bin/kafka-acls.sh \
  --bootstrap-server 192.168.8.111:9094 \
  --command-config /root/admin.properties \
  --add \
  --allow-principal "User:CN=order-consumer" \
  --operation READ \
  --group order-service-group

二十、管理机备份与迁移

备份

mkdir -p /root/kafka-backup
tar -czf /root/kafka-backup/kafka-admin-backup-$(date +%F).tar.gz \
  /root/kafka-ca \
  /root/admin.properties \
  /etc/kafka/ssl

摘要

sha256sum /root/kafka-backup/kafka-admin-backup-$(date +%F).tar.gz > /root/kafka-backup/kafka-admin-backup-$(date +%F).sha256

新管理机恢复

tar -xzf kafka-admin-backup-2026-04-23.tar.gz -C /

二十一、常见问题

Controller 无法启动

查看:

systemctl status kafka-controller --no-pager -l
tail -n 100 /opt/kafka/logs/server.log
tail -n 100 /var/log/kafka/controller-error.log

报权限错误

检查:

ls -lah /data/kafka/meta
ls -lah /data/kafka/meta/__cluster_metadata-0

管理机连不上 Controller

测试:

timeout 3 bash -c '</dev/tcp/192.168.38.101/9093' && echo OK || echo FAIL

Topic 列表为空

通常代表 Broker 已连接正常,只是当前还没有 Topic。

二十二、日常运维命令

查看 Quorum

/opt/kafka/bin/kafka-metadata-quorum.sh \
  --bootstrap-controller 192.168.8.101:9093 \
  --command-config /root/admin.properties \
  describe --status

查看 Topic

/opt/kafka/bin/kafka-topics.sh \
  --bootstrap-server 192.168.8.111:9094 \
  --command-config /root/admin.properties \
  --list

查看 ACL

/opt/kafka/bin/kafka-acls.sh \
  --bootstrap-server 192.168.8.111:9094 \
  --command-config /root/admin.properties \
  --list

查看 Controller 日志

tail -f /var/log/kafka/controller.log

查看 Broker 日志

tail -f /var/log/kafka/broker.log

二十三、SSL 与 ACL 的实际做法

这套环境没有使用明文通信,而是直接上了:

  • SSL 双向认证
  • ACL 精细化授权

Broker 配置中启用了:

ssl.client.auth=required

这意味着:

  • 所有客户端必须携带合法证书
  • 仅有 truststore 不够,还必须有自己的 keystore
  • 后续每个业务系统都应该有自己的独立证书

例如:

  • CN=order-producer
  • CN=order-consumer

然后再通过 ACL 限制它们只能访问对应 Topic 和消费组。

这种方式非常适合正式生产环境,因为:

  • 哪个系统写消息、读消息,一眼能分清
  • 某个证书泄漏时可以单独吊销或替换
  • 不需要让业务系统直接使用 admin 权限

二十四、部署过程中踩到的一个核心坑

这次最重要的一个排障点,是 KRaft 元数据目录权限问题

当时 Controller 一直起不来,最后前台启动后发现报错:

java.nio.file.AccessDeniedException: /data/kafka/meta/__cluster_metadata-0/leader-epoch-checkpoint

原因是:

  • kafka-storage.sh format 是用 root 执行的
  • Kafka 服务是以 kafka 用户运行的
  • /data/kafka/meta 下的关键文件被 root 创建
  • 最终 Kafka 进程没有写权限,启动直接失败

修复方法很简单:

Controller

chown -R kafka:kafka /data/kafka/meta /opt/kafka /etc/kafka /var/log/kafka
chmod -R u+rwX /data/kafka/meta
chmod 600 /etc/kafka/ssl/*

Broker

chown -R kafka:kafka /data/kafka/data /opt/kafka /etc/kafka /var/log/kafka
chmod -R u+rwX /data/kafka/data
chmod 600 /etc/kafka/ssl/*

这一步非常关键,也是这次整套部署里最值得记录的经验。

建议所有节点在 format 之后都主动修正一次 ownership。

二十五、集群启动顺序

正确顺序一定是:

  1. 管理机安装完成
  2. 6 台 Kafka 节点安装基础环境
  3. 管理机生成证书并分发
  4. 安装 Kafka 到 6 台节点
  5. 写入 Controller / Broker 配置文件
  6. 生成 Cluster ID 和 Controller UUID
  7. 格式化 3 台 Controller
  8. 格式化 3 台 Broker
  9. 修正目录权限
  10. 先启动 3 台 Controller
  11. 再启动 3 台 Broker
  12. 管理机验证 Quorum
  13. 创建 Topic、测试生产消费

如果顺序乱了,后面排障会非常痛苦。

二十六、最终验证结果

这次部署最终已经验证通过:

Quorum 状态正常

管理机执行:

/opt/kafka/bin/kafka-metadata-quorum.sh \
  --bootstrap-controller 192.168.8.101:9093 \
  --command-config /root/admin.properties \
  describe --status

结果正常返回了:

  • ClusterId
  • LeaderId
  • LeaderEpoch
  • CurrentVoters
  • CurrentObservers

说明 3 台 Controller 和 3 台 Broker 都已经接入 KRaft 元数据体系。

Topic 创建成功

测试 Topic:

app.order.created

成功创建,副本数为 3,分区数为 6。

Producer / Consumer 测试成功

手工发送了一条:

hello kafka

消费者成功收到,说明:

  • Broker 正常
  • Topic 正常
  • SSL 正常
  • 副本同步正常
  • 生产消费链路正常

二十七、正式上线后的建议

1. 不要再用 admin 证书接业务

admin 证书只留给运维管理,业务系统单独发证书。

2. 给每个系统单独做 ACL

例如:

  • order-producer 只能写 app.order.created
  • order-consumer 只能读 app.order.created
  • order-consumer 只能使用 order-service-group

3. Broker 数据盘与系统盘分离

Kafka 数据不要和系统日志、公用服务混在一个盘。

4. 及时备份管理机

至少要备份这些:

  • /root/kafka-ca
  • /root/admin.properties
  • /etc/kafka/ssl

打包命令:

mkdir -p /root/kafka-backup
tar -czf /root/kafka-backup/kafka-admin-backup-$(date +%F).tar.gz \
  /root/kafka-ca \
  /root/admin.properties \
  /etc/kafka/ssl

5. 管理机定期离线备份

特别是:

  • ca-key.pem
  • admin.keystore.p12
  • kafka.truststore.p12

这几样丢了会很麻烦。

二十八、总结

这次 Kafka 正式生产部署,最终采用的是一套比较稳妥的方案:

  • Kafka 4.2.0
  • KRaft 模式
  • 3 Controller + 3 Broker
  • 独立管理机
  • SSL 双向认证
  • ACL 精细化控制

实际落地后证明,这套架构:

  • 结构清晰
  • 易于扩展
  • 安全性更高
  • 更适合后续长期维护

如果你也准备正式上生产,我很建议直接从一开始就:

  • 拆分 Controller 和 Broker
  • 上独立管理机
  • 上 SSL
  • 上 ACL
  • 做好备份
  • 统一命名规范

这样后面会省下非常多的维护成本。

二十九、附:我这次最想提醒自己的三句话

1.KRaft 元数据目录权限一定要先修。

2.Controller 要先起来,Broker 才能稳定注册。

3.业务系统不要偷懒直接用 admin 证书。

© 版权声明
THE END
喜欢就支持一下吧
点赞14 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容