跳至主要內容
消息队列选型指南:从业务场景到技术决策

消息队列选型指南:从业务场景到技术决策

前言

"用哪个消息队列?"——这是每个架构师都必须回答的问题。答案是:看场景。Kafka 适合大数据,RocketMQ 适合金融交易,RabbitMQ 适合复杂路由,Pulsar 适合多租户。本文帮你建立选型决策框架。


第一部分:四大消息队列全景对比

1.1 核心特性对比

特性 Kafka RocketMQ RabbitMQ Pulsar
开发语言 Java/Scala Java Erlang Java
所属 Apache Apache(阿里) VMware Apache
协议 自有协议 自有协议 AMQP 0-9-1 自有协议
吞吐量 ★★★★★ ★★★★☆ ★★★☆☆ ★★★★★
低延迟 ★★★☆☆ ★★★★☆ ★★★★★ ★★★★☆
消息持久化 ★★★★★ ★★★★★ ★★★☆☆ ★★★★★
事务消息 ★★★★☆ ★★★★★ ★★★★☆ ★★★★★
顺序消息 ★★★☆☆ ★★★★★ ★★★☆☆ ★★★★☆
延迟消息 ★★★★★ ★★★☆☆ ★★★★☆
消息回溯 ★★★★★ ★★★★★ ★★★★★
运维复杂度 ★★★☆☆ ★★★☆☆ ★★☆☆☆ ★★★★☆

郑天祺大约 6 分钟消息队列消息队列选型KafkaRocketMQRabbitMQPulsar
kafka架构设计

1、应用场景

同时为发布和订阅提供高吞吐量、消息持久化、分布式功能、支持数据并行加载到Hadoop中

实际:
1、发布系统通知:如评论、点赞、关注这些事件发生后,可以把这些操作放入到kafka消息队列中,如果用户量一大直接操作数据库,服务器压力顶不住。所以把这些通知先存入kafka中,然后一个个消费掉。
2、一些项目数据同步问题也可以用到。
3、监测数据:分布式应用程序生成的统计数据集中聚合。
4、分布式:假设有系统B、C、D都需要系统A的数据
5、事件采集:其中状态的变化根据时间的顺序记录下来,kafka支持这种非常大的存储日志数据的场景。
如:日志收集、消息系统、活动追踪、运营指标、流式处理、热点点赞、评论、关注、发短信。


郑天祺大约 9 分钟分布式Kafka消息队列SpringBoot
Disruptor

disruptor

------高性能的线程间消息传递框架

介绍:

Disruptor类似于java的BlockingQueue。与队列一样,Disruptor的目的是在同一进程内的线程之间传递数据。

但是,Disruptor提供了与队列不同的关键功能:

1、同一个“事件”可以有多个消费者,消费者之间既可以并行处理,也可以相互依赖形成处理的先后次序(形成一个依赖图)


郑天祺大约 9 分钟分布式Disruptor高性能消息队列
Kafka的简单使用

1、安装kafka

http://kafka.apache.org/quickstart (linux版)

windows版:
首先cmd到kafka的bin下
其中启动内置的zk用:zookeeper-server-start.bat D:\environment\kafka_2.12-2.3.0\config\zookeeper.properties
启动Kafka用:kafka-server-start.bat D:\environment\kafka_2.12-2.3.0\config\server.properties


郑天祺大约 2 分钟分布式Kafka消息队列