2016-11-06 12 views
0

Ich habe eine Anforderung, Nachrichten von einem Thema zu lesen, Stapel sie und schieben Sie den Stapel auf ein externes System. Wenn der Stapel aus irgendeinem Grund fehlschlägt, muss ich denselben Satz von Nachrichten erneut verwenden und den Vorgang wiederholen. Für jeden Stapel werden die Off- und Offsets für jede Partition in einer Datenbank gespeichert. Um dies zu erreichen, erstelle ich einen Kafka-Consumer pro Partition, indem ich dem Leser eine Partition zuweise, basierend auf den gespeicherten Offsets, suchen die Konsumenten nach dieser Position und beginnen mit dem Lesen. Ich habe das automatische Commit deaktiviert und setze keine Offsets vom Konsumenten ein. Für jeden Batch erstelle ich einen neuen Benutzer pro Partition, lese Nachrichten vom letzten gespeicherten Offset und publiziere auf dem externen System. Sehen Sie Probleme beim Nachrichtenkonsum, ohne Offsets zu verordnen und die gleiche Consumer-Gruppe für mehrere Batches zu verwenden, aber zu keinem Zeitpunkt wird mehr als ein Consumer pro Partition vorhanden sein?Nachrichten konsumieren, ohne von Kafka 10 Consumer

Antwort

1

Ihr Design scheint mir vernünftig.

Das Versenden von Offsets an Kafka ist nur ein praktischer integrierter Mechanismus in Kafka, um Offsets zu verfolgen. Es ist jedoch nicht erforderlich, sie zu verwenden - Sie können auch andere Mechanismen verwenden, um Offsets zu verfolgen (wie in Ihrem Fall eine DB zu verwenden).

Darüber hinaus, wenn Sie Partitionen manuell zuweisen, wird es sowieso keine Gruppenverwaltung geben. Daher hat der Parameter group.id keine Wirkung. Weitere Details finden Sie unter http://docs.confluent.io/current/clients/consumer.html.

Verwandte Themen