有参考 Kafka 消息队列,最终选择了 RabbitMQ,原因如下:
- 消息可靠性方面。Kafka 不能保证消息的完全可靠,对数据丢失不敏感;而 RabbitMQ 则保证绝对可靠 (AMOP 特性)。
- 消息传递方面。Kafka 中生产者发出的消息被均匀分布到多个 part 中,broker 收到消息后写入 segment 文件,只能当 segment 的消息条数达到配置数或者消息发布时间超过阈值时,segment 上的消息才会被 flush 到磁盘,最终被消费者收到;而 Rabbit 通过交换机 (Exchange) 实时转发消息。
- RabbitMQ 适合处理数据量小,但得保证实时且高可靠的消息。而 Kafka 的具有较高的数据吞吐量。
- RabbitMQ 的服务生产者和消费者能力需对等,否则消息堆积影响性能。而 Kafka 大量依赖 Zookeeper,我们的除了要监控 Kafka 之外还得监控 Zookeeper。
- Kafka 比较轻量级,而 RabbitMQ 比较重。
- 总的来说,对于选择 Kafka 还是 RabbitMQ,主要考虑三个因素:吞吐量、可靠性和平台熟悉度。如果是需要流处理和高并发的日志处理,首选 Kafka。但是大部分公司并没有什么高并发的处理,因此可以着重考虑可靠性和平台熟悉度,Kafka 也是有策略可以设置消息可靠的,但可靠性不如 RabbitMQ 好。RabbiMQ 使用简易,基本上就是” 开箱即用 “。
QPS(Queries Pre Second) :qps 为服务端每秒能执行的查询总数
RabbitMQ 与 Kafka 的区别参考:
消息中间件选型分析:从 Kafka 与 RabbitMQ 的对比看全局 - 掘金 (juejin.cn)