A arquitetura orientada a eventos facilita que os sistemas respondam a eventos da vida real, como quando o perfil do usuário é atualizado. Esta postagem ilustra a construção de aplicativos reativos orientados a eventos que lidam com perda de dados combinando Spring WebFlux, Apache Kafka e Dead Letter Queue. Quando usados juntos, eles fornecem o framework para criar sistemas tolerantes a falhas, resilientes e de alto desempenho, que são importantes para grandes aplicativos que precisam lidar com volumes massivos de dados de forma eficiente.
Recursos Utilizados neste Artigo
- Spring Webflux: Ele fornece um paradigma reativo que depende de retroalimentação 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 dos produtores e consumidores do Kafka.
- Fila de Mensagens Mortas (DLQ): Uma DLQ armazena mensagens temporariamente que não puderam ser processadas por diversos motivos. As mensagens da DLQ podem ser posteriormente usadas para reprocesar mensagens a fim de evitar perda de dados e tornar o processamento de eventos resiliente.
Produtor Reativo do Kafka
Um produtor Reactive Kafka envia mensagens em paralelo e não bloqueia outras threads durante a publicação. É benéfico quando há grande quantidade de dados a ser processada. Ele se integra bem com o Spring WebFlux e lida com a contra pressão dentro das arquiteturas de microsserviços. Essa integração ajuda não apenas no processamento de mensagens grandes, mas também na gestão eficiente de recursos na nuvem.
O produtor reativo Kafka mencionado acima pode ser encontrado no GitHub.
Consumidor Reactive Kafka
O Consumidor Reactive Kafka consome mensagens do Kafka sem bloqueio e mantém alta taxa de transferência. Ele também suporta o gerenciamento de contra pressão e se integra perfeitamente com o WebFlux para processamento de dados em tempo real. O pipeline do consumidor reativo gerencia os recursos de forma eficiente e é altamente adequado para aplicações implantadas na nuvem.
O consumidor reativo Kafka mencionado acima pode ser encontrado no GitHub.
Fila de Mensagens Indesejadas (DLQ)
Um DLQ é um tópico simples do Kafka que armazena mensagens enviadas pelos produtores e que não conseguiram ser processadas. Em tempo real, precisamos que os sistemas estejam funcionais sem bloqueios e falhas, e isso pode ser alcançado redirecionando tais mensagens para a Fila de Mensagens Indesejadas na arquitetura orientada a eventos.
Vantagens da Integração da Fila de Mensagens Indesejadas
- Ele 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 tantas 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 conforme mostrado abaixo:
Um Manipulador da 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 orientadas a eventos resilientes, tolerantes a falhas e eficientes. Os produtores reativos garantem a publicação de mensagens não bloqueantes; por outro lado, os consumidores reativos processam mensagens com backpressure, melhorando a responsividade. O DLQ fornece um mecanismo de fallback que evita interrupções e previne a perda de dados.
A arquitetura acima garante a isolação de falhas no sistema e ajuda na depuração, o que pode ser ainda mais melhorado para aplicações.
O código de referência acima pode ser encontrado no produtor do GitHub e no consumidor do GitHub.
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