Kafka——生产幂等消息

关于消息幂等一共有以下思想:

At most once:生产消息最多一次(不会重复,但是可能丢失数据); At least
once:生产消息至少投递一次(不会丢失,但是会导致重复)
Exactly once: 生产消息刚好一次(生产消息确认机制,不丢不重)

新版的Kafka,最终实现了Exactly once且性能不受影响;

producer每次启动后,首先向broker申请一个全局唯一的pid,用来标识本次会话。
mySeq:每次生产消息前,生产者会用会话的pid拿到seq,然后在外部自增+1
MemeorySeq:内存中维护的就是这个会话最终的序列号;

mySeq=MemeorySeq+1: 正常消息,外部自增的结果和内部自增结果一致
mySeq<=MemeorySeq: 重复消息; 外部自增的结果小于内部的实际值,某种原因,消息重复拿了导致序列落差于内部实际值,直接丢失重复的
mySeq>MemeorySeq+1: 消息丢失;外部自增的结果大于内部自增结果,某种原因,一次会话拿多了,重试调整指针!直到mySeq=MemeorySeq+1

以上就是ack机制的实现思路

Kafka——生成事务消息

……有点难度,目前没找到靠谱的资料来说明这些api操作

利用Kafka有时候我们想到原子性的业务运行,就是么全部写入成功,要么全部失败;(整个过程中,对外部不可见,非事务授权的消费者不可以操作事务消息);

Kafka——消息拦截方案

Kafka——异常处理方案

Logo

北京人形旗下天工造物具身智能开源社区,聚焦具身天工与慧思开物两大平台

更多推荐