背景

最近李哥做了kafka的调研,我看了他做的kafka与rabbitmq的对比与性能分析,打算深入了解一下kafka的ack应答机制

1.kafka基础大家可自行学习

2.这里我直接分析下ack应答机制,李哥的压测全部都是用的默认配置,ack应答用的all (-1) 即等leader与isr里的follower里都落盘后再给producer回应,我们来盘点一下这种机制的优缺点。

什么是ack应答机制?

简单点理解就是:

  1. producer发送消息到leader收到消息之后发送ack
  2. leader和follower之间同步完成数据会发送ack

实际上ack可以看做一种信号,用于消费者来确认消息是否落盘

ISR是什么?

实际上它是副本同步机制,具体介绍,请走传送门http://objcoding.com/2019/11/05/kafka-isr/

ack应答机制有哪些模式以及各种模式的优缺点?

为了更好的适应用户需求,ack应答机制有三种可靠级别设置

  1. 级别0 , 通俗上讲就是,producer发送消息到broker(可以理解为机器), 不等待broker的ack回应,直接返回,这一种操作提供了最低的延迟,毕竟没有经过leader与follower确认,所以存在一种情况是,broker一接收到数据还没有写入到磁盘就已经返回,这时候broker发生故障,就造成了丢失数据(相当于异步发送,消息发送到broker后就给producer返回true了,后续数据落盘就靠玄学了,producer无法知道消息是否真的落库),所以它的优点是快,缺点是不可靠。
  2. 级别1, 这个比级别0可靠些,producer发送消息到broker后,会等待leader落盘后再给producer返回信号,告诉producer数据已经收到了,但是也存在一种情况,那就是follower没有确认数据是否落盘,如果存在leader于follower数据不一致的情况,又碰巧leader挂了,选举了一个数据不健全的follower为新的leader,这就造成了数据丢失。所以它可靠性中等,性能不如0级。
  3. 级别-1, 这个级别可靠性算是最高的了,至少比前两种高,他要等leader与isr(可以看做一些比较活跃的follower集合)中follower确认全部落盘后在给producer回应,这种方式可靠,但是牺牲了性能,所以它是三种模式里最慢的。

kafka与rabbitmq性能、使用场景比较

先上图,下面是性能测试,其中kafka应答机制用的-1,即最慢、可靠的模式

光看这个压测结果,我们不难看出,kafka性能更高,看是算上可靠性呢?

这就引出一个问题,kafka存在数据重复写入或者重复消费问题,可靠性上不如rabbitmq, 所以建议的是,数据严谨场景(关于钱的、奖励的、容易引发客户愤怒的),我们使用rabbitmq, 虽然慢,但是人家可靠,数据不严谨场景,比如数据上报、日志啥的,多一条少一条无伤大雅的,我们引入kafka,毕竟它快。

kafka的数据重复写入、消费问题

1.重复写入场景,主要出现在我们我们ack应答机制用的-1的时候, 举个栗子,producer发送消息到broker, broker里leader、follower已经落盘,准备回应producer的时候,突然间这个leader挂了,ack没发出去,producer没收到确认收到的消息,这个时候,会重新选举出一个leader, producer会重新发消息到新的leader并落库, 这就造成了数据重复,试想如果kafka应用在给用户发奖励的场景, 给用户多发一份奖励,会怎么样呢?

这种的问题出现场景不多,解决方案目前来说我能想到的就只能是架构、运维层面优化,保持服务稳定。

2.重复消费场景,这种问题大多出现在ack应答机制设置为0或者1的情况,举个1的例子,某一个consume因消费过慢、网络问题或者无法消费,触发rebalanced(kafka集群的一个保护设定,用于剔除掉无法消费或者过慢的消费者

), 此时数据会重新发到一个新的consume里消费,这时候就会出现重复消费的问题,根本上就是记录消费位置的offset因某种情况没有改变,消费进入死循环或者多次从同一个offset消费。试想,kafka应用在扣除用户金币的场景,多扣一次,又会怎么样呢?

重复消费问题的解决方案我们可以从下面的角度入手:

  1. 确认consume的消费速度,过慢是不行滴
  2. 幂等性,0.11版本及之后版本的kafka引入幂等,即无论向server发送多少次一样的数据,都会持久化一次,0.11版本之前的需要consume自己去做幂等逻辑,但幂等性也只能解决单次会话,单个分区数据重复问题,因为假如0.11版本之后你开启了幂等性,那么如果producer挂了,新起了一个producer时,会重新分配一个新的pid,之前的去重数据集合就会失效。这一点实际上也解决了,就是由消费组、主题、分区组成的唯一一个id, 重启之后这个凭借这个id可以找回pid,这里不详述,有需要自行搜索资料学习。
  3. 通过kafka配置来尽可能的避免重复消费,这点网上有介绍,如果配置调优,有兴趣可以继续深入
  4. 做好监控,无论是消息积压还是consume的消费速度等,如果可以,最好也能监控到offset的位置信息

以上只是我个人观点,如有问题请指明,感谢

Kafka Ack应答机制理解相关推荐

  1. Kafka 生产者数据安全(ACK机制,ACK时机,ACK应答机制,故障处理,Exactly Once)

    目录 生产者数据安全 一.数据分区 图解 分区原因 分区原则 二.数据可靠性保证 ACK机制 ACK时机 ACK应答机制 故障处理 Exactly Once 语义 生产者数据安全 一.数据分区 图解 ...

  2. CAN总线-ACK应答机制分析

    1:应答场定义 应答场长度为 2 个位,包含应答间隙(ACK SLOT)和应答界定符(ACK DELIMITER).在应答场里,发送站发送两个"隐性"位.当接收器正确地接收到有效的 ...

  3. Kafka整体结构图、Consumer与topic关系、Kafka消息分发、Consumer的负载均衡、Kafka文件存储机制、Kafka partition segment等(来自学习资料)

    ##1. Kafka整体结构图 Kafka名词解释和工作方式  Producer : 消息生产者,就是向kafka broker发消息的客户端.  Consumer : 消息消费者,向kafka ...

  4. RabbitMQ学习记录(六)-应答机制

    消息应答机制 消息应答机制是保证RabbitMQ能够把消息发送给消费者,但是消息发送给了消费者并不能代表消息能正确被消费,所以保证消息能够被消费者正确消费才能够保证业务和数据的完整.        R ...

  5. TCP协议可靠性保证(确认应答机制,超时重传机制,流量控制,拥塞窗口)

    上一次我们知道了TCP协议通过连接管理机制保证可靠性,今天我们继续来看一看TCP协议中其他几种保证可靠性的方法. · 确认应答机制  · 超时重传机制  · 流量控制  · 拥塞窗口 确认应答机制  ...

  6. Kafka中副本机制的设计和原理

    Kafka中一个分区可以拥有多个副本,副本可分布于多台机器上.而在多个副本中,只会有一个Leader副本与客户端交互,也就是读写数据.其他则作为Follower副本,负责同步Leader的数据,当Le ...

  7. pcie握手机制_【博文连载】PCIe扫盲——Ack/Nak 机制详解(一)

    原标题:[博文连载]PCIe扫盲--Ack/Nak 机制详解(一) 前面在数据链路层入门的文章中简单地提到过Ack/Nak机制的原理和作用,接下来的几篇文章中将对Ack/Nak机制进行详细地介绍. A ...

  8. 图解:Kafka 水印备份机制

    作者 | 张乘辉 责编 | 刘静 高可用是很多分布式系统中必备的特征之一,Kafka 日志的高可用是通过基于 leader-follower 的多副本同步实现的,每个分区下有多个副本,其中只有一个是 ...

  9. 以修改注册表的方式避免ACK确认机制带来的延时现象

    TCP本身属面向链接的通讯协议.通讯双方的每一个收发动作,需要以通讯链路正常为前提.因此TCP协议内部提供了默认的ACK验证机制. 假定A.B之间存在一条TCP通讯链路,某一时刻A第一次向B发送数据, ...

最新文章

  1. 云炬随笔20210714(1)
  2. 小程序 生成条形码barcode.js
  3. linux at java,Linux-Tutorial/Java-bin.md at master · linsanityHuang/Linux-Tutorial · GitHub
  4. 数据结构五——二叉树
  5. FreeRTOS任务延时函数
  6. 抽象数据类型(顺序栈)、断言、包含头文件、内联函数、非内联成员函数[C++ In Action][4]...
  7. Linux命令之---cat
  8. [Contest20180328]coin
  9. 在ASP.NET中执行URL重写(一)
  10. Python爬虫爬取电影网站种子,让你以后再也不寂寞
  11. 小学计算机专业说课稿模板,小学信息技术说课稿模板汇总八篇
  12. 新浪动作挺快,开始再博客投广告了
  13. 《大化传输网》学习笔记(三)————OTN系统的保护
  14. 苹果弃妇效应再现:Audience一夜跌去63%(转)
  15. 3D-SLAM自搭平台 主动阿克曼 + RS16 + LPMS_IMU LEGO_LOAM 建图
  16. 刚刚!百度副总裁被抓!
  17. flutter图片聊天泡泡_Flutter极致的业务封装——各类聊天气泡(一)
  18. Android 地图标识标签
  19. opencv将灰度图转为彩色图
  20. category.php ecshop,category.php

热门文章

  1. RTThread(一) - 概念及简介
  2. 基于单片机开发的电子体温计方案
  3. WinCC(portal)和WinCC之间的区别、各版本区别以及兼容性情况整理
  4. c语言中定义结构体指针的作用,C语言结构体定义,使用及指针(1)
  5. 应用商店无法进行下载
  6. 三一集团数字化转型探秘:以DevOps平台构建敏捷研发体系
  7. ST500LT012-1DG142硬盘参数
  8. 微信小程序开发编辑器功能常用快捷键整理
  9. 06-浅谈MITM攻击之信息窃取
  10. 输出以下图案菱形7行_“三月三”民俗系列报道7|民族服饰篇(下):相约美丽广西 共赏绚丽民服——壮锦、壮族刺绣...