loading...
Kafka BR

Kafka: produtores idempotentes

fabiojose profile image Fabio José ・2 min read

"...idempotência é a propriedade que algumas operações têm de poderem ser aplicadas várias vezes sem que o valor do resultado se altere após a aplicação inicial."


Através de uma configuração simples no produtor Kafka, pode-se alcançar a idempotência na produção de eventos, eliminando completamente a possibilidade de duplicatas nos tópicos.


Uma das grandes qualidades do Kafka é a possibilidade de configurar a confiabilidade no produtor, que permite ajustes finos para atender com maestria aos requisitos não-funcionais dos casos de uso.

Uma dessas possibilidades é o produtor idempotente. Com ele existe a garantia de que não haverá duplicatas em nível de partição.

Essa garantia entra em ação quando a seguinte propriedade é definida como true:

enable.idempotence=true

Ao habilitar a idempotência no produtor, também será mandatório definir as seguintes configurações:

acks=all
max.in.flight.requests.per.connection=5

Com este setup, cada requisição que envia lotes de eventos ao Kafka terá um identificador único.

Cada lote na requisição tem como destino uma partição e um tópico

Ao chegar no kafka, esta requisição será processada e cada lote enviado ao líderes das respectivas partições. Ao terminar isso, o ack é devolvido ao produtor.

Mas esta é uma comunicação em rede. Então o atraso em receber o ack ou qualquer outro problema poderá provocar a retentativa padrão dos produtores Kafka. Assim, ele enviará novamente a requisição identificada.

O broker ao receber novamente àquela requisição processada com sucesso, apenas devolve o ack, sem persistir novamente e assim evitando a duplicação.

Sem o produtor idempotente, o broker receberia a requisição da retentiva como se fosse uma nova, persistindo novamente o lote de eventos, causando duplicatas.


É isso pessoal!

Até o próximo!!

Posted on May 28 by:

fabiojose profile

Fabio José

@fabiojose

Someone who loves to code, to share knowledge and to be a father.

Kafka BR

Uma org com artigos técnicos sobre Kafka, todos escritos em pt_BR. Junto com nosso grupo no Telegram e no Meetup.com, buscamos compartilhar conhecimento. Meetup.com: https://www.meetup.com/pt-BR/Kafka-BR

Discussion

markdown guide
 

Parabéns pelo post Fabio.
Gostaria de saber se esse recurso resolve o problema abaixo:
Tenho uma job schedulada, e está possui 5 instancias, ambas vão produzir a mesma mensagem quando der o time, essa opção vai descartar as mensagens duplicadas? Sei que o aws sqs já faz isso.

 

Obrigado Fabricio.

Se compreendi corretamente, não. Como são produtores diferentes, logo são origens diferentes e o Apache Kafka não implementa uma funcionalidade para este fim.