Exactly-once セマンティクス
分散メッセージングにおける保証の一つ。障害・再試行・部分的失敗があっても、各メッセージが重複も欠落もなくちょうど一度だけ処理される。
厳密に言えば、独立したシステム間では不可能だ(FLP不可能性)。一方、単一のシステム内なら、トランザクション対応プロデューサー、冪等なコンシューマー、オフセットのアトミックなコミットを組み合わせて現実的に実現できる。Kafkaは0.11以降、トランザクション対応プロデューサーとread_committed分離レベルで「exactly-once」をサポートしている。
人々が実際に求めているのは「effectively-once」であることが多い。プロデューサーは重複して送ってよく、コンシューマーが冪等であればよいという考え方だ。ブローカーの魔法に頼るより、冪等キー(リクエストUUID→重複排除テーブル)を使うのが定番のパターンである。