2017-10-23 3 views
0

Ich habe ein Szenario, in dem ein Produzent endliche Anzahl von Nachrichten produziert und eine Gruppe von Verbrauchern, die zu einer Verbrauchergruppe gehören, die Nachricht konsumieren und verarbeiten.Wie kann man Kafka-Konsumenten mitteilen, dass der Kafka-Produzent komplett ist?

Was ist der ideale Weg zu alle die Verbraucher zu kommunizieren, dass der Produzent die endliche Menge von Nachrichten in die Warteschlange gestellt hat? Ich dachte an die folgenden Ansätze

  1. Sendung eine vollständige Nachricht an alle Verbraucher
  2. Producer aktualisiert den Status in einer externen db/Datei

Gibt es eine implizite Funktion innerhalb Kafka, um es zu erreichen?

Antwort

2

Kafka bietet hierfür keine Möglichkeit, da es hauptsächlich auf Streaming-Use Cases ausgerichtet ist.

Ich denke, Ihre Ideen in der richtigen Richtung sind, müssen Sie irgendwie die Produzenten ermöglichen, direkt mit den Verbrauchern zu kommunizieren, wie das natürlich erreicht eine große Zahl von Möglichkeiten sein:

  • Update externe Datei/db
  • den Verbrauchern ermöglichen, einen Rest Anruf erhalten
  • eine metaevent zum Kafka Thema schreiben, die von den Verbrauchern ignoriert wird, sondern signalisiert das Ende des Stroms
  • ...

Es gibt jedoch ein paar Stolpersteine ​​für alle diese Ansätze zu beachten.

Partitionen

Wenn Ihr Thema mehr Partitionen hat, kann man nicht einfach sendet ein Nachricht zum Thema gemacht, da dies nur eine der Partitionen zugeordnet werden. Da die Bestellung nur pro Partition garantiert ist, ist es durchaus möglich, dass der Konsument die Fertignachricht liest, bevor er Nachrichten von anderen Themen verarbeitet, die ebenfalls gelesen werden sollen, und die Verarbeitung stoppt. In diesem Fall müssen Sie sicherstellen, dass Sie ein Ereignis an jede einzelne Partition senden, und auch Ihr Consumer muss sich dieses Konzepts bewusst sein und weiterlesen, bis es für jede abonnierte Partition eine Fertigmeldung erhalten hat.

Dubletten

Gleiche Sache, wenn Sie wählen, um mit einem externen Trigger gehen, werden Sie wahrscheinlich Ihre Verbraucher sagen wollen, wie viele Ereignisse zu empfangen, bevor es fertig ist. Es gibt Fälle, in denen der Konsument Nachrichten zwar zweimal lesen könnte, wenn er abstürzt, bevor er den Lese-Offset festlegt. In diesem Fall genügt es nicht, eine Anzahl gesendeter Nachrichten zu senden, da diese Duplikate bedeuten, dass Sie Nachrichten ignorieren Am Ende. Wie bei der ersten Idee möchten Sie den letzten Offset, den Ihr Producer für jede Partition an Ihren Consumer gesendet hat, übertragen, damit er den zu lesenden Offset für jede Partition kennt.

Verwandte Themen