Sobes.tech
Junior — Middle

Como é que o consumidor no Kafka guarda a sua posição no fluxo de dados?

sobes.tech IA

Resposta da IA

No Apache Kafka, o consumidor guarda a sua posição no fluxo de dados usando deslocamentos (offsets). Offset é o número de ordem da mensagem na partição do tópico.

O consumidor faz periodicamente um commit (salvamento) do offset atual, para poder retomar a leitura do ponto correto em caso de reinício ou falha. O commit pode ser automático (auto-commit) ou manual.

Nos clientes Kafka em Go (por exemplo, sarama), o offset geralmente é guardado num tópico especial __consumer_offsets, gerido pelo próprio Kafka. Isto permite que vários consumidores num grupo coordenem a leitura e garantam que cada mensagem seja processada exatamente uma vez.

Exemplo de commit manual de offset em Go usando sarama:

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

for msg := range partitionConsumer.Messages() {
    // processamento da mensagem
    fmt.Println(string(msg.Value))
    // commit do offset
    consumer.MarkOffset(msg, "")
}

Assim, a posição do consumidor no fluxo é o último offset comprometido, que é guardado no Kafka e permite retomar a leitura a partir do local correto.