Построение реактивного событийно-ориентированного приложения с очередью мертвых сообщений

Архитектура, ориентированная на события, облегчает системам реагировать на события реальной жизни, такие как обновление профиля пользователя. В этом сообщении рассматривается создание реактивных приложений, ориентированных на события, которые обрабатывают потерю данных путем комбинирования Spring WebFlux, Apache Kafka и очереди мертвых писем. При использовании их вместе они обеспечивают основу для создания отказоустойчивых, устойчивых к сбоям и высокопроизводительных систем, что важно для крупных приложений, которым необходимо эффективно обрабатывать огромные объемы данных.

Используемые функции в этой статье

  • Spring Webflux: Он предоставляет реактивную парадигму, которая зависит от неблокирующего обратного давления для одновременной обработки событий.
  • Apache Kafka: Реактивные продюсеры и потребители Kafka помогают строить компетентные и адаптивные конвейеры обработки.
  • Реактивные потоки: Они не блокируют выполнение потоков продюсеров и потребителей Kafka.
  • Очередь мертвых писем (DLQ): DLQ временно сохраняет сообщения, которые не могли быть обработаны по разным причинам. Сообщения из DLQ могут быть позже использованы для повторной обработки сообщений, чтобы предотвратить потерю данных и сделать обработку событий устойчивой.

Реактивный продюсер Kafka

Производитель Reactive Kafka отправляет сообщения параллельно и не блокирует другие потоки во время публикации. Это полезно для обработки больших объемов данных. Он хорошо сочетается с Spring WebFlux и управляет обратным давлением в архитектуре микросервисов. Эта интеграция помогает не только обрабатывать большие сообщения, но также эффективно управлять облачными ресурсами.

Указанный выше реактивный производитель Kafka можно найти на GitHub.

Реактивный потребитель Kafka

Реактивный потребитель Kafka забирает сообщения Kafka без блокировки и обеспечивает высокую пропускную способность. Он также поддерживает обработку обратного давления и отлично интегрируется с WebFlux для обработки данных в реальном времени. Реактивный конвейер потребителя хорошо управляет ресурсами и отлично подходит для приложений, развернутых в облаке.

Указанный выше реактивный потребитель Kafka можно найти на GitHub.

Очередь мертвых писем (DLQ)

DLQ – это простая тема Kafka, которая сохраняет сообщения, отправленные производителями и не удается обработать. В реальном времени нам нужно, чтобы системы работали без блокировок и сбоев, и это можно достичь за счет перенаправления таких сообщений в очередь мертвых писем в архитектуре, основанной на событиях.

Преимущества интеграции очереди мертвых писем

  • Предоставляет резервный механизм, чтобы предотвратить прерывание потока сообщений.
  • Позволяет сохранять необработанные данные и помогает предотвратить потерю данных.
  • Сохраняет метаданные сбоя, что в конечном итоге помогает анализировать причину сбоя.
  • Предоставляет возможность повторной обработки необработанных сообщений.
  • Разъединяет обработку ошибок и делает систему устойчивой.

Неудавшиеся сообщения могут быть перенаправлены в DLQ из кода производителя, как показано ниже:

Необходимо создать обработчик DLQ в реактивном потребителе, как показано ниже:

В заключение

Внедрение DLQ с реактивным продюсером и потребителем помогает создавать надежные, устойчивые к сбоям и эффективные приложения, основанные на событиях. Реактивные продюсеры обеспечивают неблокирующую публикацию сообщений; с другой стороны, реактивные потребители обрабатывают сообщения с обратным давлением, улучшая отзывчивость. DLQ предоставляет механизм резервного копирования, предотвращая сбои и потери данных.

Указанная архитектура обеспечивает изоляцию системных сбоев и помогает в отладке, что может быть дополнительно адресовано для улучшения приложений.

Указанный код можно найти в GitHub продюсере и GitHub потребителе.

Более подробную информацию о реактивном продюсере и потребителе можно найти на ReactiveEventDriven. Документы Spring Apache Kafka содержат больше информации о DLQ.

Source:
https://dzone.com/articles/reactive-event-driven-app-with-dead-letter-queue