作者|Srini Penchikala
译者|张兰月
Amadeus 公司平台解决方案架构师 Nenad Bogojevic 最近在北美 2017 KubeCon 和 CloudNativeCon 上谈到如何在 Kubernetes 环境中运行和管理 Kafka 集群。
该公司将 Kafka 用于日志和事件收集以及作为流媒体平台。Kafka 集群中的每一个代理 (broker) 都有一个身份,这个身份可以被用来寻找集群中的其他代理。代理同样需要一个数据库来存储分区日志。所以为 Kafka 配置一个持久卷非常重要,否则你便会丢失日志。
Nenad Bogojevic 谈到如何使用 Kubernetes ConfigMap 或 CustomResource 来分配和配置 Kafka 集群,并用它们来描述参数,比如名称、分区数、复制因子和主题 (topic) 属性如保存时间(以毫秒表示)等。它们能够帮助自动化主题的分配或反分配过程。它们同样能够确保开发和运营阶段以及集群重启时的配置一致性。
Bogojevic 还谈到了如何使用 Kubernetes StatefulSet 特性来设置 Kafka 和 ZooKeeper 集群元素。Kubernetes StatefulSet 特性提供了如下能力:
- 稳定的 pod 身份
- 稳定的存储
- 有秩序的启动和关闭
- 滚动更新
他们的解决方案架构包括 Kafka 和 ZooKeeper Statefulset,其中 Statefulset 是作为一个无头服务 (Headless Service) 被运行的。同样,该架构还包括一个发现服务,客户端应用用它来发现集群中的 Kafka 节点。他谈到了节点选择器,它可以被用来在配置较好硬件(如 SSD)的机器上安装实例,以及反关联特性,它可以被用来将实例分布到不同的物理机上。
他们的架构还有一个重要的组件,那就是 Kubernetes 的监控,监控组件可以被用来检测某个服务器是否准备就绪,并可以接受连接。监控是由 JMX 和 Prometheus 这 2 个工具完成的。
Bogojevic 讨论了 Kafka 操作算子,它可以被用来将站点可靠性工程师 (SRE) 和运营团队的领域知识转换成可执行的代码。他们将操作算子用于以下的组件:
- Prometheus
- Redis 集群
- 工作流
- Kafka
使用自动化脚本来创建 Kafka 主题是非常好的实践。信息传送解决方案应该考虑采用“主题即代码”的方法。在操作 Kafka 集群主题时的最佳实践不止这些,还包括:
- 确保主题存在于目标环境中
- 确保主题在不再使用时被删除
- 在不同的环境中采用同样的配置。
- 根据可用的磁盘空间来配置保存时间
- 为客户端配置证书
- 将配置和需求作为代码来交付
在演讲结尾,Bogojevic 谈到了执行 Kafka 升级的一些最佳实践,包括:将协议版本设置为目前的、一次只升级一个 Kafka 代理,然后才将协议版本设置为最新的。关于存储格式的最佳实践是,首先让客户使用最新的版本,然后再将格式版本升级为最新的。
你可以在 CNCF YouTube 频道上找到 Bogojevic 名为“Kafka 操作算子:如何在 Kubernetes 中管理和操作 Kafka 集群”的演讲视频。
查看英文原文:Managing and Operating Kafka Clusters in Kubernetes