kafka重复消费(总结)

kafka重复消费(总结)

根本原因

已经消费的数据,但是offset没有成功提交

具体情况:

  1. 消费者宕机、重启,导致消息已经消费但是未提交offset。
  2. 消费者处理比较耗时,一次poll的数据,在max.poll.interval.ms达到最大值后仍未完成,未提交offest,触发rebalance。
  3. 消费者使用自动提交offset,但当还没有到auto.commit.interval.ms的时间,没来的及提交。有新的消费者加入或者移除,发生了rebalance。
  4. 超过session.timeout.ms的时间未发送心跳包,集群认为consumer宕机,触发rebalance,一般为网络问题。

解决方法

如下几种:

  1. 根据每条消息的平均处理时长,减少每次poll的个数。
  2. 提高max.poll.interval.ms的值。
  3. 给每个消息添加唯一索引,缓存消费过的消息id。
  4. consumer异步处理消息。

关键参数配置

max.poll.records

consumer每次poll的条数。
默认500条

max.poll.interval.ms

两次调用poll取数据的最大延迟时间,超过这个时间消费组会发生rebalance。
默认5分钟

heartbeat.interval.ms

consumer发送心跳包的间隔。
默认3秒

session.timeout.ms

consumer发送心跳包的超时时间。
默认10秒

enbale.auto.commit

是否自动提交offset。
默认为true

auto.commit.interval.ms

当enbale.auto.commit参数设置为 true 时才生效,表示开启自动提交消费位移功能时自动提交消费位移的时间间隔。
默认5秒

参考链接:
kafka重复消费
重复消费解决办法
重要参数配置

  • 2
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Kafka重复消费指的是消费者可能会在某些情况下重复消费相同的消息。Kafka一个分布式消息系统,它的消费者组可以有多个消费者同时消费一个主题的消息。当某个消费者消费一条消息时,Kafka 就会将该消息的 offset 值保存在消费者组的 offset 管理器中。这样,其他消费者就可以从该 offset 值开始消费后续的消息。 Kafka重复消费可能发生在以下几种情况下: 1. 消费者手动重置 offset:如果消费者手动将 offset 重置到之前已经消费过的位置,那么接下来消费者就会重新消费之前已经消费过的消息。 2. 消费者组 rebalance:当消费者组发生 rebalance 时,消费者会重新分配分区。如果一个消费者之前消费了某个分区的消息,但在 rebalance 后该分区被分配给了另一个消费者,那么该消费者就会重新消费分区之前已经消费过的消息。 3. 消息重复发送:在某些情况下,生产者可能会重复发送相同的消息。如果消费者消费该消息时出现了异常,那么该消息就可能被重复消费。 为了避免 Kafka重复消费,可以考虑使用以下几种策略: 1. 自动管理 offset:Kafka 提供了自动管理 offset 的功能,消费者可以将 offset 保存在 Kafka 中,这样就可以避免手动重置 offset 的问题。 2. 避免 rebalance:可以通过调整消费者组的配置来避免 rebalance 的频繁发生。 3. 消费幂等性:消费者可以实现消费幂等性,即使消息重复消费也不会对系统产生影响。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值