背景
Twitter的旧软件架构基于lambda架构,包括批处理层、速度层与服务层。
Twitter每日需实时处理高达4000亿的事件,并生成PB级的数据。这些数据主要来源于分布式数据库、Kafka以及Twitter事件总线等多种事件源。
以下部分,我们描述 Twitter 原始的交互和参与管道解决方案。
Twitter 最初的解决方案采用了 lambda 架构。它有两个独立的管道:批处理(提供批处理的精确视图)和实时流处理(提供在线数据的视图)。
这两个视图输出最终会融合在一起。Twitter 的架构如下:
Summingbird平台:该平台包括多个分布式引擎,如 Scalding、Heron,一个专用库,允许用户定义 MapReduce 逻辑并在这些引擎上执行。
TimeSeries AggregatoR:一个强大且可扩展的实时事件时间序列聚合框架。
批处理:批处理管道的来源可以是 HDFS 中的日志、客户端事件或推文事件。有许多 Scalding 管道用于预处理原始数据,然后将其导入 Summingbird 平台。管道的结果将存储在曼哈顿分布式存储系统中。为了节省成本,Twitter 在一个数据中心部署批处理管道,并在其他两个数据中心复制数据。
实时:实时管道的来源是 Kafka topic主题。数据将“流”到 Summingbird 平台内的 Heron,然后 Heron 的结果将存储在 Twitter Nighthawk 分布式缓存中。与批处理管道不同,实时管道部署在 3 个不同的数据中心。
批处理和实时存储之上还包括查询服务。
由于实时数据规模大、吞吐量高,存在数据丢失和不准确的风险。如果处理速度赶不上事件流,Heron 拓扑(有向无环图表示数据处理的 Heron 流程)中就会出现背压。当系统处于背压状态一段时间后,Heron Bolts(可以想象为 Worker)可能会累积滞后,从而导致系统整体延迟过高。
此外,许多 Heron 流管理器可能会因背压而失败(流管理器管理拓扑组件之间的数据路由)。Twitter 的解决方案是重新启动 Heron 容器以启动流管理器。然而,重新启动肯定会导致事件丢失,从而降低管道的整体准确性。
以下部分描述了 Twitter 在认识到原有解决方案的局限性后提出的新解决方案。
通过新方法,Twitter 使用 Kappa 架构简化了解决方案,仅使用一个实时管道。该架构将利用内部 Twitter 和 Google Cloud Platform 解决方案:
内部部署:他们构建了预处理服务,将 Kafka 主题事件转换为 Google Pubsub 事件表示。
在 Google Cloud 上:他们使用Pubsub进行事件提取,使用Dataflow作业进行重复数据删除和实时聚合,并使用BigTable作为输出接收器。
新架构的流程可以这样描述:
步骤 1:它们从源 Kafka 主题使用数据,进行转换和字段重新映射,最后将结果发送到中间 Kafka 主题。
第 2 步:事件处理器将中间 Kafka 主题中的数据转换为 Pubsub 表示,并使用 UUID(用于 Dataflow 中的重复数据删除)和一些与处理上下文相关的元信息装饰事件。
步骤 3:事件处理器将事件发送到 Google Pubsub 主题。Twitter 几乎无限次重试此 PubSub 发布过程,以确保消息以至少一次的方式从数据中心传递到 Google Cloud。
步骤 4:Google Dataflow 作业将处理来自 PubSub 的数据。Dataflow 工作器实时处理重复数据删除和聚合。
步骤5:Dataflow 工作者将聚合结果写入BigTable。
Dataflow 工作者将聚合结果写入 BigTable。Twitter 对新架构的实现与迭代
与旧架构的 10 秒至 10 分钟的延迟相比,延迟保持稳定在 ~10 秒。
与旧架构的最大吞吐量约 100 MB/s 相比,实时管道的吞吐量最高可达到约 1GB/s。
通过至少一次向 Google Pubsub 发布数据以及 Dataflow 的重复数据删除工作,确保几乎精确地进行一次处理。
节省建设批量流水线的成本。
实现更高的聚合精度。
处理延迟事件的能力。
重启时无事件丢失
Twitter 创建了两个独立的 Dataflow 管道:一个管道将原始数据从 Pubsub 直接路由到 BigQuery,另一个管道将去重后的事件计数导出到 BigQuery。
这样,Twitter 就可以监控重复事件的百分比以及去重后的百分比变化。
除了写入 BigTable 之外,新的工作流程还将重复数据删除和聚合的数据导出到 BigQuery。
Twitter 还将旧的批量数据管道结果加载到 BigQuery 中。
运行计划查询来比较重复计数。
结果是,新流水线结果的 95% 以上与旧批处理流水线完全匹配。5% 的差异主要是因为原始批处理流水线丢弃了迟到事件,而新流水线可以有效捕获这些事件。
我们下篇博客再见。
作者:Mayank Sharma
编译:onehunnit
参考:
[1] Lu Zhang 和 Chukwudiuto Malife,《Twitter 实时处理数十亿事件》(2021 年)
https://open.substack.com/
https://blog.x.com/engineering/en_us/topics/infrastructure/2021/processing-billions-of-events-in-real-time-at-twitter-
本文为 @ 万能的大雄 创作并授权 21CTO 发布,未经许可,请勿转载。
内容授权事宜请您联系 webmaster@21cto.com或关注 21CTO 公众号。
该文观点仅代表作者本人,21CTO 平台仅提供信息存储空间服务。