1、Kafka可以保证顺序处理消息,RabbitMQ相对较弱。
2、在消息路由和过滤方面,RabbitMQ提供了更好的支持。
3、RabbitMQ有消息存活时间(TTL)和延迟/预定消息功能,Kafka没有。
4、在消息留存方面,RabbitMQ消息一旦消费成功就会删除,反之处理失败则放回,但Kafka会保留消息,根据超时时间来删除消息,所以Kafka可以反复消费消息。
5、在容错处理上,RabbitMQ提供了诸如交付重试和死信交换器(DLX)来处理消息处理故障,相反,Kafka没有提供这种开箱即用的机制,需要在应用层提供和实现消息的重试机制。
6、在伸缩方面,通常Kafka(使用顺序磁盘I/O来提供性能)被认为比RabbitMQ有更优越的性能,从Kafka使用分区的架构上看,它在横向扩展上会优于RabbitMQ,当然,RabbitMQ在纵向扩展上会有更多的优势,而且在吞吐量上,Kafka每秒可处理十几万消息,RabbitMQ每秒可处理几万消息,如果系统达不到百万级用户量,可以不关心伸缩性问题。
7、RabbitMQ(智能代理和傻瓜式消费者模式)比Kafka(傻瓜式代理和智能消费者模式)在消费者复杂度上更简单。
8、优先选择RabbitMQ的条件:
·高级灵活的路由规则
·消息时序控制(控制消息过期或消息延迟)
·高级的容错处理能力,在消费者更有可能处理消息不成功的情景中(瞬时或持久)
·更简单的消费者实现
9、 优先选择Kafka的条件:
·严格的消息顺序
·延长消息留存时间,包括过去消息重放的可能
·传统解决方案无法满足的高伸缩能力