在结构化流引入低延迟连续处理模式在Apache 2.3火花
结构化流在Apache 2.0火花解耦micro-batch处理的高级api是有原因的。首先,它使开发人员的经验与api简单:api不需要占micro-batches。第二,它允许开发者将流视为无限表,他们可以发出查询一个静态表。
利用这一点,我们引入一个新的工作毫秒低延迟流媒体方式称为连续模式在Apache 2.3火花,现在可以在砖4.0运行时砖的一部分bob体育亚洲版统一的分析平台bob体育客户端下载。
在这个博客中,我们将说明如何使用连续处理模式,其优点,开发人员可以用它来编写连续流具有毫秒低延迟需求的应用程序。让我们先从一个激励方案。
低延迟的情况
假设我们想要构建一个实时管道标志信用卡诈骗案件。理想情况下,我们想尽快确定并否认欺诈交易罪魁祸首已经取代了他/她的信用卡。然而,我们不想推迟合法的交易,因为这将激怒顾客。这导致一个严格的上限处理端到端延迟我们的管道。考虑到还有其他在运输过程中延误,管道必须处理每笔交易在10 - 20毫秒。
让我们试着建立这个管道结构化流。假设我们有一个用户定义函数“isPaymentFlagged”,可以识别欺诈性交易。最小化的延迟,我们将使用一个0第二处理时间触发表明火花应该开始每个微批量尽可能快的,没有延迟。在高级别上,查询是这样的。
支付\。过滤器(“isPaymentFlagged (paymentId)”) \.writeStream \{…}。触发(processingTime=“0秒”)\。开始()
你可以看到完整的代码下载和进口例如笔记本电脑你的砖工作区(Community Edition使用砖)。让我们看看端到端延时。
记录正在超过100 ms流过火花!虽然这对于许多流管道,这对这个用例是不够的。我们的新连续处理模式能帮助我们吗?
支付\。过滤器(“isPaymentFlagged (paymentId)”) \.writeStream \{…}。触发(连续=“5秒”)\。开始
现在我们越来越少1毫秒延迟—提高两个数量级以上,远低于我们的目标延迟!要理解为什么这个延迟很高micro-batch处理,连续处理如何帮助,我们必须深入的细节结构流引擎。
Micro-Batch处理
结构化流在默认情况下使用micro-batch执行模型。这意味着火花流引擎定期检查流源,并运行一个批处理新数据上的查询,已经到达最后一批结束后。在一个高级,它看起来像这样。
在此体系结构中,司机检查站write-ahead-log进步通过保存记录偏移量,这可能是用于启动查询。注意,补偿范围要处理在未来micro-batch保存到日志中之前micro-batch开始为了得到确定性re-executions和端到端语义。因此,记录可在源代码可能必须等待当前micro-batch抵消前完成记录和未来micro-batch流程。在记录级别,时间是这样的。
这导致在最好的情况下,100年代的延迟毫秒之间的时间可以在事件源和输出写入到水槽。
我们最初建立结构化流与这micro-batch引擎可以轻松地利用现有的批处理引擎火花SQL已经优化了性能(参见我们的过去的博客代码生成和项目钨)。这允许我们实现的目标高吞吐量与延迟低至100 ms。在过去的几年里,与成千上万的开发者和数百种不同的用例,我们发现第二音阶延迟是足够的对于大多数实际流ETL和实时监控等工作。然而,一些工作负载(如前面提到的欺诈检测用例)受益于更低的延迟和激励我们构建连续处理模式。让我们理解这是如何工作的。
连续处理
在连续处理模式,而不是推出周期任务,火花发射一组连续阅读的长时间运行的任务,过程和写入数据。在高级别上,这样的设置和记录级时间表看起来(与上面的图进行对比micro-batch执行)。
由于事件处理和写入水槽就可用的来源,端到端延时几毫秒。
此外,查询进展被改编自著名的检查点Chandy-Lamport算法。特殊标记记录注入每个任务的输入数据流;我们称之为“时代标记”以及它们之间的差距”时代。“当遇到一个标记,一个任务,异步任务报告最后抵消处理司机。一旦司机收到书面的所有任务的补偿下沉,上述write-ahead-log写他们。自从检查点是完全异步的,任务可以继续不间断millisecond-level延迟并提供一致的。
实验在Apache火花tripwire发布
Apache火花tripwire,连续处理模式是一个实验性的特性和结构的一个子集流源和DataFrame /数据/ SQL操作支持这种模式。具体来说,您可以设置可选连续触发查询,满足下列条件:
- 读卡夫卡和支持来源写支持水槽就像卡夫卡,记忆,控制台(内存和控制台是好调试)。
- (即只有类似操作。,selections and projections like select, where, map, flatMap, filter,)
- 聚合函数以外的任何SQL函数,current-time-based功能
current_timestamp ()
和当前日期()
。
有关更多信息,请参考以下:
封闭的思想
使用Apache火花2.3的发布,开发人员可以选择使用流mode-continuous或micro-batching-depending延迟需求。虽然默认的结构流模式(micro-batching)为大多数实时流媒体应用程序提供可接受的延迟,为你millisecond-scale延迟要求,您现在可以选择连续模式。
导入该连续处理模式的笔记本在砖看到它自己。