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?
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 Ссылка
Tags und Links java apache-kafka apache-kafka-streams