Strimzi KRaft模式部署指南:无ZooKeeper的Kafka集群如何配置?
2026/9/17 12:50:26 网站建设 项目流程

Strimzi KRaft模式部署指南:无ZooKeeper的Kafka集群如何配置?

【免费下载链接】strimzi-kafka-operatorApache Kafka® running on Kubernetes项目地址: https://gitcode.com/GitHub_Trending/st/strimzi-kafka-operator

Strimzi 是运行在 Kubernetes 上的 Apache Kafka® 发行版,通过 Cluster Operator 自动化管理 Kafka 集群的创建、升级与扩缩容。从 Kafka 4.0 开始,KRaft 模式(Kafka Raft 元数据)彻底取代了 ZooKeeper 依赖,Strimzi 也随之移除对 ZooKeeper 集群的支持——如今部署无 ZooKeeper 的 Kafka 集群,只需两个自定义资源:KafkaKafkaNodePool。本文将带你用最少的配置完成 Strimzi KRaft 模式部署,并讲清每种节点角色的取舍。

一、为什么选择 KRaft 模式部署 Kafka

传统 Kafka 依赖一个独立的 ZooKeeper 集群来存储元数据和协调集群状态,这意味着多维护一套有状态组件。KRaft 模式把元数据管理直接内置到 Kafka 中:

  • 更少组件:无需部署和运维 ZooKeeper,降低操作与安全风险
  • 更高效率:元数据以__cluster_metadata单分区日志形式存储,通过 Raft 共识协议复制
  • 更强扩展性:Broker 与控制平面解耦,架构更简洁

需要注意的是:Kafka 4.0 仅以 KRaft 模式运行,因此使用 Strimzi 0.46+ 部署新集群时,KRaft 不是"可选项"而是唯一路径。旧版 ZooKeeper 集群需要先迁移再升级(参考 con-migrate-kraft-pre-0.39.adoc)。

二、核心概念:两个资源搞定整个集群

在 KRaft 模式下,Strimzi 用两个自定义资源描述集群:

资源职责关键属性
Kafka集群级配置versionmetadataVersionlistenersconfig
KafkaNodePool节点池(一组同角色节点)rolesreplicasstorage

节点池通过.spec.roles声明节点扮演的角色,这正是 KRaft 的精髓:

  • Controller:控制平面,管理集群元数据与状态
  • Broker:数据平面,负责消息的读写与存储
  • Dual-role(双角色):一个节点同时承担两者,适合开发测试

KafkaNodePool中未指定的配置会继承自Kafka资源,因此"集群统一配置 + 节点池差异化配置"的组合非常灵活。官方对节点池的详细设计说明见 con-kafka-concepts-node-pools.adoc。

三、三种部署模式,按需选择

Strimzi 在 examples/kafka/ 目录下提供了现成的 KRaft 部署示例,覆盖典型场景:

3.1 开发测试:双角色节点(推荐起步)

示例文件:kafka-with-dual-role-nodes.yaml

3 个节点同时担任 Controller 和 Broker,一个节点池搞定一切,配置最简单:

kind: KafkaNodePool spec: replicas: 3 roles: - controller - broker

3.2 生产环境:Controller 与 Broker 分离

示例文件:kafka-persistent.yaml

生产环境推荐专用 3 个 Controller 节点 + 独立的 Broker 节点池:Controller 不受消息流量干扰,Broker 池可独立扩缩容,故障域更清晰。

3.3 单机体验:一个节点全都要

示例文件:kafka-single-node.yaml

适合本地学习 KRaft 架构,将副本因子调为 1 即可运行。

四、快速部署步骤(5 分钟跑起来)

1️⃣安装 Cluster Operator:应用 install/cluster-operator/ 下的清单文件(CRD、RBAC、ConfigMap 与 Deployment 已齐备)。

2️⃣获取示例文件(如需克隆仓库):

git clone https://gitcode.com/GitHub_Trending/st/strimzi-kafka-operator

3️⃣应用 KRaft 集群(以双角色节点为例):

kubectl apply -f examples/kafka/kafka-with-dual-role-nodes.yaml

4️⃣检查部署状态

kubectl get pods

当输出中my-cluster-pool-a-0/1/2STATUS显示Running时,集群就绪。节点 ID 从 0 开始跨所有节点池连续分配,扩容/缩容规则详见 proc-deploy-kafka-cluster-kraft.adoc。

五、必须了解的关键配置

  • metadataVersion:KRaft 元数据版本必须与version中的 Kafka 版本兼容,两者都在Kafka资源中声明(示例中使用4.3.1+4.3-IV0)。
  • 副本因子:生产环境建议显式设置default.replication.factor: 3min.insync.replicas: 2。⚠️ 若删除min.insync.replicas,Cluster Operator 会强制回退为 1,降低持久性。
  • kraftMetadata:JBOD 多卷存储时,可用该属性指定元数据日志存放的磁盘卷,说明见 con-config-storage-kraft-metadata.adoc。
  • 静态仲裁限制:当前 Strimzi 使用静态 Controller 仲裁,不支持动态增删/扩缩 Controller 节点池,改造角色前请阅读 assembly-kraft-mode.adoc 中的限制章节。

六、安全与生产建议

  • 启用 TLS:官方示例均配置了plain(9092) 与tls(9093) 双监听器,生产环境客户端应走 TLS 端口
  • 命名空间隔离:同一命名空间内不要部署多个 Kafka 集群,避免命名冲突
  • 资源配额:为节点池设置resources的 requests/limits,避免资源争抢
  • Entity Operator:保留entityOperator配置,自动获得 Topic 与 User 管理能力

七、继续深入:文档与源码索引

想了解什么去哪里看
Kafka 完整配置属性con-config-kafka-kraft.adoc
节点池配置详解con-config-node-pools.adoc
节点角色变更(拆池/合池)con-config-node-pool-roles.adoc
集群 API 模型源码api/src/main/java/io/strimzi/api/kafka/model/kafka/
Cluster Operator 核心代码cluster-operator/src/main/java/
更多部署示例examples/kafka/ 与 examples/security/

总结

Strimzi 让"无 ZooKeeper 的 Kafka"变得极其简单:一份Kafka资源定集群,一个或多个KafkaNodePool定角色,kubectl apply之后即可得到完整运行的 KRaft 模式集群。开发用双角色节点起步,生产用 Controller/Broker 分离架构——掌握这两套模式,你已经完成了 KRaft 集群部署的核心功。🚀

【免费下载链接】strimzi-kafka-operatorApache Kafka® running on Kubernetes项目地址: https://gitcode.com/GitHub_Trending/st/strimzi-kafka-operator

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询