从下面几个维度分析:
一、消息的顺序
RabbitMQ:多个消费者无法严格保证顺序,因为会为每个消费者建立对应的队列。
kafka: 多个消费者直接去获取被保存在日志里的消息。
二、消息的匹配
RabbbitMQ:允许在消息中添加routing_key或者自定义消息头,然后通过一些特殊的 Exchange,
很简单的就实现了消息匹配分发。开发几乎不用成本。
kafka:消费者端必须先把所有消息不管需要不需要,都取出来。然后,再根据业务需求,自己去
实现各种精准和模糊匹配。可能因为过度的复杂性,还要引入规则引擎。
三、消息的超时
RabbbitMQ:消息自带手表,消息中有个 TTL 字段,可以设置消息在 RabbitMQ 中的存放的时
间,超时了会被移送到一个叫死信队列的地方。然后一个消费者去监听死信队列。当消息超时了,
监听死信队列的消费者就收到消息了。
kafka:消息先放入一个临时的 topic,然后得自己开发一个做中转的消费者。让这个中间的消费者
先去把消息从这个临时的 topic 取出来,就得把没有到时间的消息存入到数据库里;存入数据库中
的消息需要在时间到了之后再放入到 Kafka 里,以便真正的消费者去执行真正的业务逻辑。
四、消息的保持
RabbbitMQ:消息取出来就被删除了。
kafka:消息会被之旧话一个专门的日志文件里。不会因为被消费了就被删除。
五、消息的错误处理
RabbitMQ :它由于会在消息出问题或者消费错误的时候,可以重新入队或者移动消息到死信队
列,继续消费后面的,会省心很多。
kafka:当单个分区中的消息一旦出现消费失败,就只能停止而不是跳过这条失败的消息继续消费
后面的消息。即不允许消息空洞。只要消息出现失败,不管是 Kafka 自身消息格式的损坏,还是消
费者处理出现异常,是不允许跳过消费失败的消息继续往后消费的。
六、消息的吞吐量
RabbitMQ :吞吐量是每秒几万条消息。
Kafka :吞吐量是每秒几十万条消息。
总结:
RabbitMQ优点:自带消息匹配,延迟消息的处理,消息的错误处理。
kafka优点: 消息按顺序消费,消息可被再次消费,吞吐量高。
大家可以根据自身项目的需求结合上述6点场景的比对,进行合理的选择。