exactly once的定义,即请求的消息,是否精确一次发送到远端服务的问题。

https://juejin.cn/post/6844903857558913038

https://streaml.io/blog/exactly-once【英文原文已经找不到了】

相关名词

最多一次(At-most-once)

这本质上是一『尽力而为』的方法。
保证数据或事件最多由应用程序中的所有算子处理一次。
这意味着如果数据在被流应用程序完全处理之前发生丢失,则不会进行其他重试或者重新发送。

至少一次(At-least-once)

应用程序中的所有算子都保证数据或事件至少被处理一次。
这通常意味着如果事件在流应用程序完全处理之前丢失,则将从源头重放或重新传输事件。

这个可能会浪费资源,即便是成功了的也会重跑。

精确一次(Exactly-once)

即使是在各种故障的情况下,流应用程序中的所有算子都保证事件只会被『精确一次』的处理。(也有文章将 Exactly-once 翻译为:完全一次,恰好一次)

通常使用两种流行的机制来实现『精确一次』处理语义。

  • 分布式快照 / 状态检查点
  • 至少一次事件传递和对重复数据去重