7.kafka中的斲丧语义、幂等性

打印 上一主题 下一主题

主题 519|帖子 519|积分 1557

概述

  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 版本正式支持的。
设置

  1. # 代码中配置
  2. enable.idempotence:true
复制代码
原理

  每个生产者都会被分配一个生产者Id(PID),每次向 topic 发送消息时,都会包含自己的 PID ,别的,每条消息都会得到一个单调递增的序列号。生产者向 topic 发送消息时,都会为其维护一个单独的序例,在 broker 上,会在每个分区的底子上跟踪已乐成写入的最大 PID 序列化号组合,当吸收到较低的序列号时,它会被抛弃。
  禁用幂等性后,大概会出现生产者异步向 topic 分区发送消息的环境,比如消息M1 到 M10。发送消息 7 后,连接失败。它已收到消息1至3的确认。因此,消息4、5、6和7被重新发送,然后是消息8到10。但代理实际上能够将除消息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

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

我爱普洱茶

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表