“…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!!
暂无评论内容