Arquitetura orientada a eventos facilita sistemas para responder a eventos da vida real, como quando o perfil do usuário é atualizado. Esta postagem ilustra a construção de aplicações reativas orientadas a eventos que lidam com perda de dados combinando Spring WebFlux, Apache Kafka e Fila de Mensagens Mortas. Quando usados juntos, esses fornecem o framework para criar sistemas tolerantes a falhas, resilientes e de alto desempenho que são importantes para grandes aplicações que precisam lidar com volumes massivos de dados de forma eficiente.
Recursos Usados neste Artigo
- Spring Webflux: Ele fornece um paradigma reativo que depende de pressão de retorno não bloqueante para o processamento simultâneo de eventos.
- Apache Kafka: Produtores e consumidores reativos do Kafka ajudam na construção de pipelines de processamento competentes e adaptáveis.
- Fluxos Reativos: Eles não bloqueiam a execução dos fluxos de produtores e consumidores do Kafka.
- Fila de Mensagens Mortas (DLQ): Uma DLQ armazena mensagens temporariamente que não puderam ser processadas devido a vários motivos. As mensagens da DLQ podem ser posteriormente usadas para reprocesar mensagens para evitar perda de dados e tornar o processamento de eventos resiliente.
Produtor de Kafka Reativo
Um Produtor Reativo Kafka envia mensagens em paralelo e não bloqueia outras threads durante a publicação. É benéfico onde há grande quantidade de dados a serem processados. Ele se integra bem com o Spring WebFlux e lida com a contra pressão dentro de arquiteturas de microsserviços. Essa integração ajuda não apenas no processamento de grandes mensagens, mas também na gestão eficiente de recursos na nuvem.
O produtor reativo Kafka mencionado acima pode ser encontrado no GitHub.
Consumidor Reativo Kafka
O Consumidor Reativo Kafka recebe mensagens do Kafka sem bloqueio e mantém alta taxa de transferência. Ele também suporta o tratamento de contra pressão e se integra perfeitamente com o WebFlux para o processamento de dados em tempo real. O pipeline do consumidor reativo gerencia bem os recursos e é altamente adequado para aplicações implantadas na nuvem.
O consumidor reativo Kafka mencionado acima pode ser encontrado no GitHub.
Fila de Cartas Mortas (DLQ)
Um DLQ é um tópico simples do Kafka que armazena mensagens enviadas por produtores e que não conseguem ser processadas. Em tempo real, precisamos que os sistemas sejam funcionais sem bloqueios e falhas, e isso pode ser alcançado redirecionando tais mensagens para a Fila de Mensagens Não Processadas na arquitetura orientada a eventos.
Benefícios da Integração da Fila de Mensagens Não Processadas
- Fornece um mecanismo de fallback para evitar interrupções no fluxo de mensagens.
- Permite a retenção de dados não processados e ajuda a evitar a perda de dados.
- Armazena metadados para falhas, o que eventualmente ajuda na análise da causa raiz.
- Fornece várias tentativas para processar mensagens não processadas.
- Desacopla o tratamento de erros e torna o sistema resiliente.
As mensagens com falha podem ser enviadas para a DLQ a partir do código do produtor como mostrado abaixo:
Um Manipulador de DLQ precisa ser criado no consumidor reativo conforme mostrado abaixo:
Conclusão
A incorporação do DLQ com um produtor e consumidor reativos ajuda a construir aplicações resilientes, tolerantes a falhas e eficientes orientadas a eventos. Os produtores reativos garantem a publicação de mensagens não bloqueantes; por outro lado, os consumidores reativos processam mensagens com backpressure, melhorando a capacidade de resposta. O DLQ fornece um mecanismo de fallback que evita interrupções e previne a perda de dados.
A arquitetura acima garante a isolamento de falhas do sistema e auxilia na depuração, o que pode ser posteriormente abordado para melhorar as aplicações.
O código de referência acima pode ser encontrado no GitHub do produtor e no GitHub do consumidor.
Mais detalhes sobre o produtor e consumidor reativos podem ser encontrados em ReactiveEventDriven. Spring Apache Kafka documenta mais informações sobre o DLQ.
Source:
https://dzone.com/articles/reactive-event-driven-app-with-dead-letter-queue