计划与事件驱动的数据管道——用 Prefect 编排任何东西

计划与事件驱动的数据管道——用 Prefect 编排任何东西

何时以及何时不安排您的工作流程以及为什么传感器和守护进程会浪费资源

Marvin observes what’s currently happening in the galaxy

○ 最常见的数据工程挑战之一是触发工作流以响应事件,例如新文件到达某个目录时。传统编排器采用的方法是部署持续运行的后台进程,例如轮询状态的传感器或守护进程。在这篇文章中,我们将讨论为什么这种方法会浪费资源,并展示一种替代方法——可使用 Prefect 观察的事件驱动工作流。

计划数据流的用例

计划工作流的一个流行用例是批处理 数据摄取转型 .此过程通常涉及提取数据( 与上次运行相比可能存在增量 ) 从源系统,将其摄取到您的数据仓库中,并在需要时对其进行转换。完成后,可以运行相同的工作流程 数据质量 测试,刷新数据 提取物 用于报告,或触发下游自动化操作,例如 警报 关于错误的 KPI 和检测 异常 在数据中。

除了这些常见的数据工程任务之外,许多数据科学用例构成了计划工作流的热门候选,包括特征表的重新实现、重新训练 ML 模型和生成 批量预测 有规律的节奏。

简而言之,通常需要调度 静止的可预见 通常不需要频繁调整的批处理工作流程( 直到你遇到夏令时问题,开个玩笑 )。

事件驱动数据流的用例

触发器

如果您只需要在发生某些事情时才运行工作流程,那么安排工作流程是一种浪费,您可以将其视为 扳机

  • 当一个 新的 ** 目的** __ 到达您的 S3 存储桶,
  • 当新的变更数据捕获 (CDC) ** 记录** 被摄入,
  • 当新的 DynamoDB、Aurora、Kafka 或 Kinesis ** 溪流** 到达,
  • 当一个新的 ** 事件** 通过 API 调用(MongoDB、Datadog、Zendesk、Salesforce……)从某个外部系统接收,
  • 当一个新的 ** 信息** 在某个发布-订阅消息队列中收到,
  • …还有很多。

行动

有许多适合这种模式的数据流场景:

  • 一旦您的数据存储在某些自定义应用程序中更新( 新记录或对象 ),运行一个流程到 ** 采取行动** 在该更新上,例如,提交交易、下订单、向某人发送消息或启动某些流程,
  • 当事情发生时( 新事件或消息到达 ), ** 处理它** 立即,例如,将该数据插入表中,
  • 当一些外部工作( 例如,运行数据转换的 Databricks Spark 作业 ) 完成,运行另一个流程到 ** 重新训练 ML 模型** ,开始一些 ** 后期处理,** 或者只是发送一个 ** 通知** 关于它的完成。

事件驱动的工作流程允许您 立即采取行动 当事情发生时。在下一节中,我们将研究实现事件驱动工作流模式的可能解决方案。

可能的解决方案

您可以通过多种方式在数据管道中实现上述场景。我们将以 S3 对象的到来为例说明如何将这些模式中的每一个用于相同的用例。

1. 人工投票

该问题最明显的解决方案是手动轮询状态。这可能涉及一个while循环不断轮询状态( 例如,通过对某些外部服务的 API 调用 ) 并在满足条件后中断循环。以下是针对 S3 用例处理如此长时间运行的轮询作业的方法:

这种方法的缺点:

  • 它需要一个守护进程,即一个长时间运行的作业,它可以是 难以维护 ,
  • 它是 脆弱的 — 如果出现问题( 比如说,一个 API 调用轮询状态失败 ),您的整个过程也会失败,除非您编写更多代码处理异常,重新启动该过程并可能提醒您出现问题,
  • 它是 昂贵的 — 您需要 24/7 全天候运行此流程,直到您关心的事件发生。

2. 来自传统编排器的传感器和守护进程

此处的方法与上面的方法基本相同,主要区别在于该轮询逻辑隐藏在该遗留协调器实现的抽象之后。

3. 使用无服务器(例如 AWS Lambda)的事件驱动工作流

事件驱动架构已经成熟到业界开始采用标准,例如 CNF 云事件 .同样,所有主要的云提供商都提供事件驱动的服务,包括:

与使用手动轮询、传感器和守护进程的先前选项相比,使用上述任何工具都具有显着优势。

这种方法的缺点:

  • 在没有地方观察执行状态的情况下导航事件驱动的环境可能很难监控和维护。

4. 使用无服务器和 Prefect 的事件驱动工作流 + ❤️

您可以将无服务器的可扩展性(方法 3)与 长官编排观察 两个都 预定的事件驱动 工作流程。无论您选择哪种云提供商,只需添加一个流装饰器并将您的无服务器函数指向 Prefect Cloud URL,您就可以为事件驱动的无服务器工作流添加重试、缓存和可观察性。您还可以利用 Prefect 块来安全地存储机密和配置数据并发送自定义通知。

要了解如何在实践中实现该模式,请参阅 我们以前的帖子 使用 Prefect、AWS Lambda 和无服务器框架。

[

使用 AWS Lambda、Prefect 和 GitHub Actions 的事件驱动数据管道

忘记传感器和 DAG。根据事件运行您的流程。

媒体网

](/the-prefect-blog/event-driven-data-pipelines-with-aws-lambda-prefect-and-github-actions-b3d9f84b1309)

下一步

这篇文章讨论了计划和事件驱动工作流的各种用例。我们查看了各种实现的优缺点,并链接了一个食谱,展示了如何在实践中使用它。

如果您想谈论您的计划和事件驱动的工作流程或询问任何问题,您可以通过我们的 社区松弛 .

快乐的工程!

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明

本文链接:https://www.qanswer.top/22378/57120709

posted @ 2022-09-07 09:57  哈哈哈来了啊啊啊  阅读(166)  评论(0编辑  收藏  举报