漏消费和重复消费
漏消费:已经消费了的数据,但是offset没提交
重复消费:先提交了offset后消费,有可能会造成数据的漏消费
- 场景1:重复消费。自动提交offset引起。
- 场景1:漏消费。设置offset为手动提交,当offset被提交时,数据还在内存中未落盘,此时刚好消费者线程被kill掉,那么offset已经提交,但是数据未处理,导致这部分内存中的数据丢失。
解决
消费者采用事务。
如果想完成Consumer端的精准一次性消费,那么需要Kafka消费端将消费过程和提交offset过程做原子绑定。此时我们需要将Kafka的offset保存到支持事务的自定义介质(比如MySQL)。这部分知识会在后续项目部分涉及。