Sobes.tech
Junior — Middle

Come si può determinare il fatto che un messaggio è stato letto in Kafka?

sobes.tech AI

Risposta dell'AI

In Kafka, il fatto che un messaggio sia stato letto viene determinato tramite gli offset nelle partizioni del topic. Ogni consumer tiene traccia fino a quale offset ha letto in ogni partizione.

Per determinare che un messaggio è stato letto, bisogna:

  • Assicurarsi che il consumer abbia elaborato con successo il messaggio.
  • Confermare (commit) l'offset di quel messaggio in Kafka, cioè informare il broker che tutti i messaggi fino a quell'offset sono stati elaborati.

In Go, usando un client Kafka (ad esempio, sarama o confluent-kafka-go), è possibile effettuare un commit esplicito degli offset dopo aver elaborato i messaggi. Se l'offset è confermato, il messaggio è considerato letto e non verrà consegnato nuovamente a questo consumer.

Esempio con sarama (semplificato):

consumer.MarkMessage(msg, "") // Segna il messaggio come letto
consumer.CommitOffsets()       // Conferma gli offset

In questo modo, il fatto che un messaggio sia stato letto è un commit riuscito dell'offset in Kafka.