DEV Community

Cover image for Configurando tratamento de erros no kafka com Quarkus
Aleatório
Aleatório

Posted on • Edited on

Configurando tratamento de erros no kafka com Quarkus

Java é lindo. Quarkus é lindo. [Franz] Kafka é lindo. Porém, nem tudo são flores no desenvolvimento. Acidentes acontecem e é importante conseguirmos nos preparar para eles. Hoje, nós vamos ver sobre os diferentes tipos de tratamento de exceção durante o consumo de uma mensagem Kafka pelo Quarkus.

Já vou assumir que você sabe o que é o Kafka, já manja um pouco de Quarkus e tem tudo configurado. Caso não seja o seu caso, tenho um artigo infinitop para ajudar.

O Quarkus possui 3 formas diferentes para tratar uma exceção quando no método com a anotação @Incoming: Parar de consumir mensagens, ignorar e DLQ (dead-letter queue).

Parar de consumir mensagens

Esse é o tratamento padrão. O serviço continuará funcionando normalmente. Porém, as mensagens não serão mais consumidas até que alguém intervenha na mensagem, resolva o que precisar ser resolvido e então reinicie o serviço.

Alt Text

Caso nada tenha sido configurado, será utilizado essa opção.

Ignorar

Nesse modo, caso ocorra alguma exceção, o Quarkus diz pro Kafka que conseguiu consumir corretamente a mensagem e finge que o erro nunca existiu.

Alt Text

Para configurar é muito simples. Basta adicionar o seguinte trecho no application.properties:

mp.messaging.incoming.<nome do canal>.failure-strategy=ignore
Enter fullscreen mode Exit fullscreen mode

Dead-letter queue

Nesse modo, quando ocorre uma exceção, o Quarkus ainda irá informar ao Kafka que a mensagem foi consumida, porém, irá enviar a mensagem para uma fila especial onde essas mensagens poderão ser consumidas num momento oportuno.

Alt Text

Essa é a configuração que tem mais opções, mas é bem simples de entender:

mp.messaging.incoming.<nome do canal>.failure-strategy=dead-letter-queue
mp.messaging.incoming.<nome do canal>.dead-letter-queue.topic=<nome do tópico de DLQ>
mp.messaging.incoming.<nome do canal>.dead-letter-queue.key.serializer=<caminho para o serializador da chave>
mp.messaging.incoming.<nome do canal>.dead-letter-queue.value.serializer=<caminho para o serializador do valor da mensagem>
Enter fullscreen mode Exit fullscreen mode

Por padrão, o nome do tópico será o "dead-letter-topic-" + nome do canal. Além disso, o Quarkus tentará supor o caminho para o serializador. É possível seguir o palpite dele, ou configurar manualmente. O destino está nas suas mãos.

Uma outra observação importante é que, se o tópico de DLQ não existe, então o Quarkus irá criar um novo tópico com as configurações padrões do Kafka (o que pode não ser a melhor abordagem possível).

Considerações finais

Esse é um assunto bem interessante e que eu queria ter colocado lá no outro post. Porém, achei que ficaria muita coisa.

Foi estranho fazer um post sem código, mas espero que tenham gostado!

Top comments (2)

Collapse
 
dearrudam profile image
Maximillian Arruda

Sim!!! O post ficou muito bom e bem explicativo!!! Valeu!!!

Collapse
 
jimmmisss profile image
Wesley Pereira

Massa cara, já me ajudou aqui com o artigo. Te devo uma breja