メッセージが消費または処理されたら、Kafka から確認を正確に取得する方法。ばかげているように聞こえるかもしれませんが、ack を受信したメッセージの開始オフセットと終了オフセットを知る方法はありますか?
2 に答える
Kafka は、これを行うように実際には構造化されていません。その理由を理解するには、こちらの設計ドキュメントを参照してください。
1 回限りの承認を提供するには、アプリケーション用の外部追跡システムを作成する必要があります。そこでは、承認を明示的に記述し、トランザクション ID にロックを実装して、物事が一度だけ処理されるようにします。システムなどの実装の計算コストは非常に高く、これが、大規模なトランザクション システムが比較的風変わりなハードウェアを必要とし、Kafka などのシステムよりもスケーラビリティが低い主な理由の 1 つです。
強力な持続性セマンティクスを必要としない場合は、グループ API を使用して、最後のメッセージがいつ読み取られたかを大まかに追跡できます。これにより、すべてのメッセージが少なくとも 1 回は読み取られるようになります。グループ API はアプリケーション独自の処理ロジックを明示的に追跡する機能を提供しないため、このシナリオでは実際の処理の保証はかなり弱いことに注意してください。この環境では、べき等処理に依存するスキームが一般的です。
または、名前の悪い SimpleConsumer API を使用することもできます (使用するのは非常に複雑です)。これにより、アプリケーション内でタイムスタンプを明示的に追跡できます。これは、キューから読み取られたデータのアプリケーション独自の処理を追跡できるため、ネイティブ Kafka API によって実現できる最高レベルの処理保証です。