7

W naszym projekcie mamy zadanie strumieniowania Flink (1.1.3), które czyta z jednej kolejki kafka, wykonuje transformację funkcji mapy i zapisuje do kolejnej kolejki.Kolizja wersji Akka między Flink i Play 2.5

To działało dobrze, dopóki nie wprowadziliśmy wychodzącego żądania REST jako części przepływu. W tym celu użyliśmy PlayFramework WSClient (jak to jest stosowane w innych miejscach naszego stosu), i stworzył go w kodzie w ten sposób:

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

To działało dobrze lokalnie, ale podczas wdrażania go i prowadzenie w klastrze, mam ten wyjątek:

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) 

Dochodzenie do niego, i zakłada to zderzenie między Akka 2.3.x (wniesionej przez Flink 1.1.x) i Akka 2.4.x (wniesionej przez PlayFramework).

Uaktualniliśmy klaster Flink do wersji 1.3.1 (jak również zależność naszego kodu od Flink), zakładając, że rozwiąże to problem. Ale wydaje się, że ten sam problem utrzymuje się.

Każdy pomysł na to, co może być przyczyną tego?

+0

Flink 1.3.1 nadal używa Akka 2.3 (dobrze technicznie niestandardowy 2.3 build o nazwie flakka). –

+0

@ChesnaySchepler, biorąc pod uwagę, że Flink 1.3.1 używa własnej niestandardowej wersji akka (flaka), dlaczego miałaby nastąpić kolizja z Play, która szuka akki na ścieżce? – JoefGoldstein

+0

Wystarczy zaktualizować. Zrobiłem sbt 'whatDependsOn" com.typesafe.akka "" akka-actor_2.11 "" 2.3.7 "' i nie przyniosło żadnych wyników. – JoefGoldstein

Odpowiedz

1

Jedynym sposobem rozwiązania tego konfliktu zależności jest relocating the conflicting classes into a different namespace.

+0

Biorąc pod uwagę, że klasy będące w konflikcie znajdują się w akka-actorze, co jest zależne od Play, będę również musiał śledzić strukturę gry i wszystkie nasze "wspólne" biblioteki, które od niej zależą. To będzie miało bardzo poważny efekt kaskadowy. Czy to jedyna opcja? – JoefGoldstein

+0

Jak już wspomniałem w komentarzu do mojego pierwotnego pytania, Flink 1.3.1 technicznie cienie akka (używając zamiast tego "flakka"), więc samo w sobie powinno rozwiązać problem, chociaż tak nie jest. – JoefGoldstein

+0

Wszelkie aktualizacje dotyczące tego problemu? – victtim

Powiązane problemy