イベント駆動アーキテクチャは、ユーザープロファイルが更新されたときなど、実際のイベントに応答するシステムを容易にします。この投稿では、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