
exactly one = least-once(-1、全写) + 幂等性(去重)
exactly-one是要保证 生产者只生产一次、kafka只存储一份数据、消费者只消费一次数据
我们在切片的场景下,kafka分区全写保证least-once,消费者通过业主唯一标识保证这个幂等性。这样生产者可以重复生产,kafka可以数据重复,消费者可以重复消费。
kafka消息丢失怎么解决? exit-one
生产者到mq
消息发出去了,等到消息的ack,再向下进行。消息发送成功。
消息发出去了,应用死了,ack也回不来,发送异常,再次发送这个消息,mq中会有多条这个消息,消息的幂等性解决消息重复的问题。
消息发出去了,mq死了。 高可用不会死。如果说真的是死了,没有收到ack,肯定要再此尝试发送。有降级方法。
mq主节点到子节点
接受到生产者的消息后,master收到收,直接返回
接受到生产者的消息后,同步完一半的节点,再返回
接受到生产者的消息后,同步完所有的节点,再返回
接受到消息,应用死了,ack回不去,回滚
接受到消息后,自己死了。高可用不会死。如果真的死了,没有给应用发送ack,会在此生产这个消息。
mq到消费着
消费着消费完这个消息,手动offset,kafka才能知道你下一条消费那条。
消费着消费完这个消息,自己挂了。没有offset下次消费还是这个消息。
业务执行完,offset之前挂了,将业务和offset放到一个事务里。
消费着消费完这个消息,mq挂了。高可用不会死。如果真的死了,offset不能成功,多次offset没成功后,手动回滚。也可以把他们放到同一个事务里。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)