背景 在kafka的消费者中,如果消费某条消息出错,会导致该条消息不会被ack,该消息会被不断的重试,阻塞该分区的其他消息的消费,因此,为了保证消息队列不被阻塞,在出现异常的情况下,我们一般还是会ack该条消息,再另外对失败的情况进行重试 目标 实现一个完善的重试逻辑,一般需要考虑一下几个因素: 重试的时间间隔 最大重试次数 是否会漏掉消息 实现 扔回队尾 在消息出错时,将消息扔回队尾 优点: 实现简单,没有别的依赖项 缺点: 无法控制重试时间间隔 基于数据库任务表的扫描方案 在数据库中增加一个