kafka消费者处理能力低引起rebalance分析
一.背景介绍
项目上进行算法调度的需求,打算采用kafka作为消息中间件,通过将多个算法消费者加入到同一个group中并行的处理算法请求,从而达到高效处理的目的。但是算法处理的时间较长,多则几十分钟,短的几分钟。测试的结果是算法时间过长的消费者会引发kafka的rebalance,消费者无法再消费到新数据。
二.rebalance机制介绍
为了弄懂上述问题,还需要了解relance的机制。由于rebalance机制资料较多,在此只进行简单介绍。
Kafka保证同一groupId的consumer只会消费某条消息(即不重复消费也不漏数据),rebalance划分同一groupId的消费者与topic的分区的一一对应关系。因此每当有消费者加入或是退出时,必定会发生一次rebalance。在rebalance完成之前,消费者是拿不到任何数据的。
三.参数调整
简单了解rebalance后,再进行kafka的参数调整。此次调整涉及参数如下:
props.setProperty("enable.auto.commit", "false");
props.setProperty("auto.offset.reset", "earliest");
props.put("max.poll.records", "1");
props.put("max.poll.interval.ms",180000000);//5小时
props.put("heartbeat.interval.ms","2000");
参数说明:
1. "enable.auto.commit"设置为false后,消费后数据后需要手动调用consumer.commitAsync(),以保证将偏移量信息提交至kafka服务端。"enable.auto.commit"也可设置为true,便不必再手动调用consumer.commitAsync();
2.props.put ("session.timeout.ms",”1800000”),该条参数使用默认值即可,建议不要调整。测试时将该参数调大后,会引发groupId再次消费时无效的问题。
3."heartbeat.interval.ms"->"2000",测试时心跳时使用默认值或是调整2秒均可,理论值应该为"session.timeout.ms"的1/3,但是建议不要调整。
4. props.put("max.poll.records", "1"),每次poll拉取数据的最大条数。测试环境是一条kafka数据,对应一个算法任务,算法处理时间较长,因此测试时设置为1。
5. props.put("max.poll.interval.ms",180000000),该参数时间一定要设置大点,超过消费处理的最大时间开销。如果该参数较小,消费者处理时间超过该参数后,会引发两个现象。一个是偏移量提交会报错。一个是groupId会被移出消费组,再使用该groupId时无法正常
拿到数据。
四、调整后的问题。
按上述参数调整后,多个算法消费者均可以正常消费kafka数据了,但是碰到新的问题。
如果有2个算法消费者正在处理,一个算法需要3分钟,另一个算法需要20分钟。当加入一个新的算法消费者后会触发一次rebalance,触发rebalance完成后所有消费者还必须要等待那个处理20分钟的算法消费者调用consumer.poll()接口后,所有消费者才能正常接收数据。
Rebalance之后,会划分完消费者与分区对应关系,空闲的分区所对应的消费者理论上应该在rebalance之后可以直接消费数据。至于为什么非要等待所有消费者执行consumer.poll()接口后才能拿到数据,暂不知其中的原因。
五、总结
Kafka适用于吞吐量高,消费者处理能力高的场景,不太适用消费者处理能力低的场景。如果消费者处理能力低,可以使用其他的中间件,比如:rabbitmq。
kafka消费者处理能力低引起rebalance分析的更多相关文章
- Kafka消费者没有收到通知的分析
今天遇到两位三方人员跟我反馈,某微服务的异步接口功能不正常了,由于该异步接口采用Kafka异步消息的方案,对方说没有收到Kafka给消费者的通知,根据此问题,联系了相关人员进行了分析: (一)明确环境 ...
- Kafka消费者-从Kafka读取数据
(1)Customer和Customer Group (1)两种常用的消息模型 队列模型(queuing)和发布-订阅模型(publish-subscribe). 队列的处理方式是一组消费者从服务器读 ...
- Kafka权威指南 读书笔记之(四)Kafka 消费者一一从 Kafka读取数据
KafkaConsumer概念 消费者和消费者群组 Kafka 消费者从属于消费者群组.一个群组里的消费者订阅的是同一个主题,每个消费者接收主题一部分分区的消息. 往群组里增加消费者是横向伸缩消费能力 ...
- Kafka 学习之路(四)—— Kafka消费者详解
一.消费者和消费者群组 在Kafka中,消费者通常是消费者群组的一部分,多个消费者群组共同读取同一个主题时,彼此之间互不影响.Kafka之所以要引入消费者群组这个概念是因为Kafka消费者经常会做一些 ...
- Kafka 系列(四)—— Kafka 消费者详解
一.消费者和消费者群组 在 Kafka 中,消费者通常是消费者群组的一部分,多个消费者群组共同读取同一个主题时,彼此之间互不影响.Kafka 之所以要引入消费者群组这个概念是因为 Kafka 消费者经 ...
- 带你涨姿势的认识一下 Kafka 消费者
之前我们介绍过了 Kafka 整体架构,Kafka 生产者,Kafka 生产的消息最终流向哪里呢?当然是需要消费了,要不只产生一系列数据没有任何作用啊,如果把 Kafka 比作餐厅的话,那么生产者就是 ...
- 5.Kafka消费者-从Kafka读取数据(转)
http://www.dengshenyu.com/%E5%88%86%E5%B8%83%E5%BC%8F%E7%B3%BB%E7%BB%9F/2017/11/14/kafka-consumer.ht ...
- Kafka系列2:深入理解Kafka消费者
Kafka系列2:深入理解Kafka消费者 上篇聊了Kafka概况,包含了Kafka的基本概念.设计原理,以及设计核心.本篇单独聊聊Kafka的消费者,包括如下内容: 生产者是如何生产消息 如何创建生 ...
- 入门大数据---Kafka消费者详解
一.消费者和消费者群组 在 Kafka 中,消费者通常是消费者群组的一部分,多个消费者群组共同读取同一个主题时,彼此之间互不影响.Kafka 之所以要引入消费者群组这个概念是因为 Kafka 消费者经 ...
- 我是如何将一个老系统的kafka消费者服务的性能提升近百倍的
☞☞☞ 我是如何将一个老系统的kafka消费者服务的性能提升近百倍的 ☜☜☜ ○○○○○○○○○○○○○○○ 大家好,又见面了~ kafka作为一种高吞吐量的分布式发布订阅消息系统,在业务系统中被广泛 ...
随机推荐
- STM32 CubeMX 学习:06-配置DMA
--- title: mcu-stm32-cube-06-配置DMA date: 2020-05-31 16:39:05 categories: tags: - stm32 - cubeMx - dm ...
- Elastic-Search 整理(二):高级篇
ES高级篇 集群部署 集群的意思:就是将多个节点归为一体罢了,这个整体就有一个指定的名字了 window中部署集群 - 了解 把下载好的window版的ES中的data文件夹.logs文件夹下的所有的 ...
- 树莓派4B-控制霍尔编码器
霍尔编码器-直流减速电机 介绍 直流减速电机,即齿轮减速电机,是在普通直流电机的基础上,加上配套齿轮减速箱.齿轮减速箱的作用是,提供较低的转速,较大的力矩.同时,齿轮箱不同的减速比可以提供不同的转速和 ...
- python使用flask框架生成excle返回前端(包含图片、表格、表头灰色、表格加边框)
python使用flask框架生成excle文档,文档中包含图片和表格,其中表格要包含图片.表格.表头灰色.表格加边框,照片和表格不重叠. 逻辑:获得图片的高度,根据高度计算表格从第几行开始插入. 效 ...
- SpringBoot获取指定Resource下的文件内容
加入依赖 <dependency> <groupId>commons-io</groupId> <artifactId>commons-io</a ...
- PTA数据结构和答案解析
背景:期末数据结构复习题 绪论和线性表 判断题 The Fibonacci number sequence {F N } is defined as: F 0 =0, F 1 =1, F N =F N ...
- Quartus Ⅱ调用FIFO IP核方法实现求和(Mega Wizard)
摘要:本次实验学习记录主题为"FIFO_IP核实现算术求和",主要内容是上位机通过串口向FPGA发送一定规格的数字矩阵,FPGA对矩阵处理,按规定逻辑实现求和运算,将结果返回串口转 ...
- 数据库中的空值处理(reader.IsDBNull(index))
数据库中空值的处理 -> 准备一张新表 create table nullTable ( id int primary key, name nvarchar(10) ) insert into ...
- tp5框架No input file specified
最近从网上下载了一个项目,本地搭建好环境.访问页面出现No input file specified. 这个问题之前就遇到过,是因为权限的问题,导致nginx无法解析php文件,这次有点不一样所以记录 ...
- [oeasy]python0095_乔布斯求职_雅达利_atari_breakout_打砖块_布什内尔_游戏机_Jobs
编码进化 回忆上次内容 上次 我们回顾了 电子游戏的历史 从 电子游戏鼻祖 双人网球 到 视频游戏 PingPong 再到 街机游戏 Pong 雅达利 公司 来了 嬉皮士 捣乱? 布什内尔 会如何 应 ...