Apache Beam 测试基础设施实战:用 Terraform 与 Bitnami Kafka Helm Chart 在 Kubernetes 上部署 Kafka 集群

发布时间:2026/10/9 1:16:55
Apache Beam 测试基础设施实战:用 Terraform 与 Bitnami Kafka Helm Chart 在 Kubernetes 上部署 Kafka 集群 批处理流处理大数据【免费下载链接】beamApache Beam is a unified programming model for Batch and Streaming data processing.项目地址https://gitcode.com/gh_mirrors/beam15/beam点击查看免费下载本篇指南聚焦 Apache Beam 仓库.test-infra/kafka/bitnami模块它如何借助 Bitnami Kafka Helm Chart 与 Terraform Helm Provider在不安装 helm 客户端的前提下将一套多 Broker Kafka 集群一键部署到GoogleKubernetes 集群并同时拉起一个专用的kafka-client调试容器。读完本文你将掌握该模块的完整架构、部署流程、GKE Autopilot 下的注意事项以及通过 kubectl 进入客户端容器执行kafka-cluster.sh、kafka-topics.sh等命令进行连通性验证与 Topic 管理的完整排障方法。模块定位Beam 测试基础设施中的 Kafka 供应方案Apache Beam 的持续集成与测试体系需要在真实环境下验证各类 IO 连接器Kafka 就是其中之一——it/kafka下的集成测试例如 KafkaIOLT.java、KafkaIOST.java依赖可用的 Broker 端点KafkaResourceManager.java 甚至直接以PLAINTEXT://host:port形式拼装 bootstrap 连接串见其KAFKA_BROKER_PORT相关逻辑。仓库的 .test-infra/kafka/README.md 说明该目录集中存放用于供应 Kafka 集群的 Kubernetes/Terraform 清单并按实现方式划分为多个子模块bitnami基于 Bitnami 官方 Helm Chart 部署本文主角strimzi基于 Strimzi Kafka Operator 部署01-strimzi-operator部署 Operator02-kafka-persistent提供持久化 Kafka 集群清单proxy在 GCP 上供应一台私有 IP 堡垒机作为私有 Kafka 实例的代理入口。.test-infra/kafka/bitnami是其中最开箱即用的一种它直接消费 Bitnami 维护的 kafka Helm Chart把集群的编排细节全部交给 Chart模块本身只负责通过 Terraform 声明所需的自定义配置。工作原理为什么不需要安装 helm该模块的独特之处在于它使用的是 Terraform Helm Provider官方文档见 registry.terraform.io/providers/hashicorp/helm因此你无需在本地或 CI 环境中安装 helm CLI 即可完成 Chart 的渲染与下发。Helm Chart 的解析、模板渲染与 release 管理全部由 Terraform 的 helm provider 在后台完成。这一点可以从 provider.tf 得到印证模块同时声明了kubernetes与helm两个 provider且都读取本地的~/.kube/config作为集群连接凭据provider kubernetes { config_path ~/.kube/config } provider helm { kubernetes { config_path ~/.kube/config } }也就是说只要你的kubectl能访问目标集群Terraform 就能直接向该集群部署 Helm Release——这也是整个模块所有部署操作的前置基础。模块清单剖析从 kafka.tf 看集群配置模块的核心配置位于 kafka.tf其中包含两个资源helm_release.kafkaKafka 集群本体和kubernetes_deployment.kafka_client调试客户端。helm_release.kafka集群本体resource helm_release kafka { wait false repository https://charts.bitnami.com/bitnami chart kafka name kafka ... }关键点与取值说明Chart 来源repository https://charts.bitnami.com/bitnami、chart kafka即使用 Bitnami 官方 Chart 仓库中的kafkaChartrelease 名为kafkawait falseTerraform 在 release 创建后不等待所有 Pod 就绪避免因节点扩容等异步过程阻塞 apply这一点与后文 GKE Autopilot 的Unschedulable现象直接相关监听协议统一为 PLAINTEXT通过set将listeners.client.protocol、listeners.interbroker.protocol、listeners.external.protocol全部设为PLAINTEXT。测试环境不启用 TLS/SASL简化了客户端连接KafkaResourceManager.java 中拼接的PLAINTEXT://连接串与此一致外部访问externalAccess.enabled true、externalAccess.autoDiscovery.enabled true由 Chart 自动为每个 Broker/Controller 创建独立的 LoadBalancer Service外部端口固定为9094externalAccess.service.broker.ports.external与externalAccess.service.controller.containerPorts.external均为9094RBACrbac.create true让 Chart 自建所需的 ServiceAccount 与权限GKE 内部负载均衡模块通过service.annotations与externalAccess.*.service.loadBalancerAnnotations设置networking.gke.io/load-balancer-type: Internal注解set_list中为 3 个副本各配置一条确保对外暴露的负载均衡器全部为 GKE 内部 LB不向公网开放客户端监听端口Chart 默认创建的kafkaService 在集群内暴露9092供 Pod 间与调试容器使用见下文。kubernetes_deployment.kafka_client内置调试客户端resource kubernetes_deployment kafka_client { wait_for_rollout false metadata { name kafka-client labels { app kafka-client } } ... spec { container { name kafka-client image bitnami/kafka:latest image_pull_policy IfNotPresent command [/bin/bash] args [ -c, while true; do sleep 2; done, ] } } }该 Deployment 以bitnami/kafka:latest镜像运行一个常驻bash死循环保活Pod 打上appkafka-client标签。镜像内置了全套kafka-*.sh管理脚本因此它既是部署后的连通性验证工具也是日常调试与故障排查的现场环境。前置条件Requirements在应用本模块前需要准备Terraform CLIterraform.io仓库根 .test-infra/kafka/README.md 要求 v1.2.0 及以上一个可达的 Kubernetes 集群kubectl能正常访问且~/.kube/config已配置好凭据。若使用 GCP可先通过仓库内的 .test-infra/terraform/google-cloud-platform/google-kubernetes-engine 模块供应私有 GKE 集群——该模块要求预先存在 VPC/子网、最小权限的 Service Account 以及用于 Terraform 后端状态的 GCS Bucket具体步骤见其 README.mdkubectl CLI用于后续查看 Pod、进入容器执行 Kafka 命令。使用步骤Usage本模块遵循标准 Terraform 工作流仅需两条命令terraform init terraform applyterraform init会拉取 helm/kubernetes provider 并解析 Chart 依赖terraform apply将执行 kafka.tf 中声明的两个资源。若需要指定集群变量如使用其他 tfvars可按仓库惯例通过-chdir与-var-file组合例如参照 strimzi 模块 的用法terraform -chdir$DIR apply -var-file$VARS。特别提示GKE Autopilot 下的调度行为如果你的目标集群是GKE Autopilot模式apply 之后你会观察到 Kafka Pod 长时间处于Unschedulable状态。这并非故障Autopilot 集群需要时间自动扩容节点池只有当底层计算资源真正就绪后Kubernetes 才会完成 Kafka 集群的调度与拉起。因此请耐心等待不要误判为部署失败而反复重建资源配合helm_release.kafka的wait false设置整个供应过程是异步、宽松的。调试与故障排查Debugging and Troubleshooting部署完成后模块自带的kafka-client容器就是你的调试工作台。以下操作全部在集群内进行。1. 查询 kafka-client Pod 名称kubectl get po -l appkafka-client输出示例NAME READY STATUS RESTARTS AGE kafka-client-cdc7c8885-nmcjc 1/1 Running 0 4m12skafka-client-cdc7c8885-nmcjc即 Deployment 生成的 Pod名称中的随机后缀由 ReplicaSet 生成。2. 进入容器获取 Shellkubectl exec --stdin --tty kafka-client-cdc7c8885-nmcjc -- /bin/bash此命令打开容器内交互式 bash详见 Kubernetes 官方文档。3. 执行 Kafka 管理命令容器基于最新的bitnami/kafka镜像路径中已预装全部kafka-*.sh管理脚本。由于客户端 Pod 与 Kafka 集群位于同一 Kubernetes 集群所有命令均可直接使用--bootstrap-server kafka:9092这是因为 Bitnami Chart 会创建一个名为kafka的 Kubernetes Service暴露端口9092集群内 Pod 通过 DNS 即可解析到该 Service 背后的 Broker。获取 cluster-id连通性验证kafka-cluster.sh cluster-id --bootstrap-server kafka:9092该命令返回集群 ID同时验证客户端到 Broker 的连通性是否正常——这是排障的第一步任何配置错误都会在此暴露。创建 Topickafka-topics.sh --create --topic some-topic --partitions 3 --replication-factor 3 --bootstrap-server kafka:9092创建一个名为some-topic、3 个分区、副本因子为 3 的 Topic对应 3 副本的典型测试配置若实际 Broker 数不足 3请按需下调--replication-factor。查看 Topic 信息kafka-topics.sh --describe --topic some-topic --bootstrap-server kafka:9092输出该 Topic 的分区分布、Leader、ISR 等元数据用于核对副本是否均匀分配、集群是否健康。延伸从集群内到集群外若 Beam 集成测试运行在集群之外例如本地或 CI需要将 Broker 暴露到外部。本模块已将外部监听端口统一配置为9094且所有 LoadBalancer 均为 GKE 内部 LB。此时可参考同目录下的 proxy 模块它会在 GCP 上创建一台私有 IP 堡垒机作为代理通过bootstrap_endpoint_mapping变量见 variables.tf将kubectl get svc得到的各 LoadBalancer IP如10.1.2.3:9094映射到本地端口apply 成功后会输出形如gcloud compute ssh ... --tunnel-through-iap --ssh-flag-4 -L9094:localhost:9094的隧道命令从而把私有 Kafka 流量安全地转发到开发机。小结.test-infra/kafka/bitnami模块为 Apache Beam 测试体系提供了一条最快捷的 Kafka 供应路径Terraform Helm Provider 免去 helm 客户端依赖Chart 参数化配置PLAINTEXT 协议、9094 外部端口、内部负载均衡与自带的kafka-client调试容器构成了部署即验证的闭环。结合 kafka.tf 的源码阅读与 it/kafka 集成测试中的连接串约定你可以快速复制这套方案为自己的 Beam Kafka 集成测试搭建可复现的 Kafka 环境。赞分享批处理流处理大数据【免费下载链接】beamApache Beam is a unified programming model for Batch and Streaming data processing.项目地址https://gitcode.com/gh_mirrors/beam15/beam点击查看免费下载相关推荐基于 Terraform 与 Bitnami Kafka Helm Chart 在 GKE 上为 Apache Beam 测试基础设施部署 Kafka 集群基于 Terraform 与 Bitnami Kafka Helm Chart 在 GKE 上为 Apache Beam 测试基础设施部署 Kafka 集群 导Apache Beam 测试基础设施指南用 Terraform Helm Provider 部署 Bitnami Kafka 集群Apache Beam 测试基础设施指南用 Terraform Helm Provider 部署 Bitnami Kafka 集群 Apache Beam 仓大数据批处理流处理数据工程Apache Beam 测试基础设施实战用 Terraform 与 Bitnami Helm Chart 在 Kubernetes 中部署 Redis 集群02.redis 模块Apache Beam 测试基础设施实战用 Terraform 与 Bitnami Helm Chart 在 Kubernetes 中部署 Redis 集群上一篇探索 Permission-Manager: 简化权限管理的新星下一篇Perfetto 堆分析排障实战4 类高频静默失败的定位与修复创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

关于本文作者

来自尧图内容编辑团队

尧图内容编辑团队 内容团队

尧图内容编辑团队

本文由尧图网络内容编辑团队执笔。团队由资深项目经理、前端工程师与设计师组成,所有内容均来自亲手交付的真实项目,先讲清问题、再给出可落地的解法。尧图深耕北京网站建设十年,服务过京华建材集团、智造科技等各行业客户,把一线经验沉淀为可复用的行业观察。

  • 十年建站经验,覆盖建材、制造、服务、文创等
  • 项目经理把关选题与事实准确性
  • 工程师与设计师联合撰写专业细节
  • 统一编辑规范,保证文风与排版一致
  • 每月复盘转化数据,迭代选题方向

延伸阅读

相关资讯与近期热门内容

深度阅读推荐

建站决策前值得细读的三篇

网站改版的5个关键决策
2024-08-12

网站改版的5个关键决策

什么时候该改版、改到什么程度、如何避免流量掉光,京华建材集团改版复盘给出答案。

获取专属建站方案

看完文章,把您的行业与预算告诉我们,免费获取一份量身定制的官网建设方案与报价。

立即免费咨询