使用 Apache Beam 和 Cookiecutter 启用自助服务数据平台


在本文中,讨论了Achievers 的领域团队如何能够通过利用 PyPi Cookiecutter 引导 Apache Beam 管道?

在Achievers,我们正在建立一个自我服务的数据平台,使我们的领域团队能够自主地创建、分享和使用数据资产。我们平台上的每一个后端服务都会产生数据,这些数据被积极用于为我们的业务决策提供信息,识别使用模式,衡量性能,并训练机器学习模型。我们正在使我们的领域团队能够自己管理这些数据资产,因此,在我们的组织内分散了数据的所有权。

我们希望分散的关键数据资产之一是数据处理管道。传统上,一个由训练有素的数据工程师组成的团队设计、构建、测试、部署和集中维护数据处理管道。然而,在像我们这样的自助式数据平台上,我们希望领域团队能够承担起这一责任,并将这些管道作为其数据资产的一部分来管理。

例如,我们的成就者体验平台(AEXP)上的认可服务为我们平台上发布的每一个员工认可产生了数据。认可领域团队负责从应用层获取相关的原始数据,根据需要用业务逻辑进行转换,并将其加载到一个中央位置。从这里,所有的外部团队都可以访问这些数据并将其用于他们的使用案例。

正如你可以想象的那样,这个策略有一个明显的挑战。我们希望我们的领域团队在不一定接触到底层数据处理技术栈的情况下,能够承担像构建数据管道这样的特殊任务。在这篇博客中,我们将讨论Achievers的数据架构团队如何利用Apache Beam和PyPi Cookiecutter抽象出数据处理管道的创建;从而使我们的领域团队能够简单地利用这些抽象,在对数据处理技术栈有最少了解的情况下轻松建立他们的数据管道。

我们的工具箱 - Apache Beam和PyPi Cookiecutter
在Achievers,Apache Beam是定义数据处理管道的首选工具。它是一个开源的编程模型,用于构建数据处理管道,可以在不同的执行环境中移植,如Apache Flink、Apache Spark和Google Cloud Dataflow。它允许开发人员编写可以轻松重复使用和扩展的代码,以满足不同的数据处理需求,如ETL(提取、转换、加载)、流处理和批处理。Beam SDK提供了使用流行的编程语言如Java、Python、Go、Scala和SQL来定义这些数据处理管道的灵活性。

我们一直在寻找能够集中定义Beam管道的框架的解决方案,封装最佳实践,并允许我们不同团队的开发人员在管道上定义他们的业务逻辑。Cookiecutter是PyPi上一个流行的项目模板工具,符合这个要求。我们已经在Achievers使用Cookiecutter来为我们的后端服务生成启动代码。Cookiecutter是一个命令行工具,可以用`pip`轻松安装。

Apache Beam Cookiecutter - 概述
Apache Beam Cookiecutter是我们内部的模板化工具,用于自动生成Apache Beam管道。为了快速生成Apache Beam管道,我们首先需要将其分解成不同的模块,如下所示。

  • 1.管道选项 - 配置、参数、批量/流式设置
  • 2.输入 - 我们经常导入数据的来源
  • 3.转换 - 我们的管道中最经常使用的转换。
  • 4.输出 - 我们经常输出数据的汇

我们用不同的选项对每个模块进行抽象。例如,我们创建了自定义连接器,与外部系统如谷歌云存储、谷歌BigQuery和MySQL/Postgres交互。当开发者调用Cookiecutter时,它会要求他们选择输入、转换和输出。基于这个选择,我们的Cookiecutter可以通过插入这些连接器来生成一个Beam管道代码。

这些连接器的核心逻辑位于一个集中管理的内部Python包上,它只是被Cookiecutter所调用。通过这样做,我们确保集中管理通用组件的底层代码,如连接器。这使得在未来升级它们变得很容易。

更多点击标题

总结
Apache Beam Cookiecutter已经被Achievers的领域团队采用,以生成他们的Beam数据处理管道,用于某些用例。Cookiecutter允许领域团队的开发人员以最少的Apache Beam知识来启动Beam数据处理管道。领域团队不再完全依赖中央团队为他们创建和管理自定义数据管道。这使得我们Achievers的数据架构团队能够更专注于解决框架层面的问题,而不是解决需要特定领域专业知识的领域层面问题。​​​​​​​