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.