Apache Kafka - KafkaStream auf Thema/partition
Ich Schreibe Kafka Verbraucher für high volume, high velocity, verteilte Anwendung. Ich habe nur ein Thema, sondern rate der eingehenden Nachrichten ist sehr hoch. Mit mehreren partition, dienen mehr Verbraucher wäre angemessen für diesen use-case. Beste Weg, Sie zu konsumieren haben mehrere stream-Leser. Nach den Unterlagen oder Proben zur Verfügung, die Anzahl der KafkaStreams die ConsumerConnector gibt basiert auf der Anzahl der Themen. Fragen, wie man mehr als eine KafkaStream Leser [auf der Grundlage der partition], so dass ich nicht unbedingt ein thread pro stream oder Lesen aus der gleichen KafkaStream in mehreren threads tun würde, das gleichzeitige Lesen von mehreren Partitionen?
Alle Erkenntnisse sind sehr geschätzt.
- Mit SimpleConsumer ist nicht eine option?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Möchte teilen, was ich gefunden von der mailing-Liste:
Die Zahl, die Sie übergeben in die topic-map-Steuerelemente, wie viele Datenströme ein Thema ist unterteilt in. In deinem Fall, wenn du in 1 übergeben, werden alle 10 Partitionen, die die Daten eingespeist werden 1 stream. Wenn Sie 2, jede der 2-streams werden die Daten aus 5 Partitionen. Wenn Sie übergeben, 11, 10 von Ihnen erhalten Daten aus 1 Trennwand und 1 stream wird nichts bekommen.
In der Regel müssen Sie Durchlaufen jeden stream in einem eigenen thread. Dies ist, weil jeder stream kann immer blockieren, wenn es kein neues Ereignis.
Beispiel-snippet:
Referenz: http://mail-archives.apache.org/mod_mbox/incubator-kafka-users/201201.mbox/%3CCA+sHyy_Z903dOmnjp7_yYR_aE2sRW-x7XpAnqkmWaP66GOqf6w@mail.gmail.com%3E
Ist der empfohlene Weg, dies zu tun ist, um eine thread-pool-also Java kann die organisation für Sie und für jeden stream die createMessageStreamsByFilter Methode gibt, die Sie verbrauchen, in eine Runnable. Zum Beispiel:
In diesem Beispiel bat ich um 6 threads Grunde, weil ich weiß, dass ich 3 Partitionen für jedes Thema und ich zählte zwei Themen, die in meiner whitelist. Einmal haben wir die Griffe des eingehenden streams können wir iterieren über Ihre Inhalte, die MessageAndMetadata Objekte. Metadaten ist wirklich nur das Thema Namen und offset. Als Sie entdeckt, Sie können es in einem einzigen thread, wenn Sie Fragen, für 1-stream statt, in meinem Beispiel 6, aber wenn Sie benötigen, parallele Verarbeitung die feine englische Art ist, starten Sie einen Testamentsvollstrecker mit einem thread für jede zurückgegebene stream.
obige code schreiben, Datensatz in der partition 1 der topic-name "- Ausgabe-Thema"