写点什么

Agoda 通过自定义的双向同步功能来处理跨数据中心的 Kafka 消费者故障转移

作者:Craig Risi

  • 2025-08-17
    北京
  • 本文字数:1654 字

    阅读完需:约 5 分钟

大小:827.45K时长:04:42
Agoda通过自定义的双向同步功能来处理跨数据中心的Kafka消费者故障转移

Agoda 的工程团队最近分享了他们定制的解决方案,该方案旨在跨多个内部数据中心维护关键的 Kafka 消费者操作,确保即使在中断期间也能保持业务连续性。Agoda 每天处理超过 3 万亿条 Kafka 记录,需要一种故障转移机制,可以无缝地在不同的Kafka集群之间转移消费者工作负载,同时保留处理状态,避免数据重复或丢失。

 

Agoda 的工程师没有依赖于 Kafka 的扩展集群,这由于地理延迟而不切实际,也没有依赖于缺乏双向偏移同步的MirrorMaker 2,而是开发了一个增强系统,扩展了 MirrorMaker 2 以支持可靠的故障转移、无缝的故障恢复和持久的偏移转换。他们的方法涉及在集群之间始终开启消费者组偏移和OffsetSync记录的双向同步。当消费者组在一个数据中心提交偏移时,该偏移量会在另一个集群中使用围绕Kafka Connect和 OffsetSync 机制构建的自定义同步服务进行转换和更新。

 

在故障转移场景中,由于转换和复制的偏移,辅助集群能够从原始位置消费的确切点接管处理。当主数据中心恢复时,系统支持故障恢复:消费者偏移同步回原始集群,确保连续性,不会重复消息或丢失进度。为了避免循环偏移更新,同步服务在应用更新之前检查已经同步的状态。

 

该系统还包括强大的可观测性组件:专用的 Grafana 仪表板跟踪诸如复制延迟、同步失败和消费者滞后等指标,以便及早发现异常并在操作影响发生之前进行干预。这种实时的可见性支持跨多个数据中心的 Kafka 部署的可靠性。

 

定制的故障转移和故障恢复架构反映了一个日益增长的趋势,即在多数据中心规模上进行工程的组织不能依赖于 Kafka 的默认功能。根据 Agoda 的说法,这个系统为服务连续性、精确的处理语义和大规模的灾难恢复能力提供了必要的弹性。这种方法突出了对运维严谨性和设计灵活性的战略承诺,使 Agoda 的数据平台能够在不妥协正确性或吞吐量的情况下承受基础设施中断。

 

在 Instagram 上, Agoda发布了他们的 Kafka 基础设施每天处理超过 3 万亿记录的帖子,并指出:

 

“为了在数据中心中断期间保持业务连续性,我们必须能够跨集群转移 Kafka 消费者。”

 

其他拥有大规模流式平台的公司已经以与 Agoda 的自定义解决方案相似的方式解决了多数据中心 Kafka 故障转移的挑战,尽管它们的实现因运维约束和优先事项而异。

 

MirrorMaker 2 是 Kafka 内置的跨集群复制工具。默认情况下,它支持单向复制,将数据从主集群复制到备集群。虽然这适用于主动-被动故障转移场景,但它缺乏对双向偏移同步和无缝故障恢复的原生支持。如果没有自定义扩展,MM2 无法在镜像主题之间转换消费者偏移,这意味着消费者将不得不重新处理消息,或在故障转移后面临数据丢失的风险。

 

Netflix在 Kafka 上运行多区域 active-active 系统,用于事件和微服务通信。他们的解决方案利用了基于 MirrorMaker(pre-MM2)上的自定义工具来在区域之间复制数据。对于故障转移,Netflix 集成了它的控制平面(Zuul、Eureka),以重定向流量并在其他区域恢复消费者。虽然 Agoda 的解决方案自动化了偏移转换,但 Netflix 历来优先考虑幂等事件处理和重放,以处理故障恢复场景。

 

Uber的流式堆栈(uChannel,Apache Kafka)支持像 Uber 外卖和乘车调度这样的全球服务。他们实施了地理分布式复制,但通常依赖于异步故障转移模型。与 Agoda 类似,Uber 避免跨区域同步集群,并使用本地偏移与检查点来在灾难恢复场景中恢复消费。他们的模型强调按地理位置划分工作负载,并在故障恢复期间从检查点重放,而不是持续的双向同步。

 

Confluent 的商业工具扩展了MM2,提供了更高级的功能,如更好的主题自动创建和模式复制。然而,与 MM2 类似,它本身并没有解决双向故障转移的偏移转换问题。此外,企业在采用 Confluent 的解决方案时可能会面临供应商锁定和许可成本。

 

Agoda 的设计需要持续的偏移同步和可观测性工具(用于同步延迟和失败率的 Grafana 仪表盘)。与简单的单向容灾设置相比,这增加了复杂性,但为关键的高容量工作负载提供了更高的可靠性和正确性。其他优先考虑成本和简单性的公司可能会接受一些重放或手动故障恢复,而不是构建自定义解决方案。

 

原文链接:

https://www.infoq.com/news/2025/08/agoda-kafka-failover/

2025-08-17 08:004185

评论

发布
暂无评论

大咖说·图书分享|阿里官方为你分享内部测试之道

大咖说

阿里巴巴 测试 开发

揭秘华为云GaussDB(for Influx)最佳实践:hint查询

华为云开发者联盟

数据库 倒排索引 GaussDB(for Influx) hint 单时间线

【技术干货】代码示例:使用 Apache Spark 连接 TDengine

TDengine

数据库 tdengine 开源 时序数据库

中科大脑知识图谱平台建设及业务实践

NebulaGraph

图数据库 知识图谱

git bisect:让你闭眼都能定位疑难 bug的利器

华为云开发者联盟

开发 bug git bisect 二分法定位

一份优秀的产品帮助文档怎么写?

小炮

3D赛车【附源码】设计实现

JavaPub

ZooKeeper 在阿里巴巴的服务形态演进

阿里巴巴云原生

Apache zookeeper 阿里云 开源 云原生

【直播预告】研发效率百倍提升的秘密,这些破圈思路了解一下!

FinClip

小程序 finclip 直播预告

给小白的 PG 容器化部署教程(上)

RadonDB

postgresql 容器化 数据库·

UniqueMergeTree:支持实时更新删除的ClickHouse表引擎

字节跳动数据平台

Clickhouse 表引擎 实时

Java 实现 贪吃蛇 小游戏【附源码】

JavaPub

关于敏捷测试象限的“秘密”

BY林子

敏捷开发 敏捷测试 测试策略

【等保测评】2022年北京正规等保测评机构新名单公布

行云管家

等保测评 北京

MSVC编译多个C程序文件

Loken

音视频 5月月更

PostgreSQL 15 新特性解读 | 墨天轮优质文章合集

墨天轮

数据库 sql postgresql 新特性

编程,不止有代码,还有艺术

华为云开发者联盟

数据库 倒排索引 GaussDB(for Influx) hint

VPN的应用场景

源字节1号

小程序开发

上新了 亚麻云 | 远程办公有点上头?解锁云上应用现代化的奥秘

亚马逊云科技 (Amazon Web Services)

远程办公 应用

【等保测评】等保测评师怎么考,前景怎么样?

行云管家

网络安全 IT运维 等保测评 等保测评师

艾莫尔研究院基于Karmada的落地实践

华为云开发者联盟

云原生 Karmada 自动化集群管理

直击中小企业转型通用痛点 联想百应推出智能会议解决方案

极客天地

Java 实现 1024 小游戏【附源码】

JavaPub

常用的 Lambda 表达式案例解析,工作中都会用到!

CRMEB

A New ETL Language -- Easy SQL

Bright

数据开发 ETL 大数据开发 EasySQL

固态硬盘和机械硬盘的区别(7大区别,简单易懂)

源字节1号

软件开发 前端开发 后端开发 小程序开发

精彩回顾|KubeCon EU 2022 Kubernetes Batch + HPC 专题日

Daocloud 道客

Kubernetes 云原生 HPC batch

实验室信息管理系统如何工作?

低代码小观

低代码 实验室管理系统 企业管理系统 LIMS实验室信息管理系统 企业管理软件

MSVC编译静态库

Loken

5月月更

直播回顾|携手 Opentelemetry 中国社区,走进可观测性

Daocloud 道客

云原生 可观测性

企评家,企业成长性评价系统怎么用?

企评家

企业成长性分析 企评家 企业投资价值评价

Agoda通过自定义的双向同步功能来处理跨数据中心的Kafka消费者故障转移_软件工程_InfoQ精选文章