Ich möchte mehrere (in der Regel 2-10) Kafka-Themen nach außen verbinden, idealerweise mithilfe der Streaming-API. Alle Themen haben denselben Schlüssel und dieselben Partitionen. Eine Möglichkeit, dies zu tun beizutreten, ist ein KStream
für jedes Thema und Ketten Anrufe KStream.outerJoin
zu erstellen:Gibt es eine effiziente Möglichkeit, mehrere (mehr als zwei) kafka-Themen zu verbinden?
stream1
.outerJoin(stream2, ...)
.outerJoin(stream3, ...)
.outerJoin(stream4, ...)
jedoch die documentation von KStream.outerJoin
schlägt vor, dass jeder Aufruf outerJoin
seine beiden Eingänge materialisieren Ströme so das obige Beispiel würde materialisieren nicht nur Ströme 1 bis 4, sondern auch stream1.outerJoin(stream2, ...)
und stream1.outerJoin(stream2, ...).outerJoin(stream3, ...)
. Es würde viel unnötige Serialisierung, Deserialisierung und I/O im Vergleich zu dem direkten Verbinden der 4 Ströme geben. Ein weiteres Problem mit dem obigen Ansatz ist, dass die JoinWindow
nicht über alle 4 Eingangsströme konsistent wäre: ein JoinWindow
würde verwendet werden, um die Ströme 1 und 2 zu verbinden, aber dann würde ein separates Verbindungsfenster verwendet werden, um diesen Strom zu verbinden Stream 3 usw. Ich gebe zum Beispiel ein Join-Fenster von 10 Sekunden für jeden Join an und Einträge mit einem bestimmten Schlüssel erscheinen in Stream 1 bei 0 Sekunden, Stream 2 bei 6 Sekunden, Stream 3 bei 12 Sekunden und Stream 4 bei 18 Sekunden, würde das verbundene Objekt nach 18 Sekunden ausgegeben werden, was zu einer zu hohen Verzögerung führen würde. Die Ergebnisse hängen von der Reihenfolge der Joins ab, was unnatürlich erscheint.
Gibt es einen besseren Ansatz für Mehrwegeverbindungen mit Kafka?
Vielen Dank für den Hinweis. Ich werde es im Auge behalten. –