写点什么

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

评论

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

留存率计算

Flychen

iOS 面试策略之算法基础6-7节

iOSer

ios 面试 算法 ios开发 算法解析

Fluid 给数据弹性一双隐形的翅膀 -- 自定义弹性伸缩

阿里巴巴云原生

大数据 容器 云原生 监控 弹性计算

skywalking dubbo agent 分析

kaiwen

会议更流畅,表情更生动!视频生成编码 VS 国际最新 VVC 标准

阿里云CloudImagine

阿里云 视频压缩 VVC

罗美琪和春波特的故事...

阿里巴巴云原生

容器 开发者 云原生 开发工具 消息中间件

我是如何开始写作的

happlyfox

个人成长 4月日更 1 周年盛典

Android Crash监控方式

Darren

监控 异常检测 Android开发 NativeCrash

用知识点+实例+项目完全深入地讲解springboot原理,这份《springboot实战派》火了!

Java架构之路

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

⼤规模短⽂本聚类的设计和实践

百度Geek说

聚类 query 内聚

DBA 行业是否将会消亡?

BinTools图尔兹

运维 dba 数据库管理工具

国产监控夜莺v4来了,大幅降低部署维护难度

巴辉特

Nightingale 滴滴夜莺

企业架构设计方法TOGAF介绍

joinM

企业架构 技术架构 业务架构 TOGAF 技术与业务

Spring Boot 2.0 实现优雅停机

U2647

Spring Boot 4月日更

从Map和Reduce角度谈Hive优化

五分钟学大数据

hive 4月日更 hive性能优化

anyHouse-iOS 高仿ClubHouse

anyRTC开发者

ios 音视频 WebRTC RTC 语音通话

混合云安全简史

龙归科技

混合云

当时尚撞上区块链,为潮酷创意赋予专属“ID”

旺链科技

产业链

第一课作业纠正

杰语

如何打造高效技术团队|专访前美篇首席架构师张超

穿过生命散发芬芳

调查采访能力考核

Disruptor 源码解读

lich0079

Java volatile Disruptor CAS Concurrent

双非渣硕!四面阿里收到offer后,才发现学长给的面试笔记有多强大

Java 编程 程序员 面试 计算机

toB SaaS会成为苏州下⼀个“⼀号产业”么?

龙归科技

数字化 tob

阿里资深技术专家崮德:如何成就更好的自己

阿里巴巴中间件

灰度发布系统架构设计

xcbeyond

微服务 灰度发布 4月日更

中寰-卜钢-采访提纲:车联网行业发展趋势

马踏飞机747

采访

想要写优秀的设计测试用例,不懂这个可不行!

程序员阿沐

软件测试 自动化测试 测试开发 测试用例 测试工程师

MySQL 表列数和行大小有哪些限制?

李尚智

MySQL 运维

Spring Boot 两行代码轻松实现国际化

Java架构师迁哥

pdf.js使用小结

空城机

大前端 4月日更 pdf.js

联盟链技术

360技术

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