写点什么

Grab 改进 Kubernetes 集群中的 Kafka 设置,无需人工干预就可轮换 Broker 节点

作者:Rafal Gancarz

  • 2024-02-29
    北京
  • 本文字数:1150 字

    阅读完需:约 4 分钟

Grab 改进 Kubernetes 集群中的 Kafka 设置,无需人工干预就可轮换 Broker 节点

Grab 更新了其 Kubernetes 上的 Kafka 设置以提高容错性,并完全避免在 Kafka Broker 意外终止时需要进行人工干预。为解决最初设计的不足,Grab 的团队集成了 AWS 节点终止处理程序(Node Termination Handler,NTH),使用负载均衡器控制器进行目标组映射,并切换到 ELB 卷进行存储。


作为其 Coban 实时数据平台的一部分,Grab 已经在 Kubernetes (EKS) 上使用 Strimzi 在生产环境中运行 Apache Kafka 两年了。团队之前使用了 Strimzi(现已成为 CNCF 孵化项目),通过应用成熟的身份验证、授权和保密机制来提升 Kafka 集群的安全性。


除了由于维护或基础设施问题导致 AWS 意外终止 EKS 节点外,初始设置运行良好。在这种情况下,Kafka 客户端会突然遇到错误,因为 Broker 没有被优雅地降级。更糟糕的是,受影响的 Broker 实例无法在新配置的 EKS 工作节点上重新启动,因为 Kubernetes 仍然指向已经不存在的存储卷。因此,如果没有 Coban 工程师的干预,Kafka 集群将以降级状态运行,三个 Broker 节点中只有两个可用。


开发人员利用 AWS 节点终止处理程序(NTH)将对 Kafka 客户端的干扰降至最低,通过排空工作节点,使用 SIGTERM 信号触发 Kafka 进程优雅地关闭。Grab 团队选择使用队列处理器模式而不是实例元数据服务(IMDS)模式,因为它捕获了更广泛的事件集合,包括与可用区(AZ)和自动扩展组(ASG)有关的事件。



使用 AWS 节点终止处理程序(队列处理器)支持 Kafka 的优雅关闭(来源:Grab 工程博)


他们使用 AWS 负载均衡器控制器(LBC)动态映射网络负载均衡器(NLB)目标组来解决工作节点终止时网络连接中断的问题。工程师们通过增加健康检查频率并使用 Pod 就绪门(Pod Readiness Gate)控制器来配置 NLB,解决 NLB 将每个目标组标记为健康状态所需的时间过长的问题。


他们最后需要克服的一个最大的障碍是确保新配置的 Kafka 工作节点能够正确启动并访问数据存储卷。工程师们决定使用弹性块存储(EBS)卷而不是 NVMe 实例存储卷。使用 ESB 有许多好处,例如成本更低、将卷大小与实例规格解耦、更快的同步速度、快照备份以及在不停机的情况下增加容量。此外,他们将 EC2 实例类型从存储优化改为通用型或内存优化型。


通过对 Kubernetes 和 Strimzi 进行额外配置,能够在新集群上自动创建 EBS 卷,并在将 Kafka Pod 重定位到不同工作节点时在 EC2 实例之间附加 / 分离卷。



经过这些改进,EC2 实例退役以及任何需要对所有工作节点进行轮换的操作都可以在没有人工干预的情况下进行,这些操作变得更快速、更不容易出错。他们正在计划做进一步的改进,包括使用 NTH Webhook 主动启动新实例并通过 Slack 通知 NTH 发起的操作,以及推出 Karpenter,用以取代 Kubernetes Cluster Autoscaler。


查看英文原文


https://www.infoq.com/news/2024/02/grab-kafka-kubernetes-aws-nth/

2024-02-29 10:005459

评论

发布
暂无评论
发现更多内容

阿里开源SpringSecurity:用户+案例+认证+框架

996小迁

Java 程序员 架构 面试 springsecurity

边缘安全 | 正确使用CDN 让你更好规避安全风险

阿里云Edge Plus

安全 CDN

LeetCode题解:105. 从前序与中序遍历序列构造二叉树,递归+哈希表,JavaScript,详细注释

Lee Chen

算法 大前端 LeetCode

关于JDK15的简单理解

Java架构师迁哥

数字货币应用从C端走向B端 实践中这些难题仍需关注

CECBC

数字货币

《价值》- 护城河(6)

石云升

读书笔记 护城河 28天写作

胜天半子!阿里内部力荐SpringBoot全栈笔记全网首发,源码实战齐飞

Java架构之路

Java 程序员 架构 面试 编程语言

AES128解密只能解一半的问题

李日盛

AES 问题定位

Soul网关源码阅读(八)路由匹配初探

Java 源码阅读 网关

第一周作业

Esther

技术分享 | 漫谈音视频中的拥塞控制

拍乐云Pano

阿里云 RTC QoS 屏幕共享弱网优化之若干编码器相关优化

阿里云CloudImagine

音视频 WebRTC 网络 RTC 视频会议

一文读懂 Serverless,将配置化思想复用到平台系统中

Serverless Devs

Serverless 云原生 PaaS

你kin你擦!阿里终于肯把内部高并发编程高阶笔记开源出来了

Java架构之路

Java 程序员 架构 面试 编程语言

实现数字经济和实体经济深度融合

CECBC

区块链

客户服务高触达,零代码从短信/邮件跳转小程序客服

环信

跨界融合,区块链推动实体经济提档升级

CECBC

人工智能 云计算 大数据

观看辽篮比赛,思考团队管理——关于团队的灵魂拷问,你中了几个?

伯薇

团队管理 团队建设 团队 赋能 激励

蝉联 Apache 最活跃项目,Flink 社区是如何保持高速发展的?

Apache Flink

flink

百度首届智能小程序高校大赛圆满结束:关注学生心理健康小程序获全国一等奖

DT极客

​Kubernetes资源清单篇:如何创建资源?​

xcbeyond

Kubernetes 28天写作 Kubernetes从入门到精通

快了何止100%?阿里巴巴Java性能调优实战(2021华山版)PDF版开源

Java架构追梦

Java 阿里巴巴 架构 性能优化 华山版

Android面试(二)

我就感觉到快

万字带你深入阿里开源的Canal工作原理

大数据老哥

大数据 canal

EXCEL数据太“脏”无从下手?何须用python,ETL一分钟搞定

智分析

Excel ETL

永续合约APP系统软件开发

系统开发

Redis 学习笔记 08:数据结构与对象小结

架构精进之路

redis 七日更 28天写作

认识产品经理(第一节)

让我思考一会儿

架构师训练营第三周作业 - 学习总结

阿德儿

为什么你家的 K8s 应用平台不好用?

孙健波

Kubernetes PaaS KubeVela

吉他谱怎么看?看谱大攻略送上!

懒得勤快

音乐 吉他学习 吉他谱 看谱

Grab 改进 Kubernetes 集群中的 Kafka 设置,无需人工干预就可轮换 Broker 节点_AI&大模型_InfoQ精选文章