【分布式消息服务】——Kafka——生产幂等与事务消息

    技术2022-07-11  115

    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——异常处理方案

    Processed: 0.011, SQL: 9