1
resposta

Consumer

Teria como criar um consumer que sempre que chamado reprocessa todas as mensagens do tópico e não apenas mensagens novas?

1 resposta

Olá, Milena!

Sua pergunta é excelente e toca em um ponto fundamental do funcionamento do Kafka. A resposta é sim, é totalmente possível.

Para que um consumer reprocessa todas as mensagens de um tópico (ou a partir de uma data ou offset específico), você precisa manipular o offset do seu consumer group.

O comportamento padrão do Kafka é que o consumer group salva o último offset que consumiu para cada partição. Quando o consumer reinicia, ele continua a partir desse ponto, processando apenas as mensagens novas.

Para reprocessar todas as mensagens, você tem duas abordagens principais:

  1. Reiniciar o offset para o início do tópico (--from-beginning):
    A forma mais simples de fazer isso é usando a ferramenta de linha de comando do Kafka, o kafka-consumer-groups.sh. Você pode redefinir o offset do seu consumer group para o beginning (início) do tópico.
# Primeiro, pare o consumer que você quer resetar
# Em seguida, execute este comando para resetar o offset para o início
kafka-consumer-groups.sh --bootstrap-server <endereço_do_broker> --group <seu_consumer_group> --topic <seu_topico> --reset-offsets --to-earliest --execute

Após executar esse comando e reiniciar o seu consumer, ele começará a ler as mensagens desde a primeira.

  1. Mudar o consumer group:

Uma forma ainda mais segura e que não afeta outros consumers que estejam usando o mesmo consumer group é simplesmente iniciar a aplicação com um novo nome de consumer group. Se o Kafka não encontrar o offset para esse novo grupo, ele começará a ler desde o início por padrão (dependendo da configuração auto.offset.reset).


A primeira opção é a mais comum para reprocessamento. No entanto, é crucial que o consumer esteja parado ao redefinir o offset para evitar conflitos.

Espero que essa explicação ajude a clarear o conceito e a resolver o seu problema!