Dynamische Verbindung eines Kafka-Eingabestreams mit mehreren Ausgabeströmen

8

Ist in Kafka Streams eine Funktion integriert, die es ermöglicht, einen einzelnen Eingabestream dynamisch in mehrere Ausgabeströme zu integrieren? KStream.branch erlaubt Verzweigungen basierend auf echten / falschen Prädikaten, aber das ist nicht ganz das, was ich will. Ich möchte, dass jedes eingehende Protokoll das Thema ermittelt, zu dem es zur Laufzeit gestreamt wird, z. B. wird ein Protokoll {"date": "2017-01-01"} zum Thema topic-2017-01-01 gestreamt und ein Protokoll {"date": "2017-01-02"} wird zum Thema topic-2017-01-02 gestreamt. .

Ich könnte forEach im Stream aufrufen und dann an einen Kafka-Produzenten schreiben, aber das scheint nicht sehr elegant zu sein. Gibt es eine bessere Möglichkeit, dies innerhalb des Stream-Frameworks zu tun?

    
kellanburket 22.01.2017, 21:11
quelle

1 Antwort

4

Wenn Sie Themen basierend auf Ihren Daten dynamisch erstellen möchten, erhalten Sie momentan keine Unterstützung in Kafkas Streaming API ( v0.10.2 und früher). Sie müssen ein KafkaProducer erstellen und Ihr dynamisches "routing" selbst implementieren (zum Beispiel mit KStream#foreach() oder KStream#process() ). Beachten Sie, dass Sie synchrone Schreibvorgänge durchführen müssen, um Datenverluste zu vermeiden (die leider nicht sehr performant sind). Es gibt Pläne, die Streaming-API um dynamisches Topic-Routing zu erweitern, aber es gibt momentan keine konkrete Zeitleiste für diese Funktion.

Es gibt noch eine weitere Überlegung, die Sie berücksichtigen sollten. Wenn Sie Ihr (e) Zielthema (n) nicht im Voraus kennen und sich nur auf die sogenannte "automatische Erstellung von Themen" verlassen, sollten Sie sicherstellen, dass diese Themen mit den gewünschten Konfigurationseinstellungen (z. B. Anzahl der Partitionen) erstellt werden oder Replikationsfaktor).

Alternativ zur automatischen Erstellung von Themen können Sie auch Admin-Client verwenden (verfügbar seit v0.10.1 ), um Themen mit korrekter Konfiguration zu erstellen. Siehe Ссылка

    
Matthias J. Sax 23.01.2017, 04:32
quelle