2016-10-11 7 views
8

Ich habe einige grundlegenden Kafka Streaming-Code, der Datensätze von einem Thema liest, verarbeitet und Datensätze zu einem anderen Thema ausgibt.Kafka Streaming Concurrency?

Wie behandelt Kafka Streaming Nebenläufigkeit? Läuft alles in einem einzigen Thread? Ich sehe das nicht in der Dokumentation erwähnt.

Wenn es single-threaded ist, möchte ich Optionen für Multi-Thread-Verarbeitung, um hohe Datenmengen zu behandeln.

Wenn es multi-threaded ist, muss ich verstehen, wie dies funktioniert und wie mit Ressourcen umzugehen, wie SQL-Datenbankverbindungen sollten in verschiedenen Verarbeitungsthreads geteilt werden.

Ist die integrierte Streaming-API von Kafka nicht für Szenarien mit hohem Volumen im Vergleich zu anderen Optionen (Spark, Akka, Samza, Storm usw.) empfehlenswert?

Antwort

13

Wie behandelt Kafka Streaming Nebenläufigkeit? Läuft alles in einem einzigen Thread? Ich sehe das nicht in der Dokumentation erwähnt.

Dies ist ausführlich unter http://docs.confluent.io/current/streams/architecture.html#parallelism-model dokumentiert. Ich will das hier nicht wortwörtlich kopieren, aber ich möchte hervorheben, dass IMHO das Schlüsselelement zu verstehen ist von Partitionen (vgl. Kafkas Thema Partitionen, das in Kafka Streams verallgemeinert wird, um "Partitionen zu streamen" Nicht alle Datenströme, die gerade verarbeitet werden, laufen über Kafka), da derzeit eine Partition die Parallelität von Kafka (der Broker/Server-Seite) und von Stream-Processing-Anwendungen bestimmt, die die Kafka Streams-API (Client-Seite) verwenden.

Wenn es single-threaded ist, möchte ich Optionen für Multi-Thread-Verarbeitung, um große Datenmengen zu behandeln.

Verarbeitung eine Partition wird immer von einem „Faden“ nur durchgeführt werden, die Sie in Concurrency Probleme nicht ausgeführt werden gewährleistet. Aber ...

Wenn es multi-threaded ist, muss ich verstehen, wie dies funktioniert und wie mit Ressourcen umzugehen, wie SQL-Datenbankverbindungen sollten in verschiedenen Verarbeitungsthreads geteilt werden.

... weil Kafka einem Thema erlaubt, viele Partitionen zu haben, erhalten Sie parallele Verarbeitung. Wenn ein Thema beispielsweise 100 Partitionen aufweist, können bis zu 100 Streamtasks (oder etwas zu vereinfacht: bis zu 100 verschiedene Computer, auf denen jeweils eine Instanz Ihrer Anwendung ausgeführt wird) dieses Thema parallel verarbeiten. Auch hier würde jeder Stream-Task exklusiven Zugriff auf 1 Partition erhalten, die er dann verarbeiten würde.

Ist Kafkas integrierte Streaming-API nicht für High-Volume-Szenarien im Vergleich zu anderen Optionen (Spark, Akka, Samza, Storm, etc.) empfohlen?

Kafkas Stream-Processing-Engine auf jeden Fall zu empfehlen und auch für hochvolumige tatsächlich verwendete Szenarien in der Praxis umgesetzt. Arbeiten zum vergleichenden Benchmarking werden noch durchgeführt, aber in vielen Fällen erweist sich eine Anwendung, die auf Kafka Streams basiert, als schneller. Einen Artikel von LINE Corp, einer der größten sozialen Plattformen in Asien (220 Millionen Nutzer), finden Sie unter LINE engineer's blog: Applying Kafka Streams for internal message delivery pipeline. Dort wird beschrieben, wie Kafka und die Kafka Stream API in der Produktion verwendet werden, um Millionen von Ereignissen pro Sekunde zu verarbeiten.

+1

Link zu LINE Ingenieur Blog ist in der Zwischenzeit gebrochen. Sie können es hier finden: https://engineering.linecorp.com/de/blog/detail/80 – Esk

+0

Danke, aktualisiert! –

+0

@ MichaelG.Noll Was ist mit der Freigabe von Ressourcen zwischen mehreren Threads einer einzelnen Instanz von Streams-Anwendung. Wenn mein ValueMapper nicht Thread-sicher ist, ist es dann in Ordnung, eine App-Instanz mit mehreren Threads auszuführen? – mrnakumar

4

Die kstreams Config num.stream.threads Sie die Anzahl der Threads von 1. jedoch außer Kraft setzen können, kann es vorteilhaft sein, einfach mehrere Instanzen von Streaming-App zu laufen, mit allen von ihnen die gleiche Verbrauchergruppe läuft . Auf diese Weise können Sie beliebig viele Instanzen hochfahren, um eine optimale Partitionierung zu erhalten.

Verwandte Themen