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作为一种高吞吐量的分布式发布订阅消息系统,在业务系统中被广泛 ...
随机推荐
- 【论文阅读】RAL2022: Make it Dense: Self-Supervised Geometric Scan Completion of Sparse 3D LiDAR Scans in Large Outdoor Environments
0. 参考与前言 论文链接:https://ieeexplore.ieee.org/document/9812507 代码链接:https://github.com/PRBonn/make_it_de ...
- 深度解读昇腾CANN多流并行技术,提高硬件资源利用率
本文分享自华为云社区<深度解读昇腾CANN多流并行技术,提高硬件资源利用率>,作者:昇腾CANN. 随着人工智能应用日益成熟,文本.图片.音频.视频等非结构化数据的处理需求呈指数级增长,数 ...
- 实测分享,瑞芯微RK3588八核国产处理器性能测评!确实“遥遥领先”!
RK3588处理器优势 RK3588是瑞芯微最新一代旗舰工业处理器,它具有如下卓越优势: 超强运算能力:四核ARM Cortex-A76@2.4GHz + 四核ARM Cortex-A55@1.8GH ...
- JpaRepository:Paging query needs to have a Pageable parameter! Offending method public abstract
在练习 Spring Data JPA 时,使用分页接口 Pageable 查询数据,接口实现后,运行报错: Paging query needs to have a Pageable paramet ...
- yb课堂 搭建node环境和npm安装 《二十六》
搭建node环境和npm安装 什么是NodeJS? Node.js就是运行在服务端得JavaScript 什么是npm? nodejs的包管理工具,可以下载使用公共仓库的包,类似maven包安装分为本 ...
- [oeasy]python0069_帮助手册_pydoc_manual_document
帮助手册 回忆上次内容 上次了解了注释 注释是为了让程序更可读 注释不会影响程序运行速度 注释分为两种 单行的 以#开头 不能是字符串当中的# 多行的 三个" 三个' 多 ...
- [oeasy]python0099_雅达利大崩溃_IBM的开放架构_兼容机_oem
雅达利大崩溃 回忆上次内容 个人计算机浪潮已经来临 苹果公司迅速发展 微软公司脱离mits准备做纯软件公司 IBM用大型机思路制作的5100惨败 Commodore 64 既做计算机 又做游戏机 计算 ...
- oeasy教您玩转python - 007 - # 字符本质
字符本质 回忆上次内容 hello world 不是从来就有的 来自于unix和c 虽然我们今天有各种先进的学习手段 最早的高级语言学习是从最早的那张打字机用纸的手写代码起源的 所以输出用的是 p ...
- 手写数字识别-使用TensorFlow构建和训练一个简单的神经网络
下面是一个具体的Python代码示例,展示如何使用TensorFlow实现一个简单的神经网络来解决手写数字识别问题(使用MNIST数据集).以下是一个完整的Python代码示例,展示如何使用Tenso ...
- XXL-JOB分片执行分布式任务
XXL-JOB相对于springtask来说优点之一就是分布式执行任务,可以在调度中心为执行器分发任务,实现分布式. 分片广播任务即当一个微服务形成集群的时候,任务会完整的下发给每一个执行器.而不像其 ...