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里的这个回答

最新文章

  1. ubuntu_nfs搭建
  2. ORA-01501: CREATE DATABASE failed
  3. Codeforces 715A. Plus and Square Root[数学构造]
  4. AC日记——与7无关的数 openjudge 1.5 39
  5. iscroll 使用及遇到的问题
  6. 【转】javascript弹出固定大小的窗口页面
  7. 学习python网络数据采集笔记-1、2章
  8. CentOS系统、Jdk、Tomcat安装实战
  9. BadgeView新提示开源工具类
  10. Java配置
  11. Spring Security入门(3-9)Spring Security登录成功以后
  12. [TCP/IP] 数据链路层-ethereal 抓包分析数据帧
  13. Centos7下用FastDFS搭建图片服务器
  14. Synchronize,Lock, ReentrantLock,ReentrantReadWriteLock
  15. jenkins git ftp 发布.net 项目
  16. C#计算时间差 TimeSpan
  17. mac 下安装pip
  18. 2017 年 PHP 程序员未来路在何方?
  19. jmeter-time函数
  20. [Scala]Scala学习笔记五 Object

热门文章

  1. 【转载】python解决文本乱码问题及文本二进制读取后的处理
  2. 常用的基础方法,对象转数组,phpcurl请求
  3. [Linux系统]安装时出现Requires: libc.so.6(GLIBC_2.17)(64bit) Requires: systemd Requires: libstdc++.so时解决办法
  4. MobilePBRLighting优化思路2
  5. Oracle UNDO表空间的管理
  6. leecode64. 最小路径和(动态规划)
  7. CAM更改起始直径为直径
  8. locust自定义负载策略。
  9. VS/QT--调用第三方库dll总结
  10. Linux 关闭系统时间同步-timedatectl的使用