首页/新闻资讯/正文详情

OpenReplay 自托管 Kafka Helm Chart 部署实战:KRaft 模式、TLS 加密与生产化配置全指南

发布时间:2026/9/23 5:25:21 来源:云帆数科 栏目:资讯中心
OpenReplay 自托管 Kafka Helm Chart 部署实战:KRaft 模式、TLS 加密与生产化配置全指南
OpenReplay 自托管 Kafka Helm Chart 部署实战KRaft 模式、TLS 加密与生产化配置全指南【免费下载链接】openreplaySession replay, cobrowsing and product analytics you can self-host. Best for reproducing issues and iterating on your product.项目地址: https://gitcode.com/gh_mirrors/op/openreplay本文以 OpenReplay 仓库中的 Kafka Helm Chart 快速入门文档 为骨架结合 values.yaml、StatefulSet 模板 与 证书生成脚本 等仓库源码系统讲解如何在自托管 OpenReplay 环境中用 Helm 部署一个无 ZooKeeper 依赖KRaft 模式的 Kafka 集群。读完本文你将掌握无 TLS 基础部署、集群内访问验证、TLS 证书生成与加密部署、常用参数定制、扩缩容、监控排障及生产上线检查清单的完整实操能力。一、Chart 概览与前置条件该 Chart 位于仓库 scripts/helmcharts/databases/charts/kafka从 Chart.yaml 可以看到其核心定位Chart 版本11.8.6application 类型应用版本appVersion3描述支持 KRaft 模式的 Apache Kafka StatefulSet 部署核心特性来自 README.mdKRaft 模式无需 ZooKeeper由 Kafka 自身 Raft 协议管理元数据StatefulSet 部署为每个 broker 提供稳定的网络标识与持久化存储可选 TLS/SSL 加密通过 init container 分发证书支持客户端认证可配置持久化默认 100Gi PVCPod 反亲和提升高可用性尽量将 broker 分散到不同节点多监听器支持同时支持 PLAINTEXT9092/9093与 SSL9094。前置条件Kubernetes 1.19Helm 3.0若启用持久化底层基础设施需支持 PVPersistentVolume供给。默认镜像为ghcr.io/openreplay/kafka:3见 values.yaml。在 OpenReplay 的父级数据库 Chart 中Kafka 默认处于关闭状态kafka.enabled: false见 databases/values.yaml需要时通过enabled: true或独立安装本 Chart 启用。二、基础部署无 TLS2.1 安装 Chart在 Chart 目录scripts/helmcharts/databases/charts/kafka下执行# 以 2 副本部署 Kafka helm install kafka . --namespace db --create-namespace # 查看 StatefulSet 状态 kubectl get statefulset -n db # 查看 Pod 状态按 Chart 标签过滤 kubectl get pods -n db -l app.kubernetes.io/namekafka # 查看 Service kubectl get svc -n db -l app.kubernetes.io/namekafka若从仓库根目录执行可先cd scripts/helmcharts/databases/charts/kafka再运行上述命令。2.2 部署背后的架构原理安装后集群会生成三类 Kubernetes 资源对应 templates 目录StatefulSetstatefulset.yaml默认 2 副本replicaCount: 2podManagementPolicy: Parallel并行启动更新策略为RollingUpdateHeadless Serviceservice-headless.yamlclusterIP: None且开启publishNotReadyAddresses: true用于 broker 间引导发现暴露 9092/9093/9094 三个端口ClusterIP Serviceservice.yaml名为kafka对外提供 9092 客户端入口启用 TLS 后还会生成kafka-ssl服务service-ssl.yaml端口 9094。KRaft 模式的元数据管理由 _helpers.tpl 中的模板函数动态生成kafka.controllerQuorumVotersL74-L83按副本数生成1kafka-0.kafka-headless.db.svc.cluster.local:9093,2kafka-1...形式的 quorum 投票者列表kafka.listeners/kafka.advertisedListeners/kafka.listenerSecurityProtocolMap根据values中的监听器开关动态拼接 Kafka 监听器配置。每个 broker 以broker,controller组合角色运行kraft.processRoles: broker,controller控制器监听器为INTERNAL9093集群 ID 默认Sjg_Rr1iQbO9xpahgDbYpQ。三、访问 Kafka3.1 获取服务端点# 获取服务端点 export KAFKA_BOOTSTRAP$(kubectl get svc kafka -n db -o jsonpath{.metadata.name}.{.metadata.namespace}.svc.cluster.local:9092) echo $KAFKA_BOOTSTRAP3.2 创建临时客户端验证# 创建测试 Pod kubectl run kafka-client --rm -it --imageconfluentinc/cp-kafka:latest --namespace db -- bash # 在 Pod 内测试 Kafka kafka-topics --bootstrap-server kafka.db.svc.cluster.local:9092 --list kafka-topics --bootstrap-server kafka.db.svc.cluster.local:9092 --create --topic test --partitions 1 --replication-factor 1 kafka-console-producer --bootstrap-server kafka.db.svc.cluster.local:9092 --topic test # Type some messages and press CtrlC kafka-console-consumer --bootstrap-server kafka.db.svc.cluster.local:9092 --topic test --from-beginning3.3 三种集群内端点端点用途kafka.db.svc.cluster.local:9092ClusterIP 客户端入口PLAINTEXTkafka-headless.db.svc.cluster.local:9092Headless 服务可直达任意 brokerkafka-ssl.db.svc.cluster.local:9094TLS 加密端点启用listeners.ssl后可用这些端点由 NOTES.txt 在安装成功后自动打印同时也写入 README 的 Accessing Kafka 一节。四、TLS 加密部署4.1 生成证书Chart 依赖scripts/dockerfiles/kafka下的证书生成脚本# 使用 dockerfiles/kafka 中的脚本 cd ../../../../../dockerfiles/kafka ./generate-certs.sh路径提示从scripts/helmcharts/databases/charts/kafka目录实际向上 4 级才是scripts/因此正确写法应为cd ../../../../dockerfiles/kafka或直接定位到仓库根下的 scripts/dockerfiles/kafka/generate-certs.sh。也可以手动生成示例openssl req -new -x509 -keyout ca-key.pem -out ca-cert.pem -days 365 -nodes -subj /CNkafka-ca阅读 generate-certs.sh 源码可以看到完整流程生成有效期 365 天的 CA 证书然后为 broker 生成带 SANDNS:kafka-$i, DNS:localhost, IP:127.0.0.1的 2048 位私钥与 CSR并用 CA 签名。最终产物存放在./certs/目录ca-cert.pem、kafka-1-cert.pem、kafka-1-key.pem、kafka-2-cert.pem、kafka-2-key.pem。注意脚本默认循环生成kafka-1、kafka-2的证书而默认 2 副本的 StatefulSet Pod 名为kafka-0、kafka-1见 statefulset.yaml 中 init container 从 Pod 名提取POD_ID的逻辑。按仓库默认replicaCount2部署时需保证 Secret 中存在kafka-0-*与kafka-1-*两组证书请根据实际副本数调整脚本循环范围或补充对应 Pod 序号的证书。4.2 创建 TLS Secretkubectl create secret generic kafka-tls-certs \ --from-fileca-cert.pem./certs/ca-cert.pem \ --from-filekafka-0-cert.pem./certs/kafka-0-cert.pem \ --from-filekafka-0-key.pem./certs/kafka-0-key.pem \ --from-filekafka-1-cert.pem./certs/kafka-1-cert.pem \ --from-filekafka-1-key.pem./certs/kafka-1-key.pem \ --namespace dbSecret 中要求的键名格式为ca-cert.pem、kafka-{0,1,2,...}-cert.pem、kafka-{0,1,2,...}-key.pem见 values.yaml 的注释说明。4.3 使用 TLS 配置部署Chart 内置了开箱即用的 values-tls.yamlhelm install kafka . \ --namespace db \ --create-namespace \ -f values-tls.yaml该文件相比默认 values 的关键差异listeners: ssl: enabled: true port: 9094 protocol: SSL tls: enabled: true secretName: kafka-tls-certs clientAuth: required endpointIdentificationAlgorithm: 4.4 测试 TLS 连接# 将 CA 证书导出到本地 kubectl get secret kafka-tls-certs -n db -o jsonpath{.data.ca-cert\.pem} | base64 -d ca-cert.pem # 创建客户端属性文件 cat client.properties EOL security.protocolSSL ssl.truststore.locationca-cert.pem ssl.truststore.typePEM EOL # 用 kafka-console-consumer 验证 kubectl run kafka-client --rm -it --imageconfluentinc/cp-kafka:latest --namespace db -- bash # 在 Pod 内 kafka-topics --bootstrap-server kafka-ssl.db.svc.cluster.local:9094 --command-config client.properties --list4.5 TLS 底层实现从 statefulset.yaml 可以看到启用 TLS 后会注入一个setup-certsinit container镜像busybox:latest从 Pod 名提取序号kafka-0→0将 Secret 中的ca-cert.pem、kafka-${POD_ID}-cert.pem、kafka-${POD_ID}-key.pem拷贝到/tls/空目录设置文件权限公钥证书 644私钥 600。随后主容器通过环境变量引用证书路径L143-L154环境变量取值说明KAFKA_SSL_CERT_FILE/tls/server-cert.pem服务端证书KAFKA_SSL_KEY_FILE/tls/server-key.pem服务端私钥KAFKA_SSL_CA_FILE/tls/ca-cert.pemCA 证书KAFKA_SSL_CLIENT_AUTHrequired默认强制客户端认证双向 TLSKAFKA_SSL_ENDPOINT_IDENTIFICATION_ALGORITHM默认空字符串表示禁用主机名校验该实现与 IMPLEMENTATION_SUMMARY.md 中描述的基于dockerfiles/kafka/kube/k8s-kafka-kraft-tls.yaml的 TLS 参考实现一致。五、自定义配置5.1 常用--set覆盖# 修改副本数 helm install kafka . --namespace db --set replicaCount3 # 调整资源配额 helm install kafka . --namespace db \ --set resources.requests.memory2Gi \ --set resources.limits.memory4Gi # 修改存储大小 helm install kafka . --namespace db \ --set persistence.size200Gi # 关闭持久化生产环境不建议 helm install kafka . --namespace db --set persistence.enabledfalse5.2 核心参数速查表以下参数来自 values.yaml与 README.md 的参数表一致参数说明默认值replicaCountKafka broker 副本数2image.repository镜像仓库ghcr.io/openreplay/kafkaimage.tag镜像标签3kraft.enabled启用 KRaft 模式truekraft.clusterIdKRaft 集群 ID可用kafka-storage.sh random-uuid生成Sjg_Rr1iQbO9xpahgDbYpQtls.enabled启用 TLS/SSLfalsetls.secretName存放证书的 Secret 名称kafka-tls-certspersistence.enabled启用持久化truepersistence.sizePVC 大小100Giresources.requests.cpuCPU 请求500mresources.requests.memory内存请求1Giresources.limits.cpuCPU 上限2000mresources.limits.memory内存上限2Gi5.3 深度定制Kafka 运行参数在 values.yaml 的kafka:段可以精细调整 broker 行为这些值最终以KAFKA_*/KAFKA_CFG_*环境变量注入容器见 statefulset.yaml配置项默认值含义kafka.messageMaxBytes31457283MB单条消息最大字节数kafka.replicaFetchMaxBytes3145728副本拉取最大字节数kafka.logRetentionHours1687 天日志保留时间kafka.logRetentionBytes10737418241GB日志保留大小上限kafka.logSegmentBytes1073741824日志段文件大小kafka.logFlushIntervalMessages10000刷盘消息数阈值kafka.logFlushIntervalMs1000刷盘时间阈值毫秒kafka.defaultReplicationFactor1默认副本因子kafka.offsetsTopicReplicationFactor1offsets topic 副本因子kafka.transactionStateLogReplicationFactor1事务日志副本因子kafka.numIoThreads/kafka.numNetworkThreads8/3IO 与网络线程数kafka.numPartitions1默认分区数kafka.autoCreateTopicsEnabletrue自动创建 topickafka.deleteTopicEnablefalse是否允许删除 topickafka.allowEveryoneIfNoAclFoundtrue无 ACL 时是否放行所有人kafka.superUsersUser:admin超级用户列表生产环境若配置 3 副本请同步把defaultReplicationFactor、offsetsTopicReplicationFactor等调整为与副本数匹配避免副本因子大于 broker 数导致创建失败。5.4 健康探针与调度策略探针liveness 与 readiness 均使用 TCP 探测 9092 端口initialDelaySeconds分别为 30/20见 values.yaml反亲和preferredDuringSchedulingIgnoredDuringExecution按kubernetes.io/hostname分散 brokervalues.yaml安全上下文容器以非 rootrunAsUser: 1001运行禁止提权allowPrivilegeEscalation: false扩展机制支持extraEnvVars、extraVolumes、extraVolumeMounts注入自定义环境变量与卷。六、扩缩容# 扩容 helm upgrade kafka . --namespace db --set replicaCount3 # 缩容注意数据安全谨慎操作 helm upgrade kafka . --namespace db --set replicaCount2扩容时请确保TLS 场景下 Secret 中已包含新 Pod 序号如kafka-2-*的证书KRaft quorum 投票者列表由 controllerQuorumVoters 模板按replicaCount自动重算升级后无需手工修改缩容前确认目标分区/副本因子不依赖被移除的 broker避免数据丢失。七、监控与排障7.1 日常监控# 持续观察 Pod 状态 kubectl get pods -n db -w -l app.kubernetes.io/namekafka # 跟踪 broker 日志 kubectl logs -n db kafka-0 -f # 查看 Pod 详情与事件 kubectl describe pod kafka-0 -n db # 检查 PVC 绑定情况 kubectl get pvc -n db -l app.kubernetes.io/namekafka7.2 常见问题排查Pod 无法启动# 查看事件 kubectl describe pod kafka-0 -n db # 查看日志 kubectl logs kafka-0 -n db常见原因与对策资源不足——调大resources.requests/limitsPVC 无法绑定——检查 StorageClass 与底层存储供给证书问题——核对 Secret 内容与 Pod 序号是否匹配TLS 场景。连接问题# 测试集群内连通性 kubectl run test-pod --rm -it --imagebusybox --namespace db -- sh # 在 Pod 内 nc -zv kafka.db.svc.cluster.local 9092 nc -zv kafka-0.kafka-headless.db.svc.cluster.local 9092若直接访问 Pod 域名成功而访问 Service 失败优先检查 Service selector 标签app.kubernetes.io/namekafkaapp.kubernetes.io/componentkafka。TLS 证书问题# 检查 Secret 内容与键名 kubectl get secret kafka-tls-certs -n db -o yaml # 查看 CA 证书有效期 kubectl get secret kafka-tls-certs -n db -o jsonpath{.data.ca-cert\.pem} | base64 -d | openssl x509 -noout -dates常见于Secret 键名与kafka-{序号}-cert.pem格式不符、证书过期、客户端未信任该 CA。八、清理资源# 卸载 Kafka保留 PVC helm uninstall kafka --namespace db # 删除 PVC注意会删除全部数据 kubectl delete pvc -n db -l app.kubernetes.io/namekafka # 删除命名空间连带清理其下全部资源 kubectl delete namespace dbhelm uninstall默认不会删除 PVC如需彻底清理必须显式执行第二步与 README.md 的说明一致。九、生产环境上线检查清单结合 QUICKSTART.md 的收尾清单上线前请逐项确认启用持久化persistence.enabled: true并根据数据量设置合理的persistence.size设置合理的资源限额resources.limits避免 broker 被 OOM Kill配置 3 副本以保障高可用并同步副本因子配置启用 TLS 加密通信至少集群外流量并做好证书轮换计划配置合适的 StorageClass关注 IOPS 与延迟指标建立监控体系JMX、Prometheus 指标采集制定备份策略数据备份 配置备份演练灾难恢复流程制定并记录消息保留策略logRetentionHours/logRetentionBytes配置告警Pod 重启、磁盘水位、副本离线等十、进一步阅读想深入理解本 Chart 的实现细节与 OpenReplay 中的使用方式可以继续阅读仓库内以下文件Kafka Chart 完整参数参考TLS 部署示例配置Chart 实现总结StatefulSet 模板init container、环境变量注入模板辅助函数监听器与 quorum voters 动态生成证书生成脚本KRaft 参考 YAML无 TLS 与 KRaft 参考 YAMLTLS父级数据库 Chart 的 Kafka 集成配置通过helm template test-kafka . -f values-tls.yaml可以随时本地渲染模板验证配置变更后再实际部署。【免费下载链接】openreplaySession replay, cobrowsing and product analytics you can self-host. Best for reproducing issues and iterating on your product.项目地址: https://gitcode.com/gh_mirrors/op/openreplay创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关推荐

12个月AI开发者成长路线:从基础到实战
12个月AI开发者成长路线:从基础到实战

1. 项目概述作为一名在AI领域摸爬滚打多年的从业者,我经常被问到"如何系统性地学习AI开发"。市面上虽然有不少学习资料,但大多零散不成体系。今天我就来分享一个经过实战检验的12个月AI开发者成长路线图,这是我带过数十名新人后总结… · 2026/9/23 5:25:15

职臣Ai问卷设计:新手把研究问题变成数据
职臣Ai问卷设计:新手把研究问题变成数据

https://www.zhichenai.com很多新手做论文时,真正卡住的并不是“不会发问卷”,而是不知道该问什么、问多少、怎样问,才能让收集到的数据服务于研究问题。职臣Ai的问卷设计功能,适合用来完成问卷构思与结构规划,帮助初学… · 2026/9/23 5:25:15

衣服专卖店库存同步崩了?3个面试必问的API变更坑,资深架构师揭秘
衣服专卖店库存同步崩了?3个面试必问的API变更坑,资深架构师揭秘

衣服专卖店库存同步崩了?3个面试必问的API变更坑,资深架构师揭秘 版本升级后 API 全变了,代码跑起来直接报 404,这是很多后端开发最崩溃的瞬间。… · 2026/9/23 5:25:09

颜真卿:书法革新与忠义精神的盛唐典范
颜真卿:书法革新与忠义精神的盛唐典范

1. 颜真卿生平与历史定位颜真卿(709-785)作为唐代书法艺术的集大成者,其人生轨迹与盛唐转衰的历史进程紧密交织。不同于普通艺术家的传记,颜真卿的人生呈现出"三位一体"的独特面貌:首先是以《祭侄文稿》为代… · 2026/9/23 6:02:12

科技成果转化:模式创新与生态构建实践
科技成果转化:模式创新与生态构建实践

1. 科技成果转化现状与挑战科技成果转化一直是科技创新链条中最关键的"最后一公里"。我在参与多个区域创新项目时发现,高校和科研院所的专利数量虽然每年都在增长,但真正实现产业化的比例却长期徘徊在10%以下。这个现象背后反映的是科技成果与… · 2026/9/23 6:02:12

大闹天宫下载手写实现解析面试必问核心逻辑
大闹天宫下载手写实现解析面试必问核心逻辑

大闹天宫下载手写实现解析面试必问核心逻辑 面试现场,考官抛出“讲讲下载模块原理”,你愣在原地答不上来?别慌。很多候选人卡在 手写实现… · 2026/9/23 6:02:06

小鼠Orexin B多肽的结构特性与生理功能解析
小鼠Orexin B多肽的结构特性与生理功能解析

1. Orexin B (mouse) 多肽结构与特性解析Orexin B是一种由28个氨基酸组成的神经多肽,在小鼠体内发挥着关键的生理调控作用。这个C端酰胺化的线性多肽具有独特的序列特征:RPGPPGLQGRLQRLLQANGNHAAGILTM-NH₂。从结构上看,它富含脯氨酸(Pro)和甘… · 2026/9/23 6:02:06

功能测试在软件开发周期中的真实作用:从需求到上线的全程质量保障
功能测试在软件开发周期中的真实作用:从需求到上线的全程质量保障

干测试这行久了,最常被问到的一个问题就是:“功能测试在软件开发周期里到底起什么作用?”问的人从刚转行的新人到带项目的技术负责人都有。有人觉得功能测试就是拿需求文档点点页面,发现bug提给开发就完事;也有人觉得功… · 2026/9/23 6:01:53

AI编程工具选型指南:代码补全、对话工程与工作流集成
AI编程工具选型指南:代码补全、对话工程与工作流集成

1. 这不是“选工具”,而是重构你的编码工作流最近三个月,我几乎把市面上所有能装进编辑器的AI编程工具都跑了一遍——不是简单点开试用,而是真拿它们去重构一个中等复杂度的电商后台服务(Node.js TypeScript PostgreSQL&#xf… · 2026/9/23 6:01:47

3招搞定手机怎么下载微信面试难题实战项目解析
3招搞定手机怎么下载微信面试难题实战项目解析

3招搞定手机怎么下载微信面试难题实战项目解析 面试被问“手机怎么下载微信”背后的原理,90%的人答不上来。别笑,这看似弱智的问题,实则是考察你对移动应用分发机制、安全校验及网络协议理解的试金石。我带过不少校招新人,他们背了八股文,却连一个A… · 2026/9/23 0:00:03

你有新短消息请注意查收:3个新手避坑指南搞定消息系统选型
你有新短消息请注意查收:3个新手避坑指南搞定消息系统选型

你有新短消息请注意查收:3个新手避坑指南搞定消息系统选型 面试被问“高并发下如何保证消息不丢失”,你张口就是“用Redis”,结果面试官追问“如果Redis宕机了怎么办”,你瞬间卡壳。这种场景太常见了,很多新手在背八股文时,只记住了技术名词… · 2026/9/23 0:00:29

Win7无线热点配置工具源码解析:解决API失效的3个实战技巧
Win7无线热点配置工具源码解析:解决API失效的3个实战技巧

Win7无线热点配置工具源码解析:解决API失效的3个实战技巧 Win7无线热点配置工具在Win10/11上跑不动?不是你的问题,是版本升级后 API 全变了。很多老项目里的 netsh wlan… · 2026/9/23 0:00:36

了解更多?预约专属演示

我们的顾问将为您一对一讲解产品与方案

企业微信二维码