Akka streams vs Apache Flink



在探索Akka流时,我还发现了Apache Flink,它是流处理引擎。Akka流实现反应流并支持背压。

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

Akka Streams是一个实现反应流规范的库。

Apache Flink是一个流媒体引擎。

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

您仍然可以通过使用StreamRefs分发基于Akka Streams的应用程序,尽管您需要在代码中明确执行此操作,并且需要运行Akka ClusterApache Flink已经管理了一个集群,所以您不需要在代码中显式地这样做(尽管您仍然需要设置和运行集群来向其提交作业(Apache Flink内置了智能,可以接收作业并以最佳方式执行。尽可能并行/分布式执行。Akka Streams无法做到这一点。

Apache Flink流处理旨在实现end2end在失败时一次处理语义。在Akka Streams中,需要在代码中明确实现此类保证。

Akka Streams作为响应流规范的实现完全是关于异步和内存绑定处理的。例如,Akka HTTP构建在Akka Streams之上,因此实现了HTTP协议的非常高效和轻量级的客户端和服务器端。

Akka Streams实现异步非阻塞背压(根据反应流规范(,以保证执行过程中的内存有界性Apache Flink也有一个背压机制,尽管它的实现方式不同。

Akka Streams作为反应流规范的实现,可以与RxJava或Project Reactor等其他实现进行互操作Apache Flink不是任何更广泛标准的一部分。

我想说,选择Apache Flink的主要原因是其附带的一次性保证和自动分发。否则,Akka Streams是一个非常强大的API,执行模型更简单。

编辑:可能值得一提的是Alpakka项目,该项目为Akka Streams带来了许多技术,使它们可以插入到基于反应流的处理中。

我不是Akka Streams的专家,但据我所知,主要区别在于Flink提供开箱即用的处理分发,而Akka Streams没有,因为它是为在单个节点上处理数据而设计的。

两者的相似之处在于,它们都提供流处理功能,从这个意义上讲,它们可能具有相似的功能。

但是,Flink有多个额外的模块,如SQL、CEP或机器学习,您在Akka Streams中无法获得这些模块。此外,Flink提供故障安全和状态恢复,我不确定Akka Streams中是否存在开箱即用的功能。

另一方面,设置Akka Streaming将需要更少的工作,因为你不需要关心设置JobManager&TaskManager,但你可以简单地创建一个Java/Scala应用程序,dockerize&把它放在某个地方。

因此,你应该问自己的主要问题是,如果你正在处理的数据足够大,需要在多个节点上进行处理,那么除了Flink,你真的别无选择(只是在Akka Streams vs.Flink的场景中(。然而,如果你要处理的数据可以在单个节点上处理,那么你应该评估故障安全性;邮件传递保证您需要。在一般情况下,使用Akka Streams可能更容易上手,但在应用程序的产品化方面,Flink可能会取而代之。

相关内容

  • 没有找到相关文章