重复消费场景:

  • 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

Kafka开源项目指南提供详尽教程,助开发者掌握其架构、配置和使用,实现高效数据流管理和实时处理。它高性能、可扩展,适合日志收集和实时数据处理,通过持久化保障数据安全,是企业大数据生态系统的核心。

更多推荐