“我经常告诉客户,Apache Beam 是数据处理的“Docker”。它高度可移植,可以在任何地方无缝运行,统一了批处理和流式处理,并提供了许多开箱即用的模板。采用 Beam 可以加速从批处理到流式处理的迁移,在不同上下文之间轻松重用管道,并更快地启用新的用例。Apache Beam 的优势和出色性能对许多人来说都是游戏规则的改变者!"
OCTO 技术客户的高性能、高效事务数据处理
背景
OCTO Technology 是 埃森哲 的一部分,是技术咨询和软件工程领域的领先者,专注于新技术和数字化转型。自 1998 年以来,OCTO 一直致力于打造可扩展的数字解决方案,为客户推动业务转型,从初创公司到跨国公司。OCTO 利用其深厚的技术专长和强大的成功创新文化,帮助客户探索、测试和采用新兴技术,或大规模实施成熟的数字解决方案。
凭借强大的 Apache Beam 统一可移植模型,OCTO 已释放潜力,为多个客户赋能、转型和扩展其数据生态系统,其中包括法国知名报纸和法国最大的杂货零售商等知名企业。
在本篇聚焦文章中,OCTO 的数据架构师 Godefroy Clair 和数据工程师 Florian Bastin 和 Leo Babonnaud 公开了 Apache Beam 对领先法国杂货零售商数据处理的显著影响。实施后,从批处理到流式处理的迁移速度加快,事务数据处理速度提高了 4 倍,基础设施成本效率提高了 5 倍。
高性能事务数据处理
OCTO 的客户,一家在多个国家拥有数万家门店的知名杂货和便利店零售商,依赖于一个内部网络应用程序,为门店经理提供有见地的采购决策和有效的门店管理。该网络应用程序提供对关键产品详细信息、库存数量、定价、促销等的访问权限,这些信息来自各种内部数据存储、平台和系统。
在 2022 年之前,客户使用了一个编排引擎来编排批处理管道,这些管道合并和处理来自云存储文件和发布/订阅消息的数据,并将输出写入 BigQuery。但是,由于大多数源数据在晚上上传,批处理在满足 SLA 和在商店开业前向商店经理提供最新信息方面遇到了挑战。此外,错误或丢失的数据上传需要繁琐的数据库状态恢复,涉及大量事务数据和日志。客户的内部团队投入大量时间维护庞大的 SQL 查询或手动更新数据库状态,导致维护成本高昂。
为了解决这些问题,客户寻求 OCTO 的专业知识,以转型其数据生态系统,并将他们的核心用例从批处理迁移到流式处理。目标包括更快的數據處理速度,确保网络应用程序中的最新数据,简化管道和数据库维护,确保可扩展性和弹性,以及有效处理数据量激增。
客户需要非常快速地合并和处理大量来自云存储和发布/订阅事件的不同格式的文件,以便每天在他们的网络应用程序中获得有关新产品、促销等的最新信息。为此,Apache Beam 是完美的工具。
Apache Beam 及其统一模型成为完美的解决方案,使客户能够为其核心事务数据处理提供近实时流式处理,以及用于独立用例的批处理。此外,它还提供了与 Dataflow 运行器 自动扩展的额外优势。借助 Apache Beam 的 Python SDK 和开箱即用的 I/O 连接器,OCTO 能够在现有和新的批处理和流式处理管道之间重用 Python 组件,并利用与发布/订阅和云存储的原生优化连接,加快迁移速度。
客户网络应用程序背后的流式 Apache Beam 管道现在处理来自发布/订阅消息和不同大小的云存储文件(从几行到 170 万行)的产品和库存数据,这些数据在不同时间、不可预测的顺序和不同格式(如 CSV、JSON 和 zip 文件)到达云存储。Apache Beam 的 及时处理 功能使流式处理管道能够有效地处理这些数据。它的 计时器 提供了一种通过等待所有必要的事件和文件到达然后以正确的顺序处理它们来控制聚合的方法,而 GroupByKey 和 GroupIntoBatches 变换允许为每个键进行高效分组,并将输入批处理到所需的大小。每天,Apache Beam 管道都会合并、去重、丰富和输出数据到 Firestore 和 Algolia,处理超过 1 亿行,并合并数百 GB 的事务数据,外部状态超过 1 TB,不到 3 个小时。
网络应用程序需要在商店开门之前在早上尽早获得最新数据。以前,及时处理客户的所有数据是不可行的。借助 Apache Beam,他们现在可以在 3 小时内完成处理,即使输入文件在晚上很晚才到达,也能确保数据的可用性。
客户的具体用例带来了独特的挑战:丰富数据太大,无法保存在内存中,不可预测的文件顺序和到达时间使得计时器和状态 API 不可行。由于无法利用 Apache Beam 的原生有状态处理,OCTO 在将 DoFns 的状态外部化到事务性 Cloud SQL Postgres 数据库中找到了解决方案。在处理新事件和文件时,Apache Beam 管道使用流式查询来选择、插入、更新和删除 Cloud SQL 数据库中的状态行。Apache Beam 在处理代表过去、现在和未来记录在接收数据库中状态的文件、发布/订阅事件和日志时,擅长复杂的狀態合并。如果传入数据错误,并且需要恢复接收数据存储,Apache Beam 会处理大量有关特定时间段内数据移动的日志,并将它们合并到状态中,从而消除手动操作。
网络应用程序需要在商店开门之前在早上尽早获得最新数据。以前,及时处理客户的所有数据是不可行的。借助 Apache Beam,他们现在可以在 3 小时内完成处理,即使输入文件在晚上很晚才到达,也能确保数据的可用性。
通过利用 Apache Beam,客户在数据处理方面取得了突破性进展,为其内部网络应用程序提供了新鲜数据和历史数据,提高了整体运营效率,并以更快的处理延迟满足了业务需求。
自定义 I/O 和对 SQL 连接的细粒度控制
客户的具体用例要求在基于 PCollection 中值的 Cloud SQL 数据库中执行 CRUD 操作,尽管内置的 JBDC I/O 连接器 支持从 Cloud SQL 数据库中读取和写入,但它不支持此类 SQL 操作。但是,Apache Beam 的自定义 I/O 框架为 创建适合复杂用例的新连接器 打开了大门,提供了与开箱即用 I/O 相同的连接。利用这种优势并利用 ParDo 和 GroupByKey 变换,OCTO 成功开发了一个新的 Apache Beam I/O。这个自定义 I/O 使用 Cloud SQL Python 连接器 与 Cloud SQL 数据库无缝交互,在 DoFn.Setup 方法中将后者实例化为一个连接对象。
此外,Apache Beam 为 OCTO 提供了对并行性的细粒度控制,使他们能够最大限度地提高工作进程的效率。借助 Dataflow 运行器的强大并行性和自动扩展功能,OCTO 必须解决 Cloud SQL 强加的 并发连接数量限制。为了克服这一挑战,Apache Beam DoFn.Setup 方法派上了用场,提供了一种通过在方法中指定来定义并发操作最大数量的方法。OCTO 还利用了 beam.utils.Shared 模块为 Cloud SQL 数据库创建一个连接池,有效地将其在工作进程级别共享。
OCTO 的数据工程师在 Beam Summit 2023 上展示了这些由 Apache Beam 推动的创新成果。
结果
Apache Beam 使 OCTO 能够彻底改变法国最知名杂货零售商之一的数据处理,基础设施成本优化了 5 倍,数据处理性能提高了 4 倍。Apache Beam 的统一模型和 Python SDK 在加速从批处理到流式处理的迁移方面发挥了重要作用,因为它提供了跨管道重用组件、包和模块的能力。
Apache Beam 的强大变换和稳健的流式处理功能使客户的流式处理管道能够每天高效地处理超过 1 亿行,在不到 3 个小时内合并了超过 1 TB 外部状态的事务数据,这在以前是无法实现的。Apache Beam 的灵活性和可扩展性使 OCTO 能够解决用例特定的技术约束,实现力量和控制的完美平衡,以符合客户的特定业务目标。
我经常告诉客户,Apache Beam 是数据处理的“Docker”。它高度可移植,可以在任何地方无缝运行,统一了批处理和流式处理,并提供了许多开箱即用的模板。采用 Beam 可以加速从批处理到流式处理的迁移,在不同上下文之间轻松重用管道,并更快地启用新的用例。Apache Beam 的优势和出色性能对许多人来说都是游戏规则的改变者!"
了解更多
这些信息有用吗?