在实践中(而非理论上),小批量与实时流有什么区别?从理论上讲,我理解迷你批次是在给定时间范围内进行批处理的东西,而实时流更像是在数据到达时执行某些操作,但我最大的问题是为什么不使用带有 epsilon 时间范围(例如一毫秒)的迷你批次或者我想了解为什么其中一个解决方案比其他解决方案更有效?
我最近遇到一个示例,其中小批量 (Apache Spark) 用于欺诈检测,实时流 (Apache Flink) 用于欺诈预防。有人还评论说小批量不会是预防欺诈的有效解决方案(因为目标是防止交易发生)现在我想知道为什么小批量(Spark)不会那么有效?为什么以 1 毫秒延迟运行小批量没有效果?批处理是一种无处不在的技术,包括操作系统和内核 TCP/IP 堆栈,其中磁盘或网络的数据确实被缓冲,那么这里有什么令人信服的因素可以说一个比另一个更有效呢?
免责声明:我是 Apache Flink 的提交者和 PMC 成员。我熟悉Spark Streaming的整体设计,但不了解其内部细节。
Spark Streaming实现的小批量流处理模型的工作原理如下:
- 流的记录被收集在缓冲区中(小批量)。
- 定期使用常规 Spark 作业处理收集的记录。这意味着,对于每个小批量,都会调度并执行完整的分布式批处理作业。
- 当作业运行时,会收集下一批的记录。
那么,为什么每 1ms 运行一次小批量并不有效呢?很简单,因为这意味着每毫秒安排一个分布式批处理作业。尽管 Spark 在调度作业方面非常快,但这有点太多了。它还会显着降低可能的吞吐量。如果操作系统或 TCP 中使用的批处理技术的批次变得太小,则它们也无法正常工作。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)