Kafka和RabbitMQ都是消息系统。不能简单地说哪一个更好。选择使用哪一个,需要看你的项目需求。我们可以从下面几个方面来做一下比较。
成熟度 - 不用考虑,都很成熟
RabbitMQ和Kafka都是“成熟的”,它们都被认为是可靠而且可扩展的消息系统。RabbitMQ在2007年发布而Kafka发布时间是2011年。根据Confluent的报告,有超过1/3的世界500强企业在使用Kafka。而Zalando,WeWork,Wunderlist和Bloomberg等大企业也都在用RabbitMQ。
所以,成熟度上来看,放心使用,都是久经考验的好东西。
消息持久化 Persistence
Kafka区别于其他消息系统的一个显著特点就是,它可以持久化消息。根据配置的保存时间和大小,Kafka会保存最近一段时间的消息。默认是保留最近7天的消息,如果存储够的话,还可以保存更久。这就意味着消费者可以重复拉取消息。
RabbitMQ是阅后即焚。只要消费者消费了消息并且ack了,消息就被删除了。
有一个典型的场景,需要重新消费消息。当你的消费者程序有bug,当你修复了bug,想重新拉一下一些消息,Kafka会比较方便的支持。
消息路由 Routing
Kafka具有非常简单的路由方法。RabbitMQ支持更加复杂的方式将消息路由给消费者。
RabbitMQ有四个不同的路由选项:direct, topic, fanout 和 header exchanges。
direct,通过精确匹配routing key的方式路由。
topic,和direct类似,只不过支持通过通配符的方式匹配routing key。
fanout,可以将消息广播到绑定到该exchange的每个队列queue。
Kafka比较简单。逻辑上来说,消费者和生产者按照topic的方式来通信。生产者向一个或多个topic发送消息,消费者可以消费一个或者多个topic。
消息的优先级 Message Priority
RabbitMQ支持生产者给消息加上优先级。Kafka不支持。对于RabbitMQ来说,高优先级的消费会被消费者优先消费。对于Kafka来说,消费者需要按照顺序依次消费。
消息确认 Acknowledgment
Ack是消费者确认消息已经消费的机制。RabbitMQ和Kafka都支持。
性能扩展 Scaling
提高消费速度
可以通过增加RabbitMQ来加快消费的速度。对于Kafka来说,你可以通过增加partition的数量来提高生产和消费的速度。通过增加消费者组里面的消费者的数量来加快速度。
Broker的性能扩展
Kafka比RabbitMQ更加容易水平扩展。也就通过增加机器的数量来提高吞吐量。通常RabbitMQ是通过垂直扩展,也就提高单机的CPU,Mem来提高性能。
先分享这些,后面可以再补充更多。。。
参考我的视频《[动画] 为什么我们需要消息系统 Kafka》了解什么是消息系统。
本人,@小马过河Vizit,专注于分布式系统原理和实践分享。希望利用动画生动而又准确地演示抽象的原理。
关于我的名字。小马过河Vizit,意为凡事像小马过河一样,需要自己亲自尝试、探索才能获得乐趣和新知。Vizit是指Visualize it的缩写。一图胜千言,希望可以利用动画来可视化抽象的原理。
欢迎关注,点赞! 谢谢支持。