7.kafka中的消费语义、幂等性

概述

  kafka中的消费语义

  • at most once :可能会丢数据
  • at least once :all +分区副本>=2 +min >=2 不丢失数据,但是数据可能重复
  • exactly once :精准一次, 不丢不重

kafka的事务与幂等性官方速递

Apache Kafka Idempotent Producer - Avoiding message duplication

kafka中幂等性

  当生产者向 topic 发送消息时,可能会出现问题,如短连接失败,当这种情况发生时,任何等待确认的消息都可以重新发或丢弃,但消息可能已经成功写入 topic ,也可能没有,这是没法知道的,如果是重新发送,可以会导致消息重复。不重新发送,消息基本上会丢失。

在这里插入图片描述

支持

  java 是从 0.11 版本正式支持的。

配置

# 代码中配置
enable.idempotence:true

原理

  每个生产者都会被分配一个生产者Id(PID),每次向 topic 发送消息时,都会包含自己的 PID ,此外,每条消息都会得到一个单调递增的序列号。生产者向 topic 发送消息时,都会为其维护一个单独的序例,在 broker 上,会在每个分区的基础上跟踪已成功写入的最大 PID 序列化号组合,当接收到较低的序列号时,它会被丢弃。

  禁用幂等性后,可能会出现生产者异步向 topic 分区发送消息的情况,比如消息M1M10。发送消息 7 后,连接失败。它已收到消息13的确认。因此,消息4567被重新发送,然后是消息810。但代理实际上能够将除消息7之外的所有消息写入分区,因此现在存储在分区中的消息是:M1, M2, M3, M4, M5, M6, M4, M5, M6, M7, M8, M9, M10

  但启用幂等性后,每条消息都有一个PID和序列号:

  • M1 (PID: 1, SN: 1) - written to partition. For PID 1, Max SN=1
  • M2 (PID: 1, SN: 2) - written to partition. For PID 1, Max SN=2
  • M3 (PID: 1, SN: 3) - written to partition. For PID 1, Max SN=3
  • M4 (PID: 1, SN: 4) - written to partition. For PID 1, Max SN=4
  • M5 (PID: 1, SN: 5) - written to partition. For PID 1, Max SN=5
  • M6 (PID: 1, SN: 6) - written to partition. For PID 1, Max SN=6
  • M4 (PID: 1, SN: 4) - rejected, SN <= Max SN
  • M5 (PID: 1, SN: 5) - rejected, SN <= Max SN
  • M6 (PID: 1, SN: 6) - rejected, SN <= Max SN
  • M7 (PID: 1, SN: 7) - written to partition. For PID 1, Max SN=7
  • M8 (PID: 1, SN: 8) - written to partition. For PID 1, Max SN=8
  • M9 (PID: 1, SN: 9) - written to partition. For PID 1, Max SN=9
  • M10 (PID: 1, SN: 10) - written to partition. For PID 1, Max SN=10
  • 11
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

流月up

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值