冪等性とはログで「各メッセージが一度書き込まれる」ことを意味することを理解したと思いますが、EOS (Exactly-Once Delivery Semantic)について話すと、消費者も役割を果たし、エンド ツー エンドの保証に入ります。
したがって、ここ(たとえば) で述べたように、冪等性とトランザクションの両方が必要であり、「エンド ツー エンドで 1 回限りのセマンティクス」には十分です。
ただし、圧縮に関する Kafka docは次のように述べています。
データはブローカに圧縮形式で格納されるため、有効なフェッチ オフセットは圧縮されたメッセージ境界です。したがって、圧縮データの場合、消費されるオフセットは一度に 1 つの圧縮メッセージずつ進められます。これには、コンシューマに障害が発生した場合に重複が発生する可能性があるという副作用があります。
質問:
- プロデューサーが冪等であり、コンシューマーが Kafka (Kafka Streams など) 内でトランザクションである場合でも、オフセットが圧縮されたメッセージ境界で進められるため、重複が表示されることがあります。圧縮されたメッセージの境界ではない単一のメッセージを処理することを検討してください。オフセットは進められていないため、コンシューマーが失敗すると重複が表示されます。正しい?
圧縮を有効にすると、EOS の取り組みが無効になる可能性があるようです。EOS について議論している記事では、これについて言及されていません。