2016-08-24 5 views
1

Ich habe den folgenden Anwendungsfall: Log-Dateien, die von einer einzigen Datenquelle kommt, um zu einem Kafka-Thema (Sagen Topic 1). Es gibt einen Verbraucher, der daraus liest und in das json-Format konvertiert und in ein anderes Thema zurückschreibt (Thema 2). Ein anderer Verbraucher, der Daten in JSON erwartet, liest aus Thema 2 andere Änderungen und schreibt in ein anderes Thema zurück (Thema 3).In Kafka, kann ich ein einzelnes Kafka-Thema erstellen und mehrere Produzenten schreiben

Meine Frage ist, anstatt 3 verschiedene Themen zu erstellen, kann ich ein einzelnes Thema erstellen und diese mehreren Produzenten zum selben Thema schreiben lassen? Woher weiß mein Konsument, von welcher Partition gelesen werden soll, da eine Gruppen-ID für einen Produzenten nicht festgelegt werden kann? Eine Lösung, die ich von SO gelernt habe, ist, Partitionen zu erstellen und jeden Produzenten dazu zu bringen, auf eine bestimmte Partition zu schreiben. Problem bei diesem Ansatz ist, dass sich die Anzahl der Produzenten und Konsumenten ändern kann und das Ändern des Themas nicht erwünscht ist. Bitte um Rat.

+1

Was ist mit Ihrer Vorgehensweise falsch? Ich würde dringend empfehlen, verschiedene Nachrichtentypen innerhalb eines Themas nicht zu mischen. – TobiSH

+0

@TobiSH Mit dem derzeitigen Ansatz müsste ich viele Themen erstellen und ich mache mir nur Sorgen um zu viele Themen und zu einem bestimmten Zeitpunkt werden nur wenige Themen einfach tot sein es kann vorübergehend verwendet werden. – AnswerSeeker

Antwort

1

Da einige bereits kommentiert haben, sollten Sie nicht verschiedene Arten von Schemas zum einzelnen Thema schieben. Anzahl der Themen in Kafka ist kein Problem. Sie können eine bestimmte Nomenklatur verwenden, um sie zu verwalten. wie "topic1", "topic1_json", "topic1_modification".

Wenn Ihr Anwendungsfall unüberschaubare Liste der Themen haben, können gleiche Verbraucher lesen Sie alle json Themen & Sie nicht die Dosierung von gleichen Schema Ereignissen an Zieldateisystem soll. Dann können Sie unten folgen.

Erstellen Sie ein Objekt mit einem generischen Schema oder richten Sie eine Schema-Registrierung ein (siehe confluent schema registry). Wo alle Ihre Schemas als subRecord OR-Datensatz passt, wird die Schemainformationen enthalten. Erstellen Sie dann ein einzelnes Thema für alle JSON-Antworten (z. B. topic_json_generic). Nachdem Sie die Daten von "topic1" gelesen haben, drücken Sie "topic_json_generic". Ähnlich für das weitere Thema. Auf Verbraucherebene können Sie damit umgehen, was mit welchem ​​Objekttyp zu tun ist.

+0

Vielen Dank für die Antwort. +1 für die konfluente Schemaregistrierung Ich werde diese Lösung versuchen. – AnswerSeeker

Verwandte Themen