Bitnami为Apache Kafka提供的Helm Chart是一款预配置的Kubernetes包管理工具,旨在简化分布式流处理平台Apache Kafka在Kubernetes集群中的部署、配置与全生命周期运维管理,集成了高可用性集群设置、安全认证机制、Prometheus监控指标及自动伸缩策略等核心功能,帮助用户无需手动处理复杂的集群参数配置,即可快速搭建稳定、可扩展且符合生产级标准的Kafka服务,适用于从开发测试到大规模生产环境的各类场景。
收藏数: 5
下载次数: 17479704
类型:
bitnamicharts/kafkaApache Kafka 是一个分布式流处理平台,旨在构建实时数据管道,可作为消息代理或大数据应用的日志聚合解决方案替代品。
Apache Kafka 官方概述
商标说明:本软件列表由 Bitnami 打包。所提及的商标分属各自公司所有,使用此类商标不意味着任何关联或背书。
通过以下命令快速部署:
consolehelm install my-release oci://registry-1.docker.io/bitnamicharts/kafka
提示:该应用也可作为 Kubernetes 应用在 Azure Marketplace 中获取。Kubernetes 应用是在 AKS 上部署 Bitnami 的最简单方式,详见 Azure Marketplace 列表。
如需生产环境使用 Apache Kafka,可尝试 VMware Tanzu Application Catalog(Bitnami 目录的商业版)。
自 2025年8月28日 起,Bitnami 将升级其公共目录,通过新的 Bitnami Secure Images 计划 提供精选的强化安全镜像。主要变更如下:
这些变更旨在通过推广软件供应链完整性最佳实践和最新部署方式,提升所有 Bitnami 用户的安全态势。详见 Bitnami Secure Images 公告。
本 Helm Chart 通过 Helm 包管理器在 Kubernetes 集群上部署 Kafka。
以发布名称 my-release 为例,执行以下命令部署:
consolehelm install my-release oci://REGISTRY_NAME/REPOSITORY_NAME/kafka
注意:需将占位符
REGISTRY_NAME和REPOSITORY_NAME替换为实际的 Helm 仓库地址。例如,Bitnami 官方仓库需使用REGISTRY_NAME=registry-1.docker.io和REPOSITORY_NAME=bitnamicharts。
上述命令将以默认配置在 Kubernetes 集群中部署 Kafka。可通过 参数配置 部分自定义部署选项。
提示:使用
helm list查看所有已部署的 release。
本 Chart 支持自动配置 4 种监听器:
如需复杂配置,可手动设置 listeners、advertisedListeners 和 listenerSecurityProtocolMap 参数。
可针对不同监听器配置认证协议。例如,客户端通信使用 sasl_tls,控制器和 broker 间通信使用 tls。支持的协议及安全特性如下表:
| 协议方法 | 认证方式 | 是否通过 TLS 加密 |
|---|---|---|
| plaintext | 无 | 否 |
| tls | 无 | 是 |
| mtls | 双向认证 | 是 |
| sasl | 通过 SASL 认证 | 否 |
| sasl_tls | 通过 SASL 认证 | 是 |
通过以下参数分别设置客户端、控制器、broker 间通信的认证协议:
listeners.client.protocollisteners.controller.protocollisteners.interbroker.protocol若某监听器启用 SASL 认证,需通过以下参数设置凭据:
sasl.client.users/sasl.client.passwordssasl.interbroker.user/sasl.interbroker.passwordsasl.controller.user/sasl.controller.password需为每个 Kafka 节点创建包含 Java Key Stores(JKS)文件的 Secret:信任库(kafka.truststore.jks)和密钥库(kafka.keystore.jks),部署时通过 tls.existingSecret 参数传入 Secret 名称。
注意:若 JKS 文件受密码保护(推荐),需通过
tls.keystorePassword和tls.truststorePassword提供密码。
示例:为 2 节点 Kafka 集群创建 JKS Secret:
consolekubectl create secret generic kafka-jks-0 --from-file=kafka.truststore.jks=./kafka.truststore.jks --from-file=kafka.keystore.jks=./kafka-0.keystore.jks kubectl create secret generic kafka-jks-1 --from-file=kafka.truststore.jks=./kafka.truststore.jks --from-file=kafka.keystore.jks=./kafka-1.keystore.jks
说明:上述命令需预先准备好 JKS 文件。可使用 此脚本 生成 JKS 文件。
升级时,Chart 会复用之前生成的 Secret 或 sasl.existingSecret 指定的 Secret。如需更新凭证,可:
helm upgrade 并通过 sasl 部分参数传入新凭证helm upgrade 并通过 sasl.existingSecret 指定新 Secret需配置额外的监听器和暴露监听器,并为每个 Kafka Pod 创建独立服务。支持以下三种方式:
选项 A:自动发现随机 Load* IP**(需 initContainer 等待 IP 就绪):
consoleexternalAccess.enabled=true externalAccess.broker.service.type=Load*** externalAccess.controller.service.type=Load*** externalAccess.broker.service.ports.external=9094 externalAccess.controller.service.ports.external=9094 defaultInitContainers.autoDiscovery.enabled=true serviceAccount.create=true broker.automountServiceAccountToken=true controller.automountServiceAccountToken=true rbac.create=true
注意:若集群启用 RBAC,需创建 RBAC 规则。
选项 B:手动指定 Load* IP**:
consoleexternalAccess.enabled=true externalAccess.controller.service.type=Load*** externalAccess.controller.service.containerPorts.external=9094 externalAccess.controller.service.load***IPs[0]='external-ip-1' # 替换为实际 IP externalAccess.broker.service.type=Load*** externalAccess.broker.service.ports.external=9094 externalAccess.broker.service.load***IPs[0]='external-ip-3' # 替换为实际 IP
选项 A:自动发现随机 NodePort:
consoleexternalAccess.enabled=true externalAccess.controller.service.type=NodePort externalAccess.broker.service.type=NodePort defaultInitContainers.autoDiscovery.enabled=true serviceAccount.create=true rbac.create=true
选项 B:手动指定 NodePort:
consoleexternalAccess.enabled=true externalAccess.controller.service.type=NodePort externalAccess.controller.service.nodePorts[0]='node-port-1' # 替换为实际端口
选项 C:手动指定外部 IP:
consoleexternalAccess.enabled=true externalAccess.controller.service.type=NodePort externalAccess.controller.service.externalIPs[0]='172.16.0.20' # 替换为实际 IP
consoleexternalAccess.enabled=true externalAccess.controller.service.type=ClusterIP externalAccess.controller.service.ports.external=9094 externalAccess.controller.service.domain='ingress-ip' # 替换为 Ingress IP externalAccess.broker.service.type=ClusterIP externalAccess.broker.service.ports.external=9094 externalAccess.broker.service.domain='ingress-ip' # 替换为 Ingress IP
可通过 resources 参数设置容器资源请求(requests)和限制(limits)。生产环境建议根据实际需求调整,而非依赖 resourcesPreset 预设(预设可能无法完全适配场景)。详见 Kubernetes 容器资源管理文档。
设置 metrics.jmx.enabled=true 即可集成 Prometheus。此时会在所有 Pod 中部署 jmx_exporter 边车容器,并创建带自动采集注解的 metrics 服务。
需已安装 Prometheus 或 Prometheus Operator。推荐使用 Bitnami Prometheus Helm Chart 快速部署。
设置 metrics.serviceMonitor.enabled=true 可部署 ServiceMonitor 对象,需确保集群已安装 Prometheus Operator CRD。
Bitnami Kafka 镜像将数据存储在容器内 /bitnami/kafka 路径,通过 Persistent Volume Claim(PVC)实现数据持久化,支持 GCE、AWS、minikube 等环境。
默认以非 root 用户运行镜像,需确保持久卷可写。可通过以下方式实现:
volumePermissions.enabled=true,通过 initContainer 调整卷权限。使用 Velero(Kubernetes 备份工具)备份源部署的持久卷,并将其挂载到新部署中。详见 Velero 使用指南。
参数名 global.imageRegistry | 描述 | 默认值 |
|---|---|---|
| 全局 Docker 镜像仓库地址 | 为空则使用官方仓库 | "" |
global.imagePullSecrets | 全局镜像拉取密钥数组 | [] |
注意:完整参数列表超出本文长度限制,详见 GitHub 完整文档。
以下是 bitnamicharts/kafka 相关的常用 Docker 镜像,适用于 不同场景 等不同场景:
您可以使用以下命令拉取该镜像。请将 <标签> 替换为具体的标签版本。如需查看所有可用标签版本,请访问 版本下载页面。





manifest unknown 错误
TLS 证书验证失败
DNS 解析超时
410 错误:版本过低
402 错误:流量耗尽
身份认证失败错误
429 限流错误
凭证保存错误
来自真实用户的反馈,见证轩辕镜像的优质服务