1 生产者
acks = 1 或 -1,当消息已经写入leader或ISR中的folloer后,brocker给生产者发送确认响应后发送网络抖动或leader崩溃又崩溃重启,生产者发现没有确认响应再次发送,导致消息brocker中出现了两条重复的消息,重复发送导致。
解决: 精确一次发送方案 = (acks=-1) + 事务 + 重试
2 消费者
消费者设为手动提交时,当消费者消费完消息又因为其它异常情况进程中断导致没有提交偏移量,又重启消费者,再次拉取同一条消息进行消费,导致brocker中同一条消息被消费两次,重复消费导致。
解决:
- 消费者自身要做好分情况异常处理;
- 需要有幂等处理逻辑,可以用id号等。