发展历程
TIB:诞生于1985年,服务于金融机构和新闻机构
IBM MQ/WebSphere:诞生于1993年,商业消息队列平台市场主要玩家
MSMQ:微软发布于1997年
JMS:诞生于2001年,本质上是一套java API
AMQP/RabbitMQ:规范发布于2004年,同年RabbitMQ面市
Kafka:2010年由Linked开源
RocketMQ:2011年阿里中间件团队自研
Pulsar:2012年诞生于Yahoo内部
业界消息队列对比
Kafka:分布式的、分区的、多副本的日志提交服务,在高吞吐场景下发挥较为出色
RocketMQ:低延迟、强一致、高性能、高可靠、万亿级容量和灵活的可扩展性,在一些 实时场景中运用较广
Pulsar:是下一代云原生分布式消息流平台,集消息、存储、轻量化函数式计算为一体 采用存算分离的架构设计
BMQ:和Pulsar架构类似,存算分离,初期定位是承接高吞吐的离线业务场景,逐步替 换掉对应的Kafka集群
Kafka
特点:
- 高吞吐量: Kafka以其高吞吐量而著称,适用于处理大量数据流。
- 持久化存储: Kafka将所有消息都持久化到磁盘上,保证消息的不丢失。
- 分区和复制: Kafka的消息被分成多个分区,每个分区可以有多个副本。这有助于提高系统的可用性和容错性。
- 顺序保证: 对于同一个分区内的消息,Kafka能够保证它们的顺序性。
- 灵活性: Kafka的消费者可以按照自己的速度消费消息,不受生产者或其他消费者的影响。
缺点:
- 部署和配置相对复杂。
- 对于一些小规模应用来说,可能会过于重量级
BMQ
特点:
-
低延迟: BMQ注重低延迟,适用于需要快速响应的场景,如实时推送。
-
容量弹性: BMQ支持自动伸缩,可以根据负载自动调整资源,提高系统的弹性。
-
多协议支持: BMQ支持多种通信协议,包括HTTP、WebSocket等。
-
多租户: BMQ支持多租户模式,一个集群可以为多个业务提供服务。
缺点:
- 开源社区相对较小,文档和资源可能相对有限。
- 相对于其他消息队列,生态系统可能较弱。
RocketMQ
特点
- 集群消费:一个Group ID所标识的所有Consumer平均分摊消费消息。例如某个Topic有9条消息,一个Group ID有3个Consumer实例,那么在集群消费模式下每个实例平均分摊,只消费其中的3条消息。
- 广播消费:一个Group ID所标识的所有Consumer都会各自消费某条消息一次。例如某个Topic有9条消息,一个Group ID有3个Consumer实例,那么在广播消费模式下每个实例都会各自消费9条消息。
- 定时消息:Producer将消息发送到消息队列RocketMQ服务端,但并不期望这条消息立马投递,而是推迟到在当前时间点之后的某一个时间投递到Consumer进行消费,该消息即定时消息。
- 延时消息:Producer将消息发送到消息队列RocketMQ服务端,但并不期望这条消息立马投递,而是延迟一定时间后才投递到Consumer进行消费,该消息即延时消息。
缺点
- 相对于Kafka,可能在吞吐量上有所限制。
- 社区相对较小,生态系统可能不如Kafka完善。