在Apache Spark 2.3中,我们将介绍结构化流处理的低延迟连续处理模式

介绍Apache Spark 2.3中结构化流式处理的低延迟连续处理模式 – Databricks博客的翻译。

这本书是抄译的,不能保证内容的准确性。有关准确的内容,请参阅原文。
请注意,这篇文章是2018年的。

可以在Databricks Runtime 4.0中使用。

在Databricks中导入笔记本。

由于几个原因,Apache Spark 2.0将结构化流从其高级API中分离出来并将其作为批处理处理。首先,这样做简化了API的使用体验。API不再需要考虑批处理。其次,开发人员可以将流处理作为无限表来处理,并且可以像操作静态表一样查询。

在本文中,我们将介绍如何使用连续处理模式以及开发人员如何利用它来描述具有毫秒级低延迟要求的连续流应用程序的优点和用法。让我们从激励性的场景开始。

低延迟的场景

希望建立一个实时的流程来识别具有不当行为的信用卡交易。理想情况下,一旦嫌疑人刷卡,我们就希望立即识别并拒绝不正交易。然而,为了不惹怒客户,我们不想延迟正确的交易。这意味着我们必须对我们的流程的端到端延迟设置严格的上限。由于交易中还包含其他延迟因素,所以流程必须能够在10-20毫秒内处理每笔交易。

让我们在结构化流中构建这个流水线。假设有一个名为isPaymentFlagged的用户定义函数,可以识别出不合法的交易。为了最小化延迟,我们使用0秒处理时间触发器来指示Spark尽可能快地启动每个微批处理,以确保没有延迟。从高层上看,查询将变成以下形式:

payments \
  .filter("isPaymentFlagged(paymentId)") \
  .writeStream \
   {...}
  .trigger(processingTime = "0 seconds") \
  .start()

唱片流通过Spark花费了超过100毫秒!在许多流水线中,这可能没有问题,但在这个用例中不够。连续处理模式(Continuous Processing mode)是否能解决问题呢?

payments \
  .filter("isPaymentFlagged(paymentId)") \
  .writeStream \
   {...}
  .trigger(continuous = "5 seconds") \
  .start

通过这一切,达到了低于1毫秒的延迟,并且实现了两位数的改善,低于目标延迟!为了理解为什么微批处理的延迟如此高,连续处理是如何发挥作用的,我们需要深入了解结构化流引擎的细节。

小批量处理

最终,从源头可以利用事件到输出被写入到目的地这段时间,最佳情况下会产生100毫秒的延迟。

为了方便利用已经经过优化的Spark SQL现有的批处理引擎,在这个微批处理引擎中开发了结构化流。通过这个引擎,我们可以以100毫秒的延迟实现高吞吐量。在过去几年中,通过与数千名开发人员合作处理数百个不同的使用案例,我们了解到对于ETL和实时监控等实践工作负载来说,毫秒级的延迟已经足够了。然而,在某些工作负载中,更低的延迟可以带来更多的好处,这也成为连续处理模式开发的动力。接下来让我们来看一下其工作原理。

连续处理

当源头中的事件可用时,它会立即被处理并写入到缓冲区,因此端到端延迟只有几毫秒。

此外,查询的进度将使用著名的Chandy-Lamport算法创建检查点。特殊的标记记录将被插入到所有任务的输入数据流中。我们将它们称为“时期标记(epoch marker)”,并将它们之间的间隔称为“时期(epoch)”。当标记遇到任务时,任务会异步地向驱动程序报告最后处理的偏移量。当驱动程序收到来自所有任务写入的偏移量后,它会将其写入上述的先前写入日志中。由于检查点创建完全是异步处理的,任务可以继续处理而不被打扰,并提供一致的毫秒级延迟。

Apache Spark 2.3.0 在实验中进行了发布试验。

Apache Spark 2.3.0中,该连续处理模式是一项试验性功能,支持结构化流数据源的一个子集以及数据框/数据集/SQL操作。特别地,您可以使用以下条件设置连续触发器作为选项来查询。

    • Kafkaのようにサポートされているソースからの読み込み、Kafka、メモリー、コンソールのようなサポートされているシンクへの書き込み(メモリーやコンソールはデバッグに適しています)。

 

    • mapのようなオペレーション(例: select、where、map、flatMap、filterのような選択、プロジェクション)のみを含む。

 

    集計関数、current_timestamp()やcurrent_date()のような現在時刻ベースの関数以外のSQL関数を含む。

请参阅以下内容以获取详细信息。

    • 現在の実装と制限の詳細については、Structured Streaming programming guide

ミリ秒レーテンシーでのモデル予測をデモするSpark Summit Keynote Demo

总结

Apache Spark 2.3的发布使开发者能够根据延迟的要求选择连续模式或微批处理模式中的任一流式处理模式。默认的结构化流式处理模式(微批处理)提供了适应许多实时流式应用程序的可接受的延迟,但如果有毫秒级的延迟需求,则可以选择连续模式。

请在 Databricks 中导入此 Continuous Processing 模式的笔记本并进行确认。

Databricks 免费试用

Databricks 免费试用

广告
将在 10 秒后关闭
bannerAds