Akka 在Flink中使用参与者系统

Akka 在Flink中使用参与者系统,akka,apache-flink,akka-http,flink-streaming,Akka,Apache Flink,Akka Http,Flink Streaming,我有几个使用akka http的库,用于处理IO和大量数据。现在。我有一个Flink应用程序,在那里我需要使用这些库 如何在我的flink应用程序中使用通用的演员系统?我的意思是,AFAIU、flink应用程序将被分发,同样的管道可能最终在多个JVM上创建多个参与者系统。同样,同一个JVM也可以在多个管道之间共享,在这种情况下,拥有多个参与者系统意味着拥有大量线程 我认为这是个问题,对吗?如果是的话,我如何避免这个问题?更具体地说,是否有一种方法可以在同一JVM上的应用程序之间共享actor系统

我有几个使用akka http的库,用于处理IO和大量数据。现在。我有一个Flink应用程序,在那里我需要使用这些库

如何在我的flink应用程序中使用通用的演员系统?我的意思是,AFAIU、flink应用程序将被分发,同样的管道可能最终在多个JVM上创建多个参与者系统。同样,同一个JVM也可以在多个管道之间共享,在这种情况下,拥有多个参与者系统意味着拥有大量线程


我认为这是个问题,对吗?如果是的话,我如何避免这个问题?更具体地说,是否有一种方法可以在同一JVM上的应用程序之间共享actor系统?我知道Flink有一种方法可以使用获得相同的执行上下文。

你是对的;在Operators中创建actor系统实例最终会导致在同一JVM中有多个actor系统实例,而且代价高昂。我建议您根据JVM使用单例模式来实例化定制的actor系统。例如:
objectakkaprovider{lazy val instance=ActorSyste()}
。。。但您应该关心您正在使用的参与者路径,因为正如您所提到的,您可以从一个操作符获得多个指令,并且在该操作符中使用一个简单的静态名称来创建参与者(使用相同的名称)将失败;因为Flink在内部使用Akka,所以您应该注意类加载问题,因为应用程序和Flinks依赖项中的Akka lib不匹配。我知道Flink1.4已经改变了它的类加载策略和作业机制,应该可以解决这个问题!但我还没有经历过。