Kafka Reblance & max.poll.interval.ms 重复消费问题
1. 什么是kafka Reblance
消费组是MQ中一个非常重要的概念,一个消费组监听一个Topic时,Kafka服务端会给消费组中的每一个实例,进行队列分配,每一个实例指定消费一个或多个队列(分区),当然如果消费实例数量如果超出了队列数量,那么会出现消费实例不监听任何队列的情况。
当一个消费实例加入或者退出消费组时,那么消费实例的数量会变化,服务端有责任将消息队列(分区), 尽可能均衡的平分给所有消费实例,这是就会出现rebalance。
2. 什么是max.poll.interval.ms
max.poll.interval.ms 消费端的配置参数:最大poll间隔毫秒数,指定两次poll的最大间隔,默认5分钟。如果超出了,那么Kafka服务端会认为当前消费实例,已经不可用了,那么这个时候消费组的实例数量就会减1,同步导致需要rebalance。

3. 重复消费在什么情况下会和以上信息产生关联
当一个消费实例poll一次之后,进行业务逻辑处理,如果处理的时间过长,超出了max.poll.interval.ms,此时虽然消费实例依然活着,但是Kafka服务端已经认为该实例不可用,那么进行reblance,把当前属于该实例的队列(分区) 分配给其他实例,由于这些被消费的队列的offset还没有被提交,导致新的消费实例会重新消费当前的消息。
4. 合理的建议
一次poll少量的数据保证业务处理时间不会超出 max.poll.interval.ms 的配置,同时增加消费的幂等逻辑。
5. 为什么Kafka会用poll的频率来判定实例的死活呢?
通常判定实例的可用性,一般是通过心跳机制来实现,但是似乎早期的Kafka没有心跳机制,且消费端的poll轮询,在某种程度上等同于心跳,所以才会有通过poll频率来判定实例是否可用。KIP-62及之后,引入了单独的心跳线程,max.poll.interval.ms是poll最大间隔秒数,session.timeout.ms是心跳间隔最大秒数,默认30秒,不论哪一个超时都会导致消费实例被下线。具体可参见这个stackOverFlow里的这个回答
Kafka Reblance & max.poll.interval.ms 重复消费问题的更多相关文章
- Kafka消息保证不丢失和重复消费问题
使用同步模式的时候,有3种状态保证消息被安全生产,在配置为1(只保证写入leader成功)的话,如果刚好leader partition挂了,数据就会丢失.还有一种情况可能会丢失消息,就是使用异步模式 ...
- kafka一直rebalance故障,重复消费
今天我司线上kafka消息代理出现错误日志,异常rebalance,而且平均间隔2到3分钟就会rebalance一次,分析日志发现比较严重.错误日志如下 08-09 11:01:11 131 pool ...
- Kafka session.timeout.ms heartbeat.interval.ms参数的区别以及对数据存储的一些思考
Kafka session.timeout.ms heartbeat.interval.ms参数的区别以及对数据存储的一些思考 在计算机世界中经常需要与数据打交道,这也是我们戏称CURD工程师的原因之 ...
- Kafka如何保证百万级写入速度以及保证不丢失不重复消费
一.如何保证百万级写入速度: 目录 1.页缓存技术 + 磁盘顺序写 2.零拷贝技术 3.最后的总结 “这篇文章来聊一下Kafka的一些架构设计原理,这也是互联网公司面试时非常高频的技术考点. Kafk ...
- Spring Cloud Stream如何处理消息重复消费?
最近收到好几个类似的问题:使用Spring Cloud Stream操作RabbitMQ或Kafka的时候,出现消息重复消费的问题.通过沟通与排查下来主要还是用户对消费组的认识不够.其实,在之前的博文 ...
- 关于MQ的几件小事(三)如何保证消息不重复消费
1.幂等性 幂等(idempotent.idempotence)是一个数学与计算机学概念,常见于抽象代数中. 在编程中一个幂等操作的特点是其任意多次执行所产生的影响均与一次执行的影响相同.幂等函数,或 ...
- kafka consumer重复消费问题
在做分布式编译的时候,每一个worker都有一个consumer,适用的kafka+zookeep的配置都是默认的配置,在消息比较少的情况下,每一个consumer都能均匀得到互不相同的消息,但是当消 ...
- kafka丢失和重复消费数据
Kafka作为当下流行的高并发消息中间件,大量用于数据采集,实时处理等场景,我们在享受他的高并发,高可靠时,还是不得不面对可能存在的问题,最常见的就是丢包,重发问题. 1.丢包问题:消息推送服务,每天 ...
- Kafka重复消费和丢失数据研究
Kafka重复消费原因 底层根本原因:已经消费了数据,但是offset没提交. 原因1:强行kill线程,导致消费后的数据,offset没有提交. 原因2:设置offset为自动提交,关闭kafka时 ...
- 【消息队列】kafka是如何保证消息不被重复消费的
一.kafka自带的消费机制 kafka有个offset的概念,当每个消息被写进去后,都有一个offset,代表他的序号,然后consumer消费该数据之后,隔一段时间,会把自己消费过的消息的offs ...
随机推荐
- Appium的触屏操作&设备交互api
Appium的触屏操作 TouchAction---Appium 2.0以上不在可以使用 官网地址:https://github.com/appium/appium/blob/master/docs/ ...
- python判断文件后缀名
endswith()方法 利用文件名或路径名对文件后缀进行判断,例如对文件名后缀是否为.jpg的文件进行判断. path = "file.jpg" bool = path.ends ...
- scrapy_redis 分布式爬取酷狗音乐
目录 声明 安装scrapy_redis 创建scrapy项目 spider模块 items模块.pipelines模块 setting.py 调试 运行 成果图 源码 声明 文章仅供学习交流使用,切 ...
- SDN实验环境安装
- Nacos配置管理
一.在Nacos添加公共配置 二.项目中读取方式 1. 引入nacos-config依赖 首先,在要使用 nacos 来管理配置的服务中,引入nacos-config 依赖: <!--nacos ...
- git -----已经被跟踪文件如何在本地提交时忽略
git update-index --assume-unchanged C.md 注:忽略后将不再拉取和提交c.md这个文件 git update-index --no-assume-unchange ...
- 两个jsp界面之间使用window.location.href使用?传递参数以及接受参数
这篇文章如果能给你带来帮助,不胜荣幸,如果有不对的地方也欢迎批评指正. 网上有很多方法是讲怎么截取字符串啊等等的方法来获取参数,说实话,看着我就觉得费劲,咱们可以换一种思路来思考.一般跳转界面多为前段 ...
- API的风格
好奇怪呀,感觉所有风格不都差不多嘛 1.REST REST(REpresentational State Transfer),首次出现在 2000 年 Roy Thomas Fielding 的博士论 ...
- Gitlab Ubuntu部署
一.安装存储库 sudo curl -s https://packages.gitlab.com/install/repositories/gitlab/gitlab-ce/script.deb.sh ...
- Gitlab迁移(亲测)
1. 概述 当前gitlab部署在k8s内,根据基础设施设计此处不合理,需将gitlab迁移至主机部署的gitlab 当前位置:k8s 集群 迁移后位置:云主机部署gitlab 2. Gitlab从K ...