apache-flink - Akka 流与 Apache Flink

标签 apache-flink akka-stream

在探索 Akka 流时,我还遇到了流处理引擎 Apache Flink。
Akka 流实现了响应式流并支持背压。

所以如果我必须在两者之间做出决定,我应该选择哪一个?它们有何不同,有何相似之处?这里的标准应该是什么?

最佳答案

Akka Streams 是一个实现 reactive streams specification 的库.

Apache Flink 是一个流式引擎。

主要的高级区别在于,在 Apache Flink 中,您通过针对其中一个 Flink API 进行编码来创建作业,然后将该作业提交给 Apache Flink 集群。执行流处理作业的是 Apache Flink 集群。通过使用 Akka Streams,您正在创建一个独立的应用程序。从这个意义上说,Akka Streams 是两者中更轻量级的一个。

您仍然可以使用 StreamRefs 分发基于 Akka Streams 的应用程序。 ,尽管您需要在代码中明确执行此操作,并且需要运行 Akka Cluster。 Apache Flink 已经管理了一个集群,因此您无需在代码中明确地执行此操作(尽管您仍然需要设置并运行集群才能将您的作业提交到)。 Apache Flink 具有内置的智能功能,可以以最佳方式执行作业。并行化/分布式执行when possible . Akka Streams 无法做到这一点。

Apache Flink流处理旨在实现end2end exactly once processing semantics面对失败。在 Akka Streams 中,需要在您的代码中明确实现此类保证。

Akka Streams 作为 react 流规范的实现都是关于异步和内存绑定(bind)处理的。 Akka HTTP例如,它构建在 Akka Streams 之上,因此实现了一个非常高效和轻量级的 HTTP 协议(protocol)客户端和服务器端。

Akka Streams 实现异步非阻塞背压(根据 react 流规范)以保证执行期间的内存有界性。 Apache Flink 还有一个 backpressure mechanism ,尽管它的实现方式不同。

Akka Streams 作为 react 流规范的实现可以与其他实现互操作,如 RxJavaProject Reactor . Apache Flink 不属于任何更广泛的标准。

我会说选择 Apache Flink 的主要原因是它提供的一次性保证和自动化分发。否则,Akka Streams 是一个非常强大的 API,具有更简单的执行模型。

编辑:
大概值得一提的项目Alpakka这为 Akka Streams 带来了许多技术,因此它们可以插入到基于 react 流的处理中。

关于apache-flink - Akka 流与 Apache Flink,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61384492/

相关文章:

hadoop-yarn - 从 YARN 上的另一个程序启动的 Flink 作业失败,错误为 "JobClientActor seems to have died"

scala - 用于描述 Akka-stream 源的未知语法 : "#Repr"

scala - Akka流:用于自定义SourceShape的KillSwitch,可从视频文件中发射帧

playframework - 与 websocket 连接时使用 akka-stream-kafka 从 kafka Topic 获取最后一条消息

scala - FlinkML:加入 LabeledVector 的数据集不起作用

java - 弗林克 SQL : Joining Tables with timestamp in pure SQL syntax

java - 对 FLINK task slot 的困惑

java - 如何从 Akka Streams Sink 中抛出的异常中恢复?

scala - Akka 流 : How do I model capacity/rate limiting within a system of 2 related streams?

scala - 如何在 Flink 中使用多个计数器