Junior — Middle
Wie kann man feststellen, ob eine Nachricht in Kafka gelesen wurde?
sobes.tech KI
Antwort von AI
In Kafka wird die Tatsache, dass eine Nachricht gelesen wurde, durch Offsets in den Partitionen des Themas bestimmt. Jeder Verbraucher (Consumer) verfolgt, bis zu welchem Offset er in jeder Partition gelesen hat.
Um festzustellen, dass eine Nachricht gelesen wurde, muss man:
- Sicherstellen, dass der Verbraucher die Nachricht erfolgreich verarbeitet hat.
- Das Offset dieser Nachricht in Kafka bestätigen (commit), also dem Broker mitteilen, dass alle Nachrichten bis zu diesem Offset verarbeitet wurden.
In Go, mit einem Kafka-Client (z.B. sarama oder confluent-kafka-go), kann man die Offsets nach der Verarbeitung der Nachrichten explizit bestätigen. Wenn das Offset bestätigt ist, gilt die Nachricht als gelesen und wird diesem Verbraucher nicht erneut zugestellt.
Beispiel mit sarama (vereinfachte Version):
consumer.MarkMessage(msg, "") // Nachricht als gelesen markieren
consumer.CommitOffsets() // Offsets bestätigen
Auf diese Weise ist die Tatsache, dass eine Nachricht gelesen wurde, ein erfolgreicher Commit des Offsets in Kafka.