当前位置: 首页 > news >正文

在运行中的 Kafka 集群渐进式启用安全零停机实战手册(KRaft/Broker 通用)

1. 为什么要“分阶段、滚动式”启用安全?

对生产集群“一步到位”切换安全协议,极易造成客户端与 broker 协议不匹配而中断。官方建议采用 incremental bounce(滚动重启)分阶段推进:

  1. 第一轮滚动:在每台 broker 上新增安全端口(例如 SSL 或 SASL_SSL),保留 PLAINTEXT
  2. 客户端切换:将客户端改为使用新开的安全端口与协议(SSL 或 SASL_SSL)。
  3. 第二轮滚动:为 broker–broker(内网复制、控制路径)启用安全协议(例如 security.inter.broker.protocol=SSL)。
  4. 最终滚动关闭 PLAINTEXT 端口,完成加固。

关键点:始终保留一个 PLAINTEXT 端口直到所有客户端、以及 broker–broker 都已经完成迁移与验证,否则会出现连接断裂。

2. 安全方案与端口规划

根据你的目标不同,有两种常见形态:

方案 A:全 SSL 加密(broker–client 与 broker–broker 都使用 SSL)

  • 目标:仅加密,无额外认证(或认证由证书完成)。

  • 监听规划(示例):

    • PLAINTEXT://broker1:9091(迁移期间保留)
    • SSL://broker1:9092(新开)

方案 B:客户端 SASL+SSLbroker–broker 仅 SSL

  • 目标:对外(client–broker)既加密(SSL),又认证(SASL),而 broker–broker 内部仅加密。

  • 监听规划(示例):

    • PLAINTEXT://broker1:9091(迁移期间保留)
    • SSL://broker1:9092(broker–broker)
    • SASL_SSL://broker1:9093(client–broker)

注:SSL/SASL 配置细节见前文 7.3(SSL)与 7.4(SASL)。本文聚焦“运行中切换”的调度与步骤。

3. 滚动重启(incremental bounce)运行手册

通用前置:变更窗口与健康门槛

  • 优雅停止:使用 SIGTERM 停止 broker。
  • ISR 等待:每个节点拉起后,等待分区副本回到 ISR 再处理下一台。
  • 业务窗口:选择低峰期;观察客户端重连成功率、吞吐与延迟。

A. 目标:全 SSL 加密

第 1 轮:为每台 broker 打开 SSL 端口(保留 PLAINTEXT)

server.properties(每台):

listeners=PLAINTEXT://broker1:9091,SSL://broker1:9092
# 证书等 SSL 细节按 7.3 配置

执行:逐台 broker 滚动:SIGTERM → 启动 → 等待 ISR 恢复。

客户端切换为 SSL

客户端(Producer/Consumer)应用配置(示例):

bootstrap.servers=[broker1:9092,...]
security.protocol=SSL
# 其他 SSL 客户端参数同 7.3

推进策略:优先切换非关键业务与批处理客户端,逐步扩大范围,观察错误率。

第 2 轮:启用 broker–broker 使用 SSL

server.properties(每台):

listeners=PLAINTEXT://broker1:9091,SSL://broker1:9092
security.inter.broker.protocol=SSL

执行:逐台滚动,确认控制面与复制链路健康。

最终轮:关闭 PLAINTEXT 端口
listeners=SSL://broker1:9092
security.inter.broker.protocol=SSL

执行:逐台滚动;关闭后验证所有客户端仍可连通。

B. 目标:客户端 SASL+SSL,broker–broker 仅 SSL

第 1 轮:为每台 broker 打开 SSL 与 SASL_SSL 端口(保留 PLAINTEXT)
listeners=PLAINTEXT://broker1:9091,SSL://broker1:9092,SASL_SSL://broker1:9093
# 配置 SSL(7.3)与 SASL(7.4)细节
客户端切换为 SASL+SSL
bootstrap.servers=[broker1:9093,...]
security.protocol=SASL_SSL
# sasl.mechanism=PLAIN / SCRAM / GSSAPI 等
# 其余凭据按 7.4
第 2 轮:启用 broker–broker 使用 SSL(复用 9092)
listeners=PLAINTEXT://broker1:9091,SSL://broker1:9092,SASL_SSL://broker1:9093
security.inter.broker.protocol=SSL
最终轮:关闭 PLAINTEXT 端口
listeners=SSL://broker1:9092,SASL_SSL://broker1:9093
security.inter.broker.protocol=SSL

4. 变更步骤(可直接用作 Runbook)

对每一台 broker(按机架/副本分布顺序)执行:

  1. 预检查

    • 控制器健康、ISR 稳定、请求队列正常;客户端错误率基线已记录。
    • 证书链、SASL 凭据、JAAS 文件、server.properties 已下发并校验。
  2. 变更配置

    • 添加目标 listeners;未到最终轮前保留 PLAINTEXT
    • 仅在对应阶段设置 security.inter.broker.protocol=SSL
  3. 优雅重启

    • kill -TERM <pid> 或 systemd/service 脚本。
    • 拉起后检查:kafka-broker-api-versions.sh、日志无 SSL/SASL 握手错误。
  4. 健康验证

    • 分区副本回 ISR(Controller 日志、/metrics、运维面板)。
    • 业务读写无报错;客户端连接逐步切换、灰度放量。
  5. 推进下一台

    • 周期性观测 3–10 分钟(按负载而定)再继续。

客户端统一切换阶段:与业务团队沟通窗口;优先无状态与幂等写入者;重点关注老旧 SDK。

5. 验证清单:连通性、握手与权限

  • 端口监听:目标端口 LISTENopenssl s_client -connect broker1:9092 -tls1_2 验证证书链。
  • 客户端连接数:新端口建立,旧端口下降(直到最终关闭)。
  • 生产/消费:写入 TPS、消费延迟、重试/超时指标;无 SSLHandshakeExceptionSaslAuthenticationException
  • 集群内部:控制器选举稳定;复制无滞后;inter.broker.listener.name(如使用)与 security.inter.broker.protocol 一致。

6. 常见坑位与规避

  • 过早关闭 PLAINTEXT:客户端尚未全部迁移即关闭 → 瞬时不可用。务必最后一轮才关。
  • 证书主机名不匹配:CN/SAN 与 bootstrap.servers 不符;建议使用 SAN 通配或统一域名。
  • SASL 机制不一致:broker 与客户端 sasl.mechanism/JAAS 配置不一致导致认证失败。
  • 忘记滚动所有节点:导致同一集群存在不同安全形态,引发复制/控制面异常。
  • 缺少 ISR 等待:重启过快,副本未恢复即继续,风险叠加。

7. 回滚策略(必须预置)

  • 配置回退:恢复到上一个成功状态的 listenerssecurity.inter.broker.protocol
  • 端口回开:若已关闭 PLAINTEXT 而出现大量客户端失败,第一时间恢复 PLAINTEXT 并广播客户端迁移回退通知。
  • 逐台回滚:同样采用滚动方式,保证 ISR 与客户端稳定。

8. 参考示例(与官方流程完全对齐)

A. 全 SSL(官方示例复刻)

第 1 轮

listeners=PLAINTEXT://broker1:9091,SSL://broker1:9092

客户端切换

bootstrap.servers=[broker1:9092,...]
security.protocol=SSL

第 2 轮

listeners=PLAINTEXT://broker1:9091,SSL://broker1:9092
security.inter.broker.protocol=SSL

最终轮

listeners=SSL://broker1:9092
security.inter.broker.protocol=SSL

B. SASL+SSL(客户端)+ SSL(内网)

第 1 轮

listeners=PLAINTEXT://broker1:9091,SSL://broker1:9092,SASL_SSL://broker1:9093

客户端切换

bootstrap.servers=[broker1:9093,...]
security.protocol=SASL_SSL
# sasl.mechanism 与凭据按 7.4 配置

第 2 轮

listeners=PLAINTEXT://broker1:9091,SSL://broker1:9092,SASL_SSL://broker1:9093
security.inter.broker.protocol=SSL

最终轮

listeners=SSL://broker1:9092,SASL_SSL://broker1:9093
security.inter.broker.protocol=SSL

9. 总结

在运行中的 Kafka 集群启用安全的关键是:分阶段、可回滚、可观测。通过增量滚动重启,先打开安全端口、再迁移客户端、随后切换内网 broker–broker,最后关闭 PLAINTEXT,即可在不打断业务的前提下完成整体加固。配合证书与 SASL 的正确配置、严格的 ISR 等待与健康校验,整个过程将变得可预测、可控且安全。

http://www.dtcms.com/a/445571.html

相关文章:

  • 网站手机版制作白嫖永久服务器
  • 用一个 Bash CLI 管理多款 AI 开发工具:jt-code-cli 实战与原理解析
  • Linux《线程同步和互斥(下)》
  • 百丽企业数字化转型失败案例分析及其AI智能名片S2B2C商城小程序的适用性探讨
  • 【STM32项目开源】基于STM32的智能宠物防丢监控系统
  • UV紫外相机在工业视觉检测中的应用
  • Redis-UV统计(HyperLogLog)
  • PHP 8.0+ 极限性能优化与系统级编程
  • Deep Learning Optimizer | Adam、AdamW
  • 【linux】linux的扩充指令的学习
  • vim保姆级使用,操作详解,快捷键大全总结
  • jmr119色带贵港seo
  • NLP:迁移学习基础讲解
  • 10.5 数位dp
  • 基于汽车钣金理念的门窗柔性生产系统重构方案
  • 做网站要哪些技术查企业法人信息查询平台
  • Go语言入门(20)-nil
  • Go基础:Go语言ORM框架GORM详解
  • 备案 网站备注网站用的服务器多少钱
  • 《API网关在智能制造产线协同中的定制化实践与可靠性重构》
  • 建设网站的调研报告校园电子商务网站建设规划书实例
  • 书生浦语第六期 L1-G2000
  • AI大事记9:从 AlexNet 到 ChatGPT——深度学习的十年跃迁(上)
  • 删除无限递归文件夹
  • PyCharm 核心快捷键大全 (Windows版)
  • Android15 状态栏适配
  • 云原生微服务:Kubernetes+Istio 魔法学院实战指南
  • 做调研有哪些网站推广普通话手抄报内容大全资料
  • Vue.js 自定义指令
  • Vue中$nextTick的使用