Grab 改进 Kubernetes 集群中的 Kafka 设置,无需人工干预就可轮换 Broker 节点
![](/theme/default/default/images/main/eye-open.png)
我们非常重视原创文章,为尊重知识产权并避免潜在的版权问题,我们在此提供文章的摘要供您初步了解。如果您想要查阅更为详尽的内容,访问作者的公众号页面获取完整文章。
![](/theme/default/default/images/main/icon-jing.png)
Grab在Kubernetes上优化Kafka设置以提高容错性
Grab对其在Kubernetes上运行的Apache Kafka集群做出了重大更新,以增强容错能力,消除Broker意外终止时的人工干预需求。这些改进是对初始设计的缺陷的回应,包括集成AWS节点终止处理程序(NTH),使用负载均衡器控制器进行目标组映射,以及切换到ELB卷以提高存储性能。
原始设置和面临的挑战
Grab的Coban实时数据平台已经在EKS上通过Strimzi运行Apache Kafka两年。之前的设置在AWS意外终止EKS节点时存在问题,导致客户端遇到错误,Broker没有优雅降级,且不能在新节点上重新启动。这需要工程师手动干预以保持Kafka集群运行。
解决方案
为了最小化Kafka客户端的中断,Grab团队引入了AWS节点终止处理程序(NTH),采用队列处理器模式,以便更广泛地捕获事件,并通过SIGTERM信号实现Kafka进程的优雅关闭。同时,通过AWS负载均衡器控制器(LBC)动态映射NLB目标组,提高了网络连接的稳定性,并通过调整健康检查频率及Pod就绪门控制器,加快了NLB目标组健康状态的标记速度。
为了确保新配置的Kafka工作节点能够正确启动并访问数据存储卷,团队选择使用弹性块存储(EBS)卷。这带来了多项好处,包括降低成本、解耦卷大小与实例规格、加快同步速度、支持快照备份以及在不停机的情况下增加容量。他们还从存储优化型EC2实例切换到通用型或内存优化型实例。
未来计划
这些改进使得EC2实例的退役和工作节点的轮换可以在无需人工干预的情况下进行,提高了效率并减少了出错的可能性。未来,Grab计划进一步改进,包括使用NTH Webhook主动启动新实例,并通过Slack通知NTH发起的操作,以及推出Karpenter以取代Kubernetes Cluster Autoscaler。
想要了解更多内容?
![](/theme/default/default/images/main/icon-jing.png)
![](https://cdn.easycorp.cn/rongpm/upload/202312/f_39217d624bb2b42ce8f6322ebd7e573a.png)
![](https://cdn.easycorp.cn/rongpm/upload/202312/f_39217d624bb2b42ce8f6322ebd7e573a.png)