2017-01-22 1 views
8

Gibt es in Kafka Streams integrierte Funktionen, mit denen ein einzelner Eingabestream dynamisch in mehrere Ausgabestreams verbunden werden kann? KStream.branch ermöglicht Verzweigungen basierend auf echten/falschen Prädikaten, aber das ist nicht ganz das, was ich will. Ich würde jedes eingehendes Protokoll wie das Thema bestimmen es zur Laufzeit gestreamt wird, zum Beispiel ein Protokoll {"date": "2017-01-01"} wird zum Thema gestreamt wird topic-2017-01-01 und ein Protokoll {"date": "2017-01-02"} wird zum Thema topic-2017-01-02 gestreamt werden.Dynamische Verbindung eines Kafka-Eingabestreams mit mehreren Ausgabeströmen

Ich könnte forEach auf dem Strom anrufen, dann an einen Kafka-Hersteller schreiben, aber das scheint nicht sehr elegant. Gibt es einen besseren Weg, dies innerhalb des Streams-Frameworks zu tun?

+0

Was meinst du mit "basierend auf einer Zeichenfolge" - BTW: 'KStream.branch' nimmt mehrere Prädikate (Ihre Frage zeigt, dass Sie dies verpasst haben). So sollte "Zweig" erlauben, zu tun, was Sie wollen. Vielleicht können Sie ein Datenbeispiel geben? –

+2

Ich sollte klarer sein. Mir ist bewusst, dass es mehrere Prädikate braucht - das wäre eine gute Lösung, wenn ich eine feste Anzahl von Themen hätte, die ich streamen möchte. Was ich jedoch tun möchte, ist, in Themen namens 'foo- {date}' zu schreiben. – kellanburket

Antwort

4

Wenn Sie Themen basierend auf Ihren Daten dynamisch erstellen möchten, erhalten Sie im Moment 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 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 der richtigen Konfiguration zu erstellen. Siehe https://cwiki.apache.org/confluence/display/KAFKA/KIP-4+-+Command+line+and+centralized+administrative+operations

+0

Können Sie uns einen Link zu den dynamischen Themen Routing-Pläne geben - ich möchte den Fortschritt verfolgen - danke – AutomatedMike

+0

https://issues.apache.org/jira/browse/KAFKA-4936 –

Verwandte Themen