重复消费场景:

  • 1.消费端消费能力比较低,处理消息速度慢
  • 2.根据kafka消费特性,消费者在每个partion上的位置都是一个整数,即消费下一条消息的偏移量。这个状态可以定期检查点,使得消息的确认变得非常的方便,消费者可以倒退回旧的偏移量,重新消费。
  • 3.消息处理完之后提交下一个消费的offset,而在session-time-out前,消息还没有处理完,但是已经超时被kafka视为消费失败了,导致一直重复消费

解决方案:

  • 1.关闭spring-kafka的自动提交
  • 2.延长session-time-out,权衡max.poll.records减少poll()中返回的批次的最大大小来解决此问题,//一次从kafka中poll出来的数据条数
  • 3.权衡自动提交的时间点,ps最好不要使用这种方式,无法尽量避免重复
  • 4.完美解决的话,只有每次都判断消息是否重复消费过了,不过此方式性能开销比较大,严重影响QPS,根据场景取舍
Logo

助力广东及东莞地区开发者,代码托管、在线学习与竞赛、技术交流与分享、资源共享、职业发展,成为松山湖开发者首选的工作与学习平台

更多推荐