写点什么

降本增效:Grab 如何在亚马逊云科技上将 Kafka 消费者流量成本降到零

  • 2023-09-07
    北京
  • 本文字数:1076 字

    阅读完需:约 4 分钟

大小:597.00K时长:03:23
降本增效:Grab如何在亚马逊云科技上将Kafka消费者流量成本降到零

Kafka 2.3 引入了将 Apache Kafka 消费者连接到相同可用区域(AZ)代理节点的能力,Grab 利用这一能力重新配置了消费者,将亚马逊云科技上的流量成本降低为零。这一更改大大降低了在亚马逊云科技上运行 Apache Kafka 的基础设施总成本。

 

Grab 以 Apache Kafka 为中心创建了一个流数据平台,支撑公司所有的产品。遵循 Kafka 最佳实践,他们的初始配置为每个 Kafka 分区三个副本,横跨亚马逊云科技区域中三个不同的可用区。负责该平台的团队观察到,跨 AZ 流量占了他们 Kafka 平台一半的成本,因为亚马逊云科技对跨AZ数据传输收费

 

对于初始设置的成本,Fabrice HarbulotQuang Minh Tran的看法如下:

这种设计的问题在于,它会产生惊人的跨 AZ 网络流量。这是因为,在默认情况下,Kafka 客户端只与分区 leader 通信,而分区 leader 有 67%的概率驻留在不同的 AZ 中。

 

跨 AZ 流量包括新发布的消息、代理之间的数据复制和消费者获取的消息。



默认消费者配置,消费者从分区 leader 获取数据(图片来源:Grab工程博客

 

Apache Kafka 2.3开始,可以将消费者配置为从分区副本中获取数据了。这样,如果消费者只从同一 AZ 中的代理获取消息,就不会产生数据传输成本了。

 

这个特性要求 Kafka 代理和消费者都知道其所在的 AZ。对于 Kafka 代理,团队会使用 AZ ID(az1、az2、az3 等)配置broker.rack 。AZ ID 与 AZ 名称(1a、1b、1c 等)不同,因为AZ名称在亚马逊云科技账户间不一致。他们还将参数replica.selector.class的值设置为org.apache.kafka.common.replica.RackAwareReplicaSelector

 

在消费者端,团队更新了内部 Kafka SDK,基于 EC2 主机元数据用 AZ ID 配置client.rack 参数,为的是应用程序团队可以通过导出环境变量来启用该功能。



自定义消费者配置,消费者从最近的副本获取数据(图片来源:Grab工程博客

 

在某些服务上应用新设置后,团队观察发现,跨 AZ 流量成本下降,并且有一些值得注意的副作用。首先,端到端延迟最多增加了 500 毫秒。考虑到大多数消费者从副本获取消息,这也是意料之中的。延迟增加是由复制时间导致的。理论上,任何对延迟敏感的数据流都应该始终从分区 leader 获取数据,即使那样会产生额外的成本。

 

其次,在代理维护(停机)时,直接从副本获取消息的消费者可能会遇到代理不可用的情况,因此,它们应该等待/重试,直到同一 AZ 中的代理恢复在线。最后,团队观察到,代理的负载与跨 AZ 的消费者数量有关。这意味着,消费者的均匀分布对于确保代理的负载平衡至关重要。

 

原文链接:

https://www.infoq.com/news/2023/07/grab-apache-kafka-aws-cost/


相关阅读:

Cloudflare的Kafka之旅:万亿级消息处理实践

使用Strimzi提高Kafka集群的安全性


2023-09-07 08:002628

评论

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

1549页Android最新面试题含答案,成功入职腾讯

android 程序员 移动开发

JavaScript基础篇运算符与表达式

你好bk

JavaScript html 大前端 html/css

[ CloudWeGo 微服务实践 - 05 ] 服务注册(1)

baiyutang

golang 微服务 11月日更

130-余个相见恨晚的超实用网站(建议收藏),2021年是做Android开发人员的绝佳时机

android 程序员 移动开发

2019年Android-非科班硕士的阿里&腾讯&字节&爱奇艺&网易&华为实习面试大汇总分享(1)

android 程序员 移动开发

2019年Android-非科班硕士的阿里&腾讯&字节&爱奇艺&网易&华为实习面试大汇总分享

android 程序员 移动开发

2018年6月份Android上海找工作经历(1),android蓝牙开发rom

android 程序员 移动开发

王者荣耀商城异地多活架构设计

Geek_db27b5

2019AndroidBATJ面试题设计模式&算法专题总结,真牛

android 程序员 移动开发

架构实战营 - 模块七作业

Alex.Wu

tar 备份linux系统

入门小站

Linux

在线文本转二进制工具

入门小站

工具

15个经典面试问题及回答思路,很多人死在了最后一个问题上

android 程序员 移动开发

2019(1),揭秘ARouter路由机制

android 程序员 移动开发

2019Android-网络编程总结篇,你想要的三次握手和四次握手

android 程序员 移动开发

模块七作业

potti

10天用Flutter撸了个高仿携程App(附小技巧积累总结),小红书安卓面试题目

android 程序员 移动开发

12年高级工程师的“飞升之路”,腾讯大牛教你自己写Android第三方库

android 程序员 移动开发

架构实战营模块七 - 王者荣耀商城异地多活架构设计

Yina🌝很浪🌊

#架构实战营

2019-年赚钱最多的-13-个技术岗位,移动开发框架对比

android 程序员 移动开发

2019-阿里、头条、腾讯,小白以及计算机类学生的福音

android 程序员 移动开发

Java 主函数 main 中的关键字 static

HoneyMoose

解决报错:Couldn't create temporary file /tmp/apt.conf.IRqbCz

liuzhen007

11月日更

2018年6月份Android上海找工作经历(2),面试安卓开发十大问题

android 程序员 移动开发

2019初中级Android开发社招面试解答之性能优化,kotlin转android代码

android 程序员 移动开发

10道阿里Android岗必问题摆这儿了,你爱刷不刷!,透彻解析

android 程序员 移动开发

2018年6月份Android上海找工作经历,2021华为Android面试真题解

android 程序员 移动开发

Android编译器及编译工具之编译器

轻口味

android 编译器 11月日更

王者荣耀商城异地多活架构

白开水又一杯

#架构实战营

2019-Android-高级面试题总结-从java语言到AIDL使用与原理

android 程序员 移动开发

2019初中级Android开发社招面试解答之性能优化(1),被面试官问的Android问题难倒了

android 程序员 移动开发

降本增效:Grab如何在亚马逊云科技上将Kafka消费者流量成本降到零_云端开发_Rafal Gancarz_InfoQ精选文章