- 最多一次:消息最多被消费一次,可能丢失
- 最少一次:消息最少被消费一次,可能被重复消费多次
- 精确一次:消息会且只会被消费一次
Producer默认语义
默认情况下,Kafka会在producer的消息写入到分区leader副本的磁盘日志文件中后发送响应,若producer没接收到响应,它会尝试重新发送,所以是最少一次语义。
Consumer默认语义
对于Consumer来说,提供什么语义就看什么时候提交位移。
- 获取消息->提交位移->处理:最多一次,因为提交位移后可能崩溃
- 获取消息->处理->提交位移:最少一次
幂等性Producer
用于支持精确一次语义(EOS)的一个手段。
发送给broker的每一批消息都被分配一个序列号,broker会将它保存到日志文件中,此外,每一个Producer会被分配一个PID,(PID, 分区号)的二元组唯一确定一个最新消息序列号,broker接到消息时,根据(pid, 分区号)
找到该Producer在该分区下的最新消息序列号S,若新消息的序列号小于等于S,拒接这个消息。
缺陷:无法实现多个producer共同提供EOS语义,无法提供producer多次会话间的EOS语义(重启后),只对单分区提供EOS语义,对consumer无法提供任何保证
Producer幂等性使用
enable.idempotence
开启
事务
未完...
标签:Producer,producer,语义,Kafka,EOS,消息,序列号 From: https://www.cnblogs.com/lilpig/p/16845247.html