1. 消息丢失
      producer 的 acks 参数值设置为‘0’或者‘1’,不等待服务器确认或者只让 leader 确认
      解决方法:将 acks 的值设置为 all 或者 -1,让 leader 和 followers 全部进行确认

    producer 没有设置失败重试
    解决方法:根据实际场景将 retries 参数值设置为正整数

    consumer poll 到消息后还未来的及完全消费,便已经提交
    解决方法:这种情况是在自动提交的情况下发生的,如果 enable.auto.commit 值为 true,可以根据实际场景将 auto.commit.interval.ms 的值调大。如果 enable.auto.commit 值为 false,就调用 commitSync 方法手动提交 offset。

    1. 消息重复消费
      consumer 在 partition 中的位置是通过提自己 offset+1 实现的,offset 的提交方式有自动提交和手动提交两种。自动提交 offset 情况下,当消息消费完成,在提交之前(甚至是前一瞬间)consumer 宕机,那么 consumer 重启后的 poll 的 offset 依然是宕机前消费的那个 offset , 因此造成重复消费。同样的,手动提交模式下,在提交代码调用之前, consumer 宕机也会造成消息重复消费

    解决方法:consumer 关闭自动提交,使用手动提交。producer 发送消息时对消息封装一个唯一标识 ID。consumer 消费消息前根据唯一标识查询 Redis,存在就不消费,不存在就消费,在提交前向 Redis set 一条记录。
    kafka API 地址
    ————————————————
    版权声明:本文为CSDN博主「_chenyl」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
    原文链接:https://blog.csdn.net/qwqw3333333/article/details/108510717