Kafka 消息丢失和消息重复消费

1. 消息丢失

  1. producer 的acks参数值设置为‘0’或者‘1’,不等待服务器确认或者只让leader确认

    解决方法:将acks的值设置为all或者-1,让leader和followers全部进行确认

  2. producer 没有设置失败重试

    解决方法:根据实际场景将retries参数值设置为正整数

  3. consumer poll到消息后还未来的及完全消费,便已经提交

    解决方法:这种情况是在自动提交的情况下发生的,如果enable.auto.commit值为true,可以根据实际场景将auto.commit.interval.ms的值调大。如果enable.auto.commit值为false,就调用commitSync方法手动提交offset。

2. 消息重复消费

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

解决方法:consumer 关闭自动提交,使用手动提交。producer发送消息时对消息封装一个唯一标识ID。consumer消费消息前根据唯一标识查询Redis,存在就不消费,不存在就消费,在提交前向Redis set一条记录。
kafka API地址

只有把命运掌握在自己手中,从今天起开始努力,即使暂时看不到希望,也要相信自己。因为比你牛几倍的人,依然在努力。
原文地址:https://www.cnblogs.com/freesky168/p/14358160.html