Sobes.tech
Junior — Middle

Wie speichert der Consumer in Kafka seine Position im Datenstrom?

sobes.tech KI

Antwort von AI

In Apache Kafka speichert der Verbraucher seine Position im Datenstrom mithilfe von Offsets. Ein Offset ist die Reihenfolge Nummer der Nachricht in der Partition eines Themas.

Der Verbraucher commitet (speichert) regelmäßig den aktuellen Offset, um beim Neustart oder Fehler die Leseposition fortzusetzen. Der Commit kann automatisch (auto-commit) oder manuell erfolgen.

In Kafka-Clients für Go (z.B. sarama) wird der Offset in der Regel in einem speziellen Thema __consumer_offsets gespeichert, das von Kafka selbst verwaltet wird. Dies ermöglicht es mehreren Verbrauchern in einer Gruppe, die Lesevorgänge zu koordinieren und sicherzustellen, dass jede Nachricht genau einmal verarbeitet wird.

Beispiel für einen manuellen Offset-Commit in Go mit sarama:

partitionConsumer, _ := consumer.ConsumePartition(topic, partition, sarama.OffsetNewest)

for msg := range partitionConsumer.Messages() {
    // Nachrichtenverarbeitung
    fmt.Println(string(msg.Value))
    // Offset commit
    consumer.MarkOffset(msg, "")
}

Auf diese Weise ist die Position des Verbrauchers im Datenstrom der zuletzt bestätigte Offset, der in Kafka gespeichert wird und das Fortsetzen der Lesevorgänge ermöglicht.