Flink和Play 2.5之间的Akka版本碰撞

时间:2017-07-25 08:26:15

标签: playframework akka apache-flink playframework-2.5 flink-streaming

在我们的项目中,我们有一个Flink(1.1.3)流媒体作业,它从一个kafka队列中读取,执行映射函数转换并写入另一个队列。

这一点很有效,直到我们在流程中引入了一个传出的REST请求。 为此,我们使用了PlayFramework WSClient(因为它在我们堆栈的其他位置使用),并以这种方式在代码中创建它:

  val config = new AhcWSClientConfig(wsClientConfig = WSClientConfig())
  val builder = new AhcConfigBuilder(config)
  val ahcConfig = builder.configure().build()
  new AhcWSClient(ahcConfig)(ActorMaterializer()(ActorSystem()))

这在本地运行良好,但在部署并在群集上运行时,我遇到了这个例外:

java.lang.NoSuchMethodError: akka.util.Helpers$.toRootLowerCase(Ljava/lang/String;)Ljava/lang/String;
    at akka.stream.StreamSubscriptionTimeoutSettings$.apply(ActorMaterializer.scala:491)
    at akka.stream.ActorMaterializerSettings$.apply(ActorMaterializer.scala:243)
    at akka.stream.ActorMaterializerSettings$.apply(ActorMaterializer.scala:232)
    at akka.stream.ActorMaterializer$$anonfun$1.apply(ActorMaterializer.scala:41)
    at akka.stream.ActorMaterializer$$anonfun$1.apply(ActorMaterializer.scala:41)
    at scala.Option.getOrElse(Option.scala:121)
    at akka.stream.ActorMaterializer$.apply(ActorMaterializer.scala:41)
    at com.ourstuff.etl.core.utils.web.GlobalWSClient$.generateClient(WSClientFactory.scala:32)

调查一下,我认为这是Akka 2.3.x(Flink 1.1.X带来)和Akka 2.4.x(由PlayFramework带来)之间的碰撞。

我们将Flink集群升级到1.3.1(以及我们的代码对Flink的依赖),假设这将解决问题。但同样的问题似乎仍然存在。

对于可能导致此问题的任何想法?

1 个答案:

答案 0 :(得分:1)

解决此依赖性冲突的唯一方法是relocating the conflicting classes into a different namespace