『消息』常见消息中间件的介绍和对比
在分布式系统中 , 我们会广泛使用各种消息中间件来进行系统间的数据交换 , 以便于各系统之间实现异步解耦 。 目前市场上开源的消息中间件有很多:如Kafka、RabbitMQ、RocketMQ等等 。
本文插图
什么是消息队列
在正式介绍和对比Kafka、RabbitMQ、RocketMQ之前 , 我们来说说什么是消息队列(Message queue , 简称MQ) , 从字面理解就是一个保存消息的一个容器 。 那么我们为何需要这样一个容器呢?其实就是为了解耦各个系统 , 我们来举个例子:
本文插图
有这么一个简单的场景 , 系统A负责生成userID , 并调用系统B、C 。 如果系统BC频繁变化是否需要userID参数 , 则系统A的代码就得不断变化 , 如果哪天又来了系统DEF……也需要这个参数 , 则系统A又要加入很多业务逻辑 , 这样子各他系统之间就容易产生相互影响 , 另外大量的系统与A发生交互也容易产生问题 。
本文插图
加了消息队列后 , A只负责产生userID , 至于谁要用这个参数 , 怎么用?系统A不管 。 对这个数据感兴趣的系统自己去取用即可 , 各个系统之间就实现了解耦 。 而且解耦后 , 整个服务也变成了一个异步的方式 , 系统A产生数据后 , 不用依次调用BCD来累计耗时 , 各系统可以同时来取用消息队列的数据进行处理 , 加大吞吐 。
消息队列的特点
本文插图
【『消息』常见消息中间件的介绍和对比】
1、先进先出:消息队列的顺序在入队的时候就基本已经确定了 , 一般是不需人工干预的 。
2、发布订阅:发布订阅是一种很高效的处理方式 , 如果不发生阻塞 , 基本可以当做是同步操作 。
3、持久化:持久化确保消息队列的使用不只是一个部分场景的辅助工具 , 而是让消息队列能像数据库一样存储核心的数据 。
4、分布式:在现在大流量、大数据的使用场景下 , 支持分布式的部署 , 才能被广泛使用 。 消息队列的定位就是一个高性能的中间件 。
Kafka、RabbitMQ、RocketMQ介绍
Kafka
本文插图
Kafka是LinkedIn开源的分布式发布-订阅消息系统 , 目前归属于Apache顶级项目 。 Kafka主要为高吞吐量的订阅发布系统而设计 , 追求速度与持久化 。 kafka中的消息由键、值、时间戳组成 , kafka不记录每个消息被谁使用 , 只通过偏移量记录哪些消息是未读的 , kafka中可以指定消费组来实现订阅发布的功能 。
RabbitMQ
本文插图
RabbitMQ是使用Erlang语言开发的开源消息队列系统 , 基于AMQP协议来实现 。 AMQP的主要特征是面向消息、队列、路由(包括点对点和发布/订阅)、可靠性、安全 。 AMQP协议更多用在企业系统内 , 对数据一致性、稳定性和可靠性要求很高的场景 , 对性能和吞吐量的要求还在其次 。
RocketMQ
RocketMQ是阿里开源的消息中间件 , 它是纯Java开发 , 具有高吞吐量、高可用性、适合大规模分布式系统应用的特点 。 RocketMQ思路起源于Kafka , 但并不是Kafka的一个Copy , 它对消息的可靠传输及事务性做了优化 , 目前在阿里集团被广泛应用于交易、充值、流计算、消息推送、日志流式处理、binglog分发等场景 。 支持的客户端语言不多 , 目前是Java及C++ , 其中C++还不成熟;
- 玩车教授■想买车的看了都想笑!,近期这几大利好消息
- 吖有■9就要来了,或成四月压轴好戏?,最新消息!iPhone
- 新华网:综合消息:拉美确诊病例持续增加 多国严防疫情扩散
- [趣旅游]好消息!江西投放千万元旅游消费券
- 【新华社】中国企业将卖给法国的口罩转手卖给美国?假消息!
- 「鉄血解读」打破美国五十年的垄断,中国传出一好消息!这项新技术被我国突破
- 常见@农村常见的一种野菜,在乡下无人问津,但城里人却跑到农村来挖它
- 喀麦隆@综合消息:新冠肺炎疫情扩散至非洲50国
- [央视网]武汉新观察 | 重启的地铁,熟悉的地铁报站声
- 『速说军情』头号驱逐舰战斗系统安装完毕,单挑无敌,大国海军传来好消息