Apache Spark 结构化流与 Apache Flink:有啥区别?
Posted
技术标签:
【中文标题】Apache Spark 结构化流与 Apache Flink:有啥区别?【英文标题】:Apache Spark Structured Streaming vs Apache Flink: what is the difference?Apache Spark 结构化流与 Apache Flink:有什么区别? 【发布时间】:2017-09-01 07:53:22 【问题描述】:我们已经讨论了以下问题:
What is the difference between Apache Spark and Apache Flink? [closed] What does “streaming” mean in Apache Spark and Apache Flink? What is the difference between mini-batch vs real time streaming in practice (not theory)?但是Spark Structured Streaming
是在Spark2.2中加入的,它为流媒体带来了很多变化,非常出色。
我们可以说Spark Strutured Streaming
是流处理还是批处理?
现在Apache Flink
和Apache Spark Structured Streaming
之间的最大区别是什么?
【问题讨论】:
【参考方案1】:目前:
Spark Structured Streaming 仍然在后台使用微批处理。然而,它支持事件时间处理,相当低的延迟(但没有 Flink那么低),支持 SQL 和对流 in 一个 API 的类型安全查询;没有区别,每个数据集都可以使用 SQL 或类型安全运算符进行查询。它具有端到端的确切语义(至少他们这么说;))。 The throughput is better than in Flink(有一些基准测试结果不同,但请看Databricks post about the results)。
在不久的将来:
Spark 连续处理模式正在进行中,它将给 Spark 带来约 1 毫秒的延迟,与 Flink 的延迟相当。但是,正如我所说,它仍在进行中。该 API 已为非批处理作业做好了准备,因此比以前的 Spark Streaming 更容易。
主要区别:
Spark 现在依赖于微批处理,而 Flink 则有预先安排好的算子。这意味着,Flink 的延迟更低,但 Spark 社区在连续处理模式下工作,这将与接收器类似(据我了解)。
【讨论】:
我不会说它支持“完整”事件时间,因为您可以提供的唯一水印是静态滞后。 同样,吞吐量更好的说法也不正确。参见例如这张幻灯片:slideshare.net/JamieGrier/… Flink 也可以实现 > 70M msgs/sec 的吞吐量。在您提供的帖子中,他们没有解释他们的任何设置,所以我不会相信任何这些数字。 他们使用 AWS,您可以简单地重新测试这些测试。 Flink 的基准测试是在自定义环境中完成的,没有机会重现它。抱歉,如果他们制定了不可重现的基准,我不能相信他们 - 重现性应该是基准的第一点 我能想到的唯一要补充的是,值得注意的是测试是在不同处理器类型的集群上运行的。 Spark 作业在“10 台 r3.xlarge 机器”上运行,根据 aws 实例类型,即 10 台“Intel Xeon E5-2670 v2 (Ivy Bridge) Processors”。 flink 作业在 10 个“Xeon E3-1230-V2”处理器上运行(在 AWS 实例类型上看不到)。根据英特尔的说法,Xeon E5-2670 v2 是 10 核(而且要贵得多)。所以集群差异是非常不同的,Spark 在视频中说他们只是拿了 Flink 提供的基准测试,它使用了一个不太强大的集群。 另外,听起来 Flink 作业必须使用处理能力来生成数据然后使用它,这与 spark 作业不同。所以这也可能是一个因素。而且我不是处理器中什么与影响这些测试更相关的专家,但差异足以使技术之间的基准比较充其量误导。以下是我找到的两种处理器类型的链接:ark.intel.com/products/65732/…ark.intel.com/products/75275/…以上是关于Apache Spark 结构化流与 Apache Flink:有啥区别?的主要内容,如果未能解决你的问题,请参考以下文章
Rails 3.1.1 HTTP 流与 Apache + Passenger
如何将 Spark 结构化流与 Kafka Direct Stream 结合使用?
Apache Spark 结构化流 (DataStreamWriter) 写入 Hive 表