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

HubSpot 使用 Apache Kafka 泳道实现工作流操作的实时处理

作者:Rafal Gancarz

  • 2023-12-11
    北京
  • 本文字数:1194 字

    阅读完需:约 4 分钟

HubSpot 使用 Apache Kafka 泳道实现工作流操作的实时处理

HubSpot 采用在多个 Kafka 主题(称为泳道,swimlanes)上为同一生产者路由消息的方式,避免了消费者群组滞后的积压,并且能够优先处理实时流量。通过自动和手动相结合的方式探测流量峰值,该公司能够确保大多数消费者的工作流能够在无延迟的情况下执行。


HubSpot 提供了一个业务流程的自动化平台,其核心采用工作流引擎来推动操作(action)的执行。该平台可以处理数百万个活动的工作流,每天执行数亿个操作,每秒执行数万个操作。



工作流引擎概览(来源:HubSpot 工程博客)


大部分处理都是异步触发的,使用 Apache Kafka 进行传递,从而实现了操作的源 / 触发器与执行组件之间的解耦。该平台使用了许多 Kafka 主题,负责传递来自各种源的操作数据。使用消息代理的潜在问题在于,如果消息发布得太快,而消费者无法及时处理,等待处理的消息就会积压,这就是所谓的消费者滞后(consumer lag)。


HubSpot 的工程主管 Angus Gibbs 描述了确保近实时处理消息所面临的挑战:


如果在主题上突然出现大量消息,我们就必须处理积压的消息。我们可以扩展消费者实例的数量,但这会增加基础设施成本;我们可以添加自动扩展,但增加新的实例需要时间,而客户通常希望工作流能够以接近实时的方式进行处理。团队认识到,他们需要解决的问题是对所有相同类型或相同来源的消息使用了相同的主题。考虑到该平台被许多客户使用,如果某一个或一小部分客户开始产生大量消息,那么所有的流量均会延迟,所有客户的用户体验都会受到影响。


为了解决这个问题,开发人员选择使用多个主题,他们将其称为泳道(swimlanes),并为每个泳道配置专用的消费者池。应用这种模式的最简单方式是使用两个主题:一个负责实时的流量,一个负责溢出的(overflow)流量。这两个泳道以完全相同的方式处理流量,但是每个主题都有独立的消费者滞后,通过在两者之间适当地路由消息,可以确保实时泳道避免出现任何的(或明显的)延迟。



Kafka 泳道(来源:HubSpot 工程博客)


如果可能的话,系统会从发布的消息中提取元数据,基于此在泳道之间实现消息的自动路由。例如,批量导入所产生的消息可以在消息模式中明确标记出这种操作类型,这样路由逻辑就可以轻松地将这些操作发布到溢出泳道。此外,开发人员还引入了按客户配置来限制流量的功能,并且能够根据报文消费者的最大吞吐量指标设置适当的阈值。


决定如何在泳道之间路由消息的另一个角度是查看操作的执行时间。实际操作将被路由到一个泳道,而慢速操作将被路由到另一个泳道。这一点对 HubSpot 平台尤为重要,因为客户可以创建执行任意 Node 或 Python 代码的自定义操作。


最后,该团队还开发了将特定客户的所有流量手动路由到专用泳道的方法,以防来自客户的流量意外地在主(实时或快速)泳道上造成滞后,而此时自动路由机制均未启动。这样,在团队排查延迟原因时,就对流量进行隔离了。


原文链接

https://www.infoq.com/news/2023/11/hubspot-apache-kafka-swimlanes/


2023-12-11 14:334858

评论

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

第十周 学习总结

简简单单

第三章:产品解决方案作业

让时间说真话

产品经理

史上最清晰的Tarjan算法详解

华为云开发者联盟

算法 静态分析 语法树 Tarjan 数据流

使用pgBackRest并行归档解决wal堆积问题

PostgreSQLChina

数据库 postgresql 开源 开源社区

不要在nodejs中阻塞event loop

程序那些事

node.js Event 事件循环 程序那些事 nodejs event

大背景 (28天写作 Day25/28)

mtfelix

28天写作 新能源汽车 新能源革命 碳中和

【WOW.js】Animate.css的黄金搭档

德育处主任

CSS 动画 js 28天写作 2月春节不断更

官宣了!Apache ECharts 毕业成为 Apache 软件基金会顶级项目!

百度Geek说

百度 基金会

Python 中 sorted 如何自定义比较逻辑

zikcheng

Python sorted cmp

话题讨论|过年回家你带电脑吗?

熊斌

话题讨论 28天写作

第三章: 产品解决方案作业

让时间说真话

产品经理 产品经理训练营

挖矿系统APP源码搭建

luluhulian

安卓开发交流!一线互联网移动架构师筑基必备技能之Java篇,Android岗

欢喜学安卓

android 程序员 面试 移动开发

安卓开发软件有哪些?分析Android未来几年的发展前景,吐血整理

欢喜学安卓

android 程序员 面试 移动开发

Elasticsearch 写一致性原理

escray

七日更 28天写作 死磕Elasticsearch 60天通过Elastic认证考试 2月春节不断更

前端面试必备ES6全方位总结

我是哪吒

程序员 面试 大前端 ES6 2月春节不断更

时间约束帮助我写作

Justin

方法论 创意 习惯养成 28天写作

第十周 模块分解作业

简简单单

挖矿区块链_什么是挖矿 带你详细了解挖矿基础知识

v16629866266

云原生动态周报 | Google推出VM Manager

华为云原生团队

Docker 开源 云原生 华为云

OpenAI将k8s扩展至7500个节点以支持机器学习;Graph Diffusion Network提升交通流量预测精度

京东科技开发者

区块链 开源

产品训练营 第三次作业

Wangyunnfei

ModelArts AI Gallery与HiLens Kit联合开发丨行人社交距离风险提示Demo

华为云开发者联盟

华为云 modelarts hilens 行人 社交距离

产品经理训练营第0期-第三次作业

孙行者

第0期 产品经理训练营 问题

厚积薄发!华为云7篇论文被AAAI收录,2021年AI行业技术风向标看这里!

华为云开发者联盟

人工智能 卷积网络 远程监督 域泛化 油气储集层收集

华为云FusionInsight助力宇宙行打造金融数据湖新标杆

华为云开发者联盟

数据湖 云原生 存储 FusionInsight 华为云

就算知道了答案,真的会改变吗?「幻想短篇 25/28」

道伟

28天写作

高性能缓存 Caffeine 原理及实战

vivo互联网技术

Java Caffeine 本地缓存

日记 2021年2月2日(周二)

Changing Lin

个人感悟 2月春节不断更

用RabbitMQ了好几年之后,我总结出来5点RabbitMQ的使用心得

四猿外

MQ RabbitMQ 消息队列

说说常常被研发忽略的原型模式

后台技术汇

28天写作 2月春节不断更

HubSpot 使用 Apache Kafka 泳道实现工作流操作的实时处理_实时计算_InfoQ精选文章