Kafka消费端抛出异常Offset commit cannot be completed since the consumer is not part of an active group for auto partition assignment; it is likely that the consumer was kicked out of the group的解决方案
总结/朱季谦
在一次测试Kafka通过consumer.subscribe()指定偏移量Offset消费过程中,因为设置参数不当,出现了一个异常提示——
[2024-01-04 16:06:32.552][ERROR][main][org.apache.kafka.clients.consumer.internals.ConsumerCoordinator|1050][Consumer clientId=consumer-group.id-1, groupId=group.id] Offset commit with offsets {topic-123-0=OffsetAndMetadata{offset=124, leaderEpoch=null, metadata=''}} failed
org.apache.kafka.clients.consumer.CommitFailedException: Offset commit cannot be completed since the consumer is not part of an active group for auto partition assignment; it is likely that the consumer was kicked out of the group.
这个异常翻译过来,是“偏移提交不能完成,因为消费者不是自动分区分配的活动组的一部分;这名消费者很可能被踢出了该组合。”
说明出现消费组断开的问题。
出现这个问题,需要关注一个参数properties.put(ConsumerConfig.MAX_POLL_INTERVAL_MS_CONFIG, 500)。
这个ConsumerConfig.MAX_POLL_INTERVAL_MS_CONFIG是max.poll.interval.ms,表示最大轮询间隔时间,若手动设置为500,意味着消费者在两次连续轮询之间最多只能等待500毫秒。如果超过该最大轮询时间,消费者将被认为已经失去连接,从而触发重新平衡操作,将其分配给其他消费者。
该参数如果设置较小,可能会导致频繁重新平衡,而消费者本身没有问题的情况下,设置过小反而影响频繁导致该消费者无法正常工作,就会抛出以上异常。但是,若设置过大的话,可能导致消费者在长时间无法处理新的记录。
因此,这个参数需要比较合理设置比较好。
同时,还需要关注另外一个参数——
ConsumerRecords<String, String> records = consumer.poll(Duration.ofMillis(500));
这行代码表示尝试从Kafka的topic中在最多 500 毫秒内从主题中获取的一批记录的对象。
消费者两次连续轮询之间的等待时间,除了跟业务处理有关外,还跟这个拉取条数有关,若一次拉取过多,其轮询时间必然跟着变长。
模拟一下线上拉取代码消费做处理业务逻辑如下——
while (true){
long start = System.currentTimeMillis();
ConsumerRecords<Integer, String> records = consumer.poll(Duration.ofMillis(500));
for (ConsumerRecord<Integer, String> record : records){
//模拟处理业务
Thread.sleep(10);
System.out.println("处理业务中");
}
long end = System.currentTimeMillis();
System.out.println("耗时:" + ( end- start) );
consumer.commitAsync();
}
max.poll.interval.ms设置的大小,应该在Duration.ofMillis(500)基础上,加上其业务处理耗时的时间。
测试运行一下观察耗时:
假如该处理逻辑平均耗时为:1151毫秒,那么max.poll.interval.ms应该设置比1151毫秒大,当然,还需考虑一些额外突发耗时情况在内。
反正不能比1151毫秒小,若比1151毫秒小,就会抛出org.apache.kafka.clients.consumer.CommitFailedException异常。
除了调整max.poll.interval.ms比消费逻辑耗时大之外,还可以调整consumer.poll(Duration.ofMillis(500))和max.poll.records,控制每次poll处理耗时降低。
Kafka消费端抛出异常Offset commit cannot be completed since the consumer is not part of an active group for auto partition assignment; it is likely that the consumer was kicked out of the group的解决方案的更多相关文章
- kafka消费端提交offset的方式
Kafka 提供了 3 种提交 offset 的方式 自动提交 复制 1234 consumer.commitSync(); 手动异步提交 offset 复制 1 consumer.commitAsy ...
- 5种kafka消费端性能优化方法
摘要:带你了解基于FusionInsight HD&MRS的5种kafka消费端性能优化方法. 本文分享自华为云社区<FusionInsight HD&MRSkafka消费端性能 ...
- 涨姿势了解一下Kafka消费位移可好?
摘要:Kafka中的位移是个极其重要的概念,因为数据一致性.准确性是一个很重要的语义,我们都不希望消息重复消费或者丢失.而位移就是控制消费进度的大佬.本文就详细聊聊kafka消费位移的那些事,包括: ...
- Dubbo学习笔记2:Dubbo服务提供端与消费端应用的搭建
Demo结构介绍 Demo使用Maven聚合功能,里面有三个模块,目录如下: 其中Consumer模块为服务消费者,里面TestConsumer和consumer.xml组成了基于Spring配置方式 ...
- Kafka消费组(consumer group)
一直以来都想写一点关于kafka consumer的东西,特别是关于新版consumer的中文资料很少.最近Kafka社区邮件组已经在讨论是否应该正式使用新版本consumer替换老版本,笔者也觉得时 ...
- Kafka设计解析(十三)Kafka消费组(consumer group)
转载自 huxihx,原文链接 Kafka消费组(consumer group) 一直以来都想写一点关于kafka consumer的东西,特别是关于新版consumer的中文资料很少.最近Kafka ...
- SparkStreaming消费Kafka,手动维护Offset到Mysql
目录 说明 整体逻辑 offset建表语句 代码实现 说明 当前处理只实现手动维护offset到mysql,只能保证数据不丢失,可能会重复 要想实现精准一次性,还需要将数据提交和offset提交维护在 ...
- KAFKA报错:COMMIT CANNOT BE COMPLETED SINCE THE GROUP HAS ALREADY REBALANCED AND ASSIGNED THE PARTITIONS TO ANOTHER MEMBER
转载:https://www.greenhtml.com/archives/Commit-cannot-be-completed-since-the-group-has-already-rebalan ...
- kafka Auto offset commit faild reblance
今天在使用python消费kafka时遇到了一些问题, 特记录一下. 场景一. 特殊情况: 单独写程序只用来生产消费数据 开始时间: 10:42 Topic: t_facedec Partition: ...
- 【kafka】-分区-消费端负载均衡
一.为什么kafka要做分区? 因为当一台机器有可能扛不住(类比:就像redis集群中的redis-cluster一样,一个master抗不住写,那么就多个master去抗写),把一个队列的单一mas ...
随机推荐
- FE宝典
前端学科面试宝典 蔡威 [电子邮件地址] HTML5.CSS3..................................................................... ...
- 避免Java异常栈被吞掉
The compiler in the server VM now provides correct stack backtraces for all "cold" built-i ...
- AIRIOT赋能水务行业深度转型,打造智慧水务“四化建设”
水利水务与民生息息相关,随着我国智慧城市建设的推进及科学技术的不断发展,对城市供水管理产生了尤为重要的影响.面对水务行业信息化建设周期长,无统一的技术标准和数据标准,信息孤岛严重,协同工作能力受制 ...
- dbeaver使用详解
1.dbeaver使用本地驱动 解压 点击可执行文件 驱动管理 新建驱动 起名字 com.mysql.jdbc.Driver jdbc:mysql//{host}[:{port}]/[{databas ...
- 实用!!!!springBoot加入微信扫码支付功能,有一说一还是挺有意思的
基于springboot微服务加入微信支付的功能 在线微信支付开发文档: https://pay.weixin.qq.com/wiki/doc/api/index.html native扫码支付方式: ...
- 首次调用u8api遇到的问题总结
1.检索 COM 类工厂中 CLSID 为 {72A6FADA-FE26-46BD-A921-BFD1179C1E1E} 的组件时失败,原因是出现以下错误: 80040154. 解决办法是,把编译 ...
- CSS——3D转换
- 记录一下Android usb相关的知识学习
在SecondStageMain中会先调用PropertyInit做属性初始化,该方法会调用PropertyLoadBootDefaults加载持久化的属性主要加载位置: /system/build. ...
- 微软官方开源免费的Blazor UI组件库 - Fluent UI Blazor
前言 今天大姚给大家分享一个由微软官方开源(MIT License).免费的Blazor UI组件库:Fluent UI Blazor. 全面的ASP.NET Core Blazor简介和快速入门 F ...
- uniapp 组件使用
组件使用情况:页面出现多个相似的页面这个时候我们就可以把公共的页面进行封装,避免冗余的代码 1. compoents 目录下新建组件,名称随意[案例就叫 newsList]2. 开始封装需要多次使用的 ...