我们目前有一个可用的RabbitMQ实现,由于数据量较大,我们计划切换到Kafka。
我在一个问题上有疑虑。
在RabbitMQ中,当消费者从队列中消费消息时,消息会进入不同的阶段,即unacked阶段。客户端/消费者需要一些时间来处理消息,处理成功后,它会向队列发送确认信息,然后消息被从队列中删除。如果处理失败,在一定时间内,如果队列没有收到确认信息,则将消息追加到队列末尾。通过这种方式,我们不会丢失任何消息。
根据我对Kafka的一点了解,例如,如果未能成功处理消息100,则偏移量不会增加,但是如果成功处理消息101,则会增加偏移量。所以我丢失了消息100。
是否有一种方法可以保证不会丢失任何消息。