一.背景介绍

项目上进行算法调度的需求,打算采用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分析的更多相关文章

  1. Kafka消费者没有收到通知的分析

    今天遇到两位三方人员跟我反馈,某微服务的异步接口功能不正常了,由于该异步接口采用Kafka异步消息的方案,对方说没有收到Kafka给消费者的通知,根据此问题,联系了相关人员进行了分析: (一)明确环境 ...

  2. Kafka消费者-从Kafka读取数据

    (1)Customer和Customer Group (1)两种常用的消息模型 队列模型(queuing)和发布-订阅模型(publish-subscribe). 队列的处理方式是一组消费者从服务器读 ...

  3. Kafka权威指南 读书笔记之(四)Kafka 消费者一一从 Kafka读取数据

    KafkaConsumer概念 消费者和消费者群组 Kafka 消费者从属于消费者群组.一个群组里的消费者订阅的是同一个主题,每个消费者接收主题一部分分区的消息. 往群组里增加消费者是横向伸缩消费能力 ...

  4. Kafka 学习之路(四)—— Kafka消费者详解

    一.消费者和消费者群组 在Kafka中,消费者通常是消费者群组的一部分,多个消费者群组共同读取同一个主题时,彼此之间互不影响.Kafka之所以要引入消费者群组这个概念是因为Kafka消费者经常会做一些 ...

  5. Kafka 系列(四)—— Kafka 消费者详解

    一.消费者和消费者群组 在 Kafka 中,消费者通常是消费者群组的一部分,多个消费者群组共同读取同一个主题时,彼此之间互不影响.Kafka 之所以要引入消费者群组这个概念是因为 Kafka 消费者经 ...

  6. 带你涨姿势的认识一下 Kafka 消费者

    之前我们介绍过了 Kafka 整体架构,Kafka 生产者,Kafka 生产的消息最终流向哪里呢?当然是需要消费了,要不只产生一系列数据没有任何作用啊,如果把 Kafka 比作餐厅的话,那么生产者就是 ...

  7. 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 ...

  8. Kafka系列2:深入理解Kafka消费者

    Kafka系列2:深入理解Kafka消费者 上篇聊了Kafka概况,包含了Kafka的基本概念.设计原理,以及设计核心.本篇单独聊聊Kafka的消费者,包括如下内容: 生产者是如何生产消息 如何创建生 ...

  9. 入门大数据---Kafka消费者详解

    一.消费者和消费者群组 在 Kafka 中,消费者通常是消费者群组的一部分,多个消费者群组共同读取同一个主题时,彼此之间互不影响.Kafka 之所以要引入消费者群组这个概念是因为 Kafka 消费者经 ...

  10. 我是如何将一个老系统的kafka消费者服务的性能提升近百倍的

    ☞☞☞ 我是如何将一个老系统的kafka消费者服务的性能提升近百倍的 ☜☜☜ ○○○○○○○○○○○○○○○ 大家好,又见面了~ kafka作为一种高吞吐量的分布式发布订阅消息系统,在业务系统中被广泛 ...

随机推荐

  1. 在Linux应用层使用POSIX定时器

    在Linux应用层使用POSIX定时器 ref : http://blog.chinaunix.net/uid-28458801-id-5035347.html http://blog.sina.co ...

  2. React中的Ref

    React中ref是一个对象,它有一个current属性,可以对这个属性进行操作,用于获取DOM元素和保存变化的值.什么是保存变化的值?就是在组件中,你想保存与组件渲染无关的值,就是JSX中用不到的或 ...

  3. 粗枝大叶记录一下java9模块化改造一个项目的过程(Jigsaw)

    假设项目结构如下: 其中的依赖关系为 我实际用的jdk是17 1. common模块创建描述文件,在common的src/main/java下创建module-info.java, 内容默认 /** ...

  4. CF1862G 题解

    首先这个查询操作很迷,考虑先化简查询操作. 不难发现由于每次是加上一个逆的等差序列,因此一次操作完每个数与它的前驱之差一定会减少,因此加上等差序列的次数就等于全局每个数与它的前驱之差最大值. 又因为会 ...

  5. Spring Cloud 比较

    Spring Cloud 比较 一.简介 1.SpringCloud:一套微服务架构下的一站式解决方案,理念就是解决我们在微服务架构中遇到的任何问题: 2.SpringCloudAlibaba:阿里实 ...

  6. Windows下git配合Unity要设置autocrlf=false

    Unity的.asset文件的换行符一定是Unix (LF)格式的,哪怕在设置里选了用Windows (CRLF)也没用,这个选项只对创建的C# Script有效. 这些Unix换行文件提交上去没问题 ...

  7. Kolla-ansible部署openStack

    目录 Kolla-ansible部署openStack 1. 简介 2. 环境准备 3. 部署 3.1 基础环境配置 3.1.1 配置主机名,所有节点操作,这里以openstack01为例 3.1.2 ...

  8. 基于Docker安装项目管理工具禅道

    禅道是通用的项目管理软件 完整支持敏捷项目模型.瀑布项目模型.看板模型 内置项目集.产品.项目和执行四个管理框架 支持CMMI标准的落地实施 下载镜像 docker pull easysoft/zen ...

  9. [oeasy]python0007-调试程序_debug

    ​ 调试程序 回忆上次内容 ​py​​ 的程序是按照顺序执行的 是一行行挨排解释执行的 程序并不是数量越多越好 kpi也在不断演化 ​ 编辑 写的代码越多 出现的bug就越多 什么是bug 如何找bu ...

  10. vscode 常用设置

    vscode 常用设置   by:授客 QQ:1033553122   版本 vscode Version: 1.33.1   1.   自动保存文件设置 文件编辑一秒钟过后自动保存 2.   黏贴后 ...