Kafka 消息重复消费原因
kafka每个消息写进去,都有一个offset,代表他的序号。
然后consumer消费了数据之后,每隔一段时间,会把自己消费过的消息的offset提交一下提交到zookeeper,
代表我已经消费过了,下次要是重启,你就让我继续从上次消费到的offset来继续消费吧。
如果因为一些死机等原因, 导致consumer有些消息处理了,但是没来得及提交offset。重启之后,这些未提交的offset的消息会再消费一次。
如何避免?
只能通过消费端 做一些消费记录 或者 限制 来避免,比如 数据库加唯一索引防止重复插入数据, 每次消费的消息ID都写入 一个Set,消费前先进行比较 等等方法。