消息中间件方案选型

消息中间件的选型应该从业务要解决问题的角度出发,可以从以下几个点考虑:

  • 是否能承受丢失消息
  • 业务是否有超过的吞吐量
  • 业务架构的适配性,如开发语言支持、AMQP协议支持等
  • 消息中间件本身的高可用作支持,监控方案、是否容易扩容、宕机是否有迁移方案等等

目前业内主流的消息中间件有三个:Kafka、RabbitMQ、RocketMQ。

Apache Kafka

Apache Kafka 最初是由LinkedIn公司设计实现的一个分布式的提交日志系统,之后成为Apache项目的一部分。Kafka 现在与大数据紧密结合,具有百万级TPS的吞吐量,在大数据场景采集、传输、存储的过程中发挥着举足轻重的作用。

Kafka主要特点是基于Pull的模式来处理消息消费,追求高吞吐量,一开始的目的就是用于日志收集和传输,适合产生大量数据的互联网服务的数据收集业务。

RabbitMQ

  • RabbitMQ 可以保证不丢失消息,支持高可用集群部署,另外也有很多高级功能,如 消息重试、死信队列。

RabbitMQ的缺点是吞吐量稍低,集群线性扩展也比较麻烦。另外由于开发语言为 Erlang,出现异常情况,也很难就行分析问题。

Apache RocketMQ

Apache RocketMQ 诞生于阿里巴巴业务场景,支撑阿里巴巴 ”双11“ 千万级并发、万亿级数据洪流可靠性验证。是一个低延迟、高并发、高可用的分布式消息和流数据平台。现在 RocketMQ 5.0 版本 也开始面向 云原生、IOT、事件流等场景解锁更多能力。

RocketMQ 基本上同时解决了Kafka 和 RabbitMQ的优缺点。适合可靠性要求很高的场景,尤其是电商里面的订单扣款,以及业务削峰情况。

选型建议

  • 如果业务是处理日志相关,比如用户行为日志,能容忍小部分数据丢失,又要求有极高的吞吐量和性能,可以选用Kafka。
  • 如果是核心的业务系统,如订单处理、”秒杀“,不允许消息丢失,有很强的高可用要求,可以选择 RocketMQ。
Last Updated:
Contributors: isno