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里的这个回答
最新文章
- ubuntu_nfs搭建
- ORA-01501: CREATE DATABASE failed
- Codeforces 715A. Plus and Square Root[数学构造]
- AC日记——与7无关的数 openjudge 1.5 39
- iscroll 使用及遇到的问题
- 【转】javascript弹出固定大小的窗口页面
- 学习python网络数据采集笔记-1、2章
- CentOS系统、Jdk、Tomcat安装实战
- BadgeView新提示开源工具类
- Java配置
- Spring Security入门(3-9)Spring Security登录成功以后
- [TCP/IP] 数据链路层-ethereal 抓包分析数据帧
- Centos7下用FastDFS搭建图片服务器
- Synchronize,Lock, ReentrantLock,ReentrantReadWriteLock
- jenkins git ftp 发布.net 项目
- C#计算时间差 TimeSpan
- mac 下安装pip
- 2017 年 PHP 程序员未来路在何方?
- jmeter-time函数
- [Scala]Scala学习笔记五 Object
热门文章
- 【转载】python解决文本乱码问题及文本二进制读取后的处理
- 常用的基础方法,对象转数组,phpcurl请求
- [Linux系统]安装时出现Requires: libc.so.6(GLIBC_2.17)(64bit) Requires: systemd Requires: libstdc++.so时解决办法
- MobilePBRLighting优化思路2
- Oracle UNDO表空间的管理
- leecode64. 最小路径和(动态规划)
- CAM更改起始直径为直径
- locust自定义负载策略。
- VS/QT--调用第三方库dll总结
- Linux 关闭系统时间同步-timedatectl的使用