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.