2天时间,聊今年最热的 Agent、上下文工程、AI 产品创新等话题。2025 年最后一场~ 了解详情
写点什么

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:005684

评论

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

本以为自己MySQL够牛逼了,直到亲自去阿里受虐了一次!

Java架构师迁哥

Java程序员博客系统推荐!我调研了100来个 Java 开源博客系统,发现这 5 个最好用!

Java 项目管理 计算机 框架设计

架构大作业

赵龙

一文详解分布式缓存(附代码)

架构师修行之路

缓存 分布式 分布式缓存

QPS、TPS、RT、并发数、吞吐量理解和性能优化深入思考

艾小仙

架构 编程语言

架构师训练营第一周学习总结

邓昀垚

极客大学架构师训练营

华为HMS的“生态雪球”,滚动在万物智联的新跑道

脑极体

LeetCode题解:622. 设计循环队列,使用双向链表,JavaScript,详细注释

Lee Chen

大前端 LeetCode

未来已来!全球一流科技盛会——云栖大会9月17日线上隆重举办

北柯

区块链支付系统开发技术方案,USDT支付系统搭建

13530558032

Spring Boot CLI 介绍

hungxy

Spring Boot Spring Boot CLI

Java-技术专题-AQS和Volatile和Synchronized实现原理

码界西柚

易观方舟Argo+CRM | 让企业数据发挥更大价值

易观大数据

天猫成立房产部门,利用区块链承载交易多项服务功能

CECBC

区块链 房地产

区块链技术智能合约有哪些实际的应用场景

CECBC

智能合约 区块链技术

DDD+微服务实战:什么是DDD?

AI代笔

微服务 领域驱动设计 DDD

Java-技术专题-JMX超详细解读

码界西柚

大作业 一

Jaye

What’s New in Dubbo-go-hessian2 v1.7.0

apache/dubbo-go

服务端 dubbo-go Go 语言

甲方日常 17

句子

生活 随笔杂谈

Java异常面试题(2020最新版)

Java架构师迁哥

数字货币交易所技术开发,交易所源码

13530558032

TCP和HTTP中的KeepAlive机制总结

陈德伟

nginx TCP 性能 网络 HTTP

面试官:你说说互斥锁、自旋锁、读写锁、悲观锁、乐观锁的应用场景

小林coding

乐观锁 高并发 操作系统 计算机基础

Week15

一叶知秋

架构师训练营第 1 期-第一周命题作业

arthur

数字资产钱包开发方案,区块链数字钱包软件源码

13530558032

架构师训练营第一周作业

邓昀垚

数字经济时代来临 区块链护航数字资产安全

CECBC

金融 数字时代

银行数仓体系发展之路

易观大数据

架构师训练营1期 -- 第一周作业

曾彪彪

极客大学架构师训练营

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