首先,比如 RabbitMQ、 RocketMQ、 Kafka,都有可能会出现消息重复消费的问题。因为这问题通常不是 MQ 自己保证的,是由我们开发来保证的。Kafka 实际上有个 offset 的概念,就是每个消息写进去,都有一个 offset,代表消息的序号,然后 consumer 消费了数据之后,每隔一段时间(定时定期),会把自己消费过的消息的 offset 提交一下,表示已经消费过了,下次我要是重启就从上次消费到的offset来继续消费 。
直接 kill 进程再重启,这会导致 consumer 有些消息处理了,但是没来得及提交 offset。重启之后,少数消息会再次消费一次。
注意:本文归作者所有,未经作者允许,不得转载