在我們的項目中,我們有一個Flink(1.1.3)流作業,它從一個kafka隊列讀取數據,執行映射函數轉換並寫入另一個隊列。Flink和Play之間的Akka版本衝突2.5
直到我們將流出的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)
調查到的話,我認爲這是阿卡2.3.x版本(由弗林克1.1.X帶來的)和阿卡的2.4.x(由PlayFramework帶來的)之間的衝突。
我們將Flink集羣升級到1.3.1(以及我們的代碼對Flink的依賴),假設這將解決問題。但同樣的問題似乎仍然存在。
任何想法仍然可能導致這一點?
Flink 1.3.1仍然使用Akka 2.3(技術上定製的2.3版本叫做flakka)。 –
@ChesnaySchepler考慮到Flink 1.3.1使用它自己的定製版本的akka(flaka)爲什麼會在Play遊戲中碰撞,在clathpath中尋找akka? – JoefGoldstein
只是爲了更新。 我已經跑過了what'pepeOn「com.typesafe.akka」「akka-actor_2.11」「2.3.7」' 並且它沒有產生任何結果。 – JoefGoldstein