【イグザクトリーワンスはいしん】
Exactly Once配信 とは?
💡 重複も消失もゼロ、完璧な「一度きり」を約束する特急便
📌 このページのポイント
- メッセージが過不足なく厳密に1回だけ配信されることを保証する
- At Least Once(重複あり)やAt Most Once(欠落あり)より強い保証レベル
- トランザクションや重複排除の仕組みが必要で実装コストが高い
- Kafkaのトランザクション機能やGoogle Cloud Pub/Subなどで実現可能
Exactly Once配信って、ぴったり1回だけ届くってこと?
そうだよ。重複して届くこともなく、消えることもなく、必ずちょうど1回だけ届けることを保証するんだ。配信セマンティクスの中で一番強い保証レベルだよ。
それって難しいの?
かなり難しいんだよ。ネットワーク障害や再送が起きたときに「届いたのか届いていないのか」を正確に判断して、重複を防ぎながら欠落もなくする仕組みが必要だからね。
どうやって実現するの?
Kafkaではプロデューサーにトランザクション機能とべき等な送信設定を組み合わせることで実現しているよ。送信IDを使って重複メッセージを検出して捨てる仕組みなんだ。
At Least Onceとどう使い分けるの?
銀行の送金や在庫引き当てなど、同じ処理が2回走ると困る場面ではExactly Onceが必要だよ。ログ収集やメトリクスのように多少の重複が許容できる場面ならAt Least Onceで十分で、パフォーマンスも高くなるんだ。
コストが高いってどういう意味なの?
まとめ:ざっくりこれだけ覚えればOK!
「Exactly Once」って出てきたら「重複も欠落もない厳密な1回配信保証」と思えればだいたいOK!
📖 おまけ:英語の意味
「Exactly Once Delivery」 = 厳密に1回の配信
💬 「正確に(exactly)1回(once)」届けるという意味で、重複も消失もない理想的な配信を指すんだよ。ただし「分散システムでExactly Onceは理論的に不可能」という議論もあり、実際には『重複を除去した結果としてExactly Onceに見える』実装が多いんだ。