/ / Überprüfen Sie, ob die Kafka-Warteschlange leer ist - clojure, apache-kafka, clj-kafka

Überprüfen Sie, ob die Kafka-Warteschlange leer ist - clojure, apache-kafka, clj-kafka

Im Moment habe ich Funktionalität, die schreibtkoppeln Sie hundert Nachrichten in eine Kafka-Warteschlange. Aber wenn alle diese Nachrichten verbraucht sind, muss ich auch zusätzliche Funktionalität ausführen. Gibt es eine Möglichkeit, einen Listener in einer Kafka-Warteschlange zu platzieren, um benachrichtigt zu werden, wenn er geleert wurde?

Antworten:

3 für die Antwort № 1

Du könntest diese zwei Wege lösen, denke ich:

  1. Kafkas "s Antwort holen enthält ein HighwaterMarkOffset, was im Wesentlichen ein Offset des letzten istNachricht in einer Partition. Sie können überprüfen, ob Ihre Nachricht diesen Offset hat, und wenn ja, Sie haben das Ende erreicht. Dies funktioniert jedoch nicht, wenn Produzent und Konsument gleichzeitig arbeiten - der Konsument kann Nachrichten schneller konsumieren und somit früher aufhören du brauchst.
  2. Senden Sie eine "Giftpille" -Nachricht - sagen Sie, dass Sie müssenErzeuge 100 Nachrichten. Dann sendet Ihr Produzent diese 100 Nachrichten + 1 spezielle Nachricht (zum Beispiel einige UUID, aber stellen Sie sicher, dass sie unter normalen Umständen nie in Ihrer Logik erscheint), was "das Ende" bedeuten würde. Auf Verbraucherseite würden Sie prüfen, ob die empfangene Nachricht eine Giftpille ist, und herunterfahren, wenn dies der Fall ist.