14 幂等生产者和事务生产者是一回事吗? - 图1

消息承诺分类

最多一次(at most once):
消息可能会丢失,但绝不会被重复发送。

至少一次(at least once):
消息不会丢失,但有可能被重复发送。

精确一次(exactly once):
消息不会丢失,也不会被重复发送。

选择哪种需要看业务需要。

理论上 exactly once 确实最好,但需要很多的逻辑保障,降低了系统性能。默认情况是不允许数据丢失,重复了可接受,即「至少一次」。但也有实时流数据场景,需要实现精确一次。

如何保障 exactly once

两种机制

1、幂等性

概念:

指的是,一个操作无论执行多少遍都会得到相同的结果。

例,数学中 x1 是幂等,而 +1 不是。 x1 无论执行多少次得到的结果都一样,但执行多次 +1 结果就会不同。

在计算机领域,就是某个命令或函数多次执行后不改变系统的状态。

Kafka 中的应用:

在 Kafka 中可以创建「幂等性 Producer」

幂等性 Producer 只能保证单分区、单会话上的消息幂等性

2、事务

概念:

执行的的操作要么全成功,要么全失败。

Kafka 中的应用:

Kafka 中可以创建「事务型 Producer」