美文网首页
(6)精确一次处理(exactly once)

(6)精确一次处理(exactly once)

作者: hedgehog1112 | 来源:发表于2020-11-05 10:46 被阅读0次

精确一次语义(Exactly once semantics):要消息系统本身和生产、消费应用一起合作。如,成功消费后,又把消费offset重置到之前某个offset,将收到从那个到最新offset间所有消息。

一、必须被处理的故障

发“Hello Kafka“给“EoS“单分区Kafka topic。单实例消费者在另一端从topic中拉消息

broker可能故障:每写入分区都被持久化且多副本备份。只要有一个broker可用,分区就可用。写入主副本,就会被复制到其他可用副本(ISR)。

producer到broker的RPC调用可能失败:没收成功ack不代表本身失败。重发,可能造成同样的消息Kafka分区日志中重复,进而造成消费端多次收到

客户端可能会故障:从失败状态中恢复,消费偏移量必须始终与生产同步

二、幂等的producer

创建producer客户端时,添加配置 props.put("enable.idempotence", ture),producer变成幂等,acks自动“all”,这时手动acks设置为0,会报错。

精确一次原理:每条消息生成id,broker根据id去重,

缺陷:1)只能单分区,2)只能单会话,如producer挂掉重启,无法保证两个会话间的幂等,因为broker端无法获取之前的状态信息

三、事务producer

解决幂等缺陷。支持多分区数据完整性,原子性。producer宕机重启,保证数据只处理一次。

先开启幂等性enable.idempotence为true。再对producer发送代码做修改。

https://www.cnblogs.com/listenfwind/p/12207693.html?spm=a2c4e.10696291.0.0.fde019a4a1Z8U0

相关文章

网友评论

      本文标题:(6)精确一次处理(exactly once)

      本文链接:https://www.haomeiwen.com/subject/jqsovktx.html