デッドレターキューを使用したリアクティブイベント駆動アプリの構築

イベント駆動アーキテクチャは、ユーザープロファイルが更新されたときなど、実際のイベントに応答するシステムを容易にします。この投稿では、Spring WebFlux、Apache Kafka、Dead Letter Queueを組み合わせてデータ損失を処理するリアクティブなイベント駆動アプリケーションの構築を説明しています。これらを併用することで、大規模なデータを効率的に処理する必要がある大規模アプリケーションにとって重要な、耐障害性、回復力、高性能なシステムのフレームワークが提供されます。

この記事で使用される機能

  • Spring Webflux:同時処理のためにノンブロッキングのバックプレッシャーに依存するリアクティブパラダイムを提供します。
  • Apache Kafka:リアクティブKafkaプロデューサーとコンシューマーは、効率的で適応性のある処理パイプラインの構築に役立ちます。
  • リアクティブストリーム:Kafkaプロデューサーおよびコンシューマーのストリームの実行をブロックしません。
  • Dead Letter Queue(DLQ):様々な理由により処理されなかったメッセージを一時的に保存するDLQ。後でDLQメッセージを使用してメッセージを再処理してデータ損失を防ぎ、イベント処理を回復力のあるものにします。

リアクティブKafkaプロデューサー

Reactive Kafkaプロデューサーは並行してメッセージを送信し、パブリッシュ中に他のスレッドをブロックしません。大量のデータを処理する場合に有益です。Spring WebFluxとよく組み合わせられ、マイクロサービスアーキテクチャ内でバックプレッシャーを処理します。この統合は、大きなメッセージを処理するだけでなく、クラウドリソースを効果的に管理するのに役立ちます。

上記のReactive Kafkaプロデューサーは、GitHubのGitHubで見つけることができます。

Reactive Kafka Consumer

Reactive Kafka Consumerは、Kafkaメッセージをブロックせずに取得し、高いスループットを維持します。バックプレッシャーハンドリングもサポートされ、リアルタイムデータ処理のためにWebFluxと完璧に統合されています。リアクティブコンシューマーパイプラインはリソースを効果的に管理し、クラウドで展開されたアプリケーションに非常に適しています。

上記のReactive Kafkaコンシューマーは、GitHubの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