kafka CommitFailedException异常

这篇具有很好参考价值的文章主要介绍了kafka CommitFailedException异常。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

大家好,我是三叔,很高兴这期又和大家见面了,一个奋斗在互联网的打工人。

记一次kafka生产Bug:CommitFailedException

kafka消费端消费消息出现多次同一个消息推送给后台离线处理平台,且消息消费越来越慢。于是查看生产日志,发现了有重复消费的ID,且offset都是一样的。

一开始怀疑是因为后台处理数据失败,调度对失败的消息进行重试,那么问题来了:如果是重试,那么发送到kafka消息的offset应该是不一样的,但是查看日志发现,重复消费的消息id和offset一模一样,于是查看日志后面的error信息:

CommitFailedException: offset commit cannot be complated since the sonsumer is not part of an active ...

大概就是出现了这么一个错误。

根据error日志的信息提示,大概就是offser偏移量提交失败,CommitFailedException 是Kafka中的一个异常,通常在消费者提交offset失败时抛出。消费者提交offset是为了记录它们已经处理了哪些消息,以便在发生故障或重新启动后能够从正确的位置继续消费。如果消费者提交offset失败,则可能会导致消息被重复消费或跳过未处理的消息。

另外,笔者查阅资料,当消费者重复提交相同的offset时,Kafka消费者日志可能会记录以下警告消息:

WARN Offset commit failed on partition [topic]-[partition]: 
Commit cannot be completed since the group has already rebalanced 
and assigned the partitions to another member. This means that the
time between subsequent calls to poll() was longer than the configured
 max.poll.interval.ms, which typically implies that the poll loop is 
 spending too much time message processing. You can address this either
  by increasing the session timeout or by reducing the maximum size of 
  batches returned in poll() with max.poll.records.

此警告消息表明消费者尝试提交相同的offset,但由于消费者组已经重新平衡,因此提交失败。这通常表示消费者在处理消息时花费的时间过长,导致Kafka认为消费者已死亡并重新平衡消费者组。如果读者看到此警告消息,可以考虑下面这些解决措施:

  1. 优化消费者端代码以加快消息处理速度;
  2. 或增加max.poll.interval.ms配置值,以便消费者有更长的时间来处理消息,比如:
spring.kafka.consumer.max.poll.interval.ms=500000;// 根据接口处理业务逻辑的时间来处理,比如我这里处理业务逻辑最慢可以达到1分钟甚至
  1. 或者设置records值,控制消费拉取的数量
spring.kafka.consumer.max.poll.records=3;// 比如每次拉取3条消息,根据业务执行时间来设置

总结:CommitFailedException异常通常有以下几个原因

  1. 超时:如果消费者在规定的时间内没有提交offset,就会抛出CommitFailedException异常。这通常是因为消费者处理消息的时间太长,或者消费者提交offset的频率太低,消费者在规定的时间内没有发送心跳信号,则该消费者将被视为死亡并从消费者组中移除,导致提交offset超时。
  2. 重复提交:如果消费者在短时间内多次提交相同的offset,就会抛出CommitFailedException异常。这可能是由于消费者代码中的错误或线程同步问题导致的。
  3. 重启:如果消费者重启,它将从消费者组中删除并重新加入消费者组。在这种情况下,之前提交的offset将不再有效,因为消费者已经从消费者组中移除。
  4. 资源不足:如果Kafka集群没有足够的资源来处理消费者提交的offset,就会抛出CommitFailedException异常。例如,如果Kafka集群已经达到了最大负载,就可能无法处理消费者提交的offset。
  5. Kafka集群故障:如果Kafka集群出现故障,例如领导者节点崩溃或磁盘故障,就可能导致消费者提交offset失败并抛出CommitFailedException异常。
  6. 其他消费者重复提交:如果另一个消费者提交了相同的offset,那么自己的消费者就无法提交offset。因为提交相同的offset可能会导致消费者组中的其他消费者丢失消息,所以Kafka会拒绝重复提交相同的offset。

如果大家在开发中遇到Kafka日志中出现CommitFailedException异常,请检查消费者提交offset的频率和代码,确保消费者在规定的时间内提交offset,并避免重复提交相同的offset。如果问题仍然存在,请检查Kafka集群的健康状况,并确保集群有足够的资源来处理消费者提交的offset,可以考虑笔者上面设置的两个配置文件进行处理。文章来源地址https://www.toymoban.com/news/detail-730809.html

到了这里,关于kafka CommitFailedException异常的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Kafka报错:Controller 219 epoch 110 failed to change state for partition

    集群里面kafka报错: Controller 219 epoch 110 failed to change state for partition maxwell_atlas-0 from OfflinePartition to OnlinePartition kafka.common.stateChangeFailedException: Failed to elect leader for partition maxwell_atlas-0 under strategy OfflinePartitionLeaderElectionStrategy 错误原因: 新增加的副本的offset比leader的新,所以在

    2024年02月15日
    浏览(53)
  • kafka消费者报错Offset commit ......it is likely that the consumer was kicked out of the group的解决

    2022年10月份接到一个小功能,对接kafka将数据写到数据库,开始的需求就是无脑批量insert,随着时间的推移,业务需求有变更,kafka的生产消息频次越来越高,到今年7月份为止就每秒会有几十条甚至上百条,然后消费消息的代码就报错: Caused by: org.apache.kafka.clients.consumer.Com

    2024年02月07日
    浏览(49)
  • Spring boot 项目Kafka Error connecting to node xxx:xxx Kafka项目启动异常 Failed to construct kafka consumer

    新建了一个springBoot集成Kafka的项目配置好yml后发现启动失败: 下面是Kafka配置: node1:9092,node2:9092,node3:9092 是kafka的主机名,我是由之前的旧项目(非springBoot)迁移到新建项目的,所以链接名就直接抄过来了。 我以为是链接出了问题,我就换成ip形式,把node1:9092,node2:9092,node

    2023年04月08日
    浏览(36)
  • kafka查询offset&生产者offset计算&消费offset计算

    1、简介 ​ kafka的介绍:略…(有兴趣的同学可自行Google,这与本文无关 ^ _ ^) 2、需求背景 ​ 对kafka做监控,需要获取到kafka接收到消息的offset和被消费者消费掉消息的offset,编写接口将数值交给prometheus,直接观察判断kafka的消费性能如何。(如何自定义prometheus的监控指标后续

    2023年04月25日
    浏览(81)
  • 链接KAFKA异常:Authentication failed during authentication due to invalid credentials with SASL mechanism

    使用带kerberos 认证的Kafka客户端链接kafka 创建topic 出现如下异常:Authentication failed during authentication due to invalid credentials with SASL mechanism。kafka server 后台只有如下异常信息: 开始排查问题原因: 通过查看Kafka源代码定位到错误大致发生在: 大概是在  saslServer.evaluateResponse 的时

    2024年02月11日
    浏览(42)
  • kafka--kafka的基本概念-topic和partition

    topic是逻辑概念 以Topic机制来对消息进行分类的,同一类消息属于同一个Topic,你可以将每个topic看成是一个消息队列。 生产者(producer)将消息发送到相应的Topic,而消费者(consumer)通过从Topic拉取消息来消费 kafka中是要求消费者主动拉取消息消费的,它并不会主动推送消息

    2024年02月12日
    浏览(45)
  • Kafka-Topic&Partition

    topic partition,是Kafka两个核心的概念,也是Kafka的基本组织单元。 主题作为消息的归类,可以再细分为一个或多个分区,分区也可以看作对消息的二次归类。 分区的划分为kafka提供了可伸缩性、水平扩展性、容错性等优势。 分区可以有一个至多个副本,每个副本对应一个日志

    2024年01月23日
    浏览(55)
  • kafka—offset偏移量

    offset定义 :消费者再消费的过程中通过offset来记录消费数据的具体位置 offset存放的位置 :从0.9版本开始,consumer默认将offset保存在Kafka一个内置的topic(系统主题)中,名为__consumer_offsets,即offset维护在系统主题中 说明:__consumer_offsets 主题里面采用 key 和 value 的方式存储数

    2024年02月05日
    浏览(74)
  • Kafka之offset位移

    offset :在 Apache Kafka 中,offset 是一个用来唯一标识消息在分区中位置的数字。每个分区中的消息都会被分配一个唯一的 offset 值,用来表示该消息在该分区中的位置。消费者可以通过记录自己消费的最后一个 offset 值来跟踪自己消费消息的进度,确保不会漏掉消息或者重复消

    2024年04月10日
    浏览(41)
  • Kafka入门,手动提交offset,同步提交,异步提交,指定 Offset 消费(二十三)

    虽然offset十分遍历,但是由于其是基于时间提交的,开发人员难以把握offset提交的实际。因此Kafka还提供了手动提交offset的API 手动提交offset的方法有两种:分别commitSync(同步提交)和commitAsync(异步提交)。两者的相同点是,都会将本次提交的一批数据最高的偏移量提交:不同点是

    2024年02月11日
    浏览(47)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包