前言
消息队列说明:RocketMQ、kafka、RabbitMQ概述及关键概念
文章目录
消息队列-Message Queue
概述
消息队列中间件是分布式系统中重要的组件,主要解决应用耦合,异步消息,流量控制等问题。实现高性能、高可用、可伸缩和最终一致性架构,是大型分布式系统不可缺少的中间件
作用
- 异构系统消息传递:上游系统C#>消息队列>下游系统Java
- 基于“订阅发布”的一对多的数据分发:中国气象局==>消息队列==>网易、微博、微信
- 削峰、限流、日志处理、流程跟踪:OA提供==>消息队列(限流)>公文系统>邮件服务商
几种消息队列中间件对比
- ActiveMQ:出现最早,支持的功能多而不精
- Kafka:吞吐量大==>大数据
- RocketMQ:单个消息处理及时性高,响应快==>业务系统
- RabbitMQ:延迟最低、基于erlang开发,并发能力极强
RocketMQ
概述
阿里开源的消息中间件产品,纯Java开发,具有高吞吐量、高可用性、适合大规模分布式系统应用的特点,性能强劲(零拷贝技术),支持海量堆积,在阿里内部进行大规模使用,适合在互联网与高并发系统中应用
关键概念
主题:Topic
- RocketMQ的顶层存储,所有消息资源的定义都在主题内部完成,但主题是一个逻辑概念,并不是实际的消息容器
- 主题内部由多个队列组成,消息的存储和水平扩展能力最终是由队列实现的,并且针对主题的所有约束和属性设置,最终也是通过主题内部的队列实现
消息队列:MessageQueue
- 队列是消息存储和传输的容器,是消息的最小存储单元
- 所有主题都是由多个队列组成,以此实现队列数量的水平拆分和队列内部的流式存储
消息:Message
- 最小数据传输单元
- 生产者将业务数据的负载和拓展属性包装成消息发送到服务端
- 服务端按照相关语义将消息投递到消费端进行消费
生产者:Producer
- 用来构建并传输消息到服务端的运行实体
- 被集成在业务系统中,将业务消息按照要求封装成消息并发送到RocketMQ服务端
- 生产者和主题的关系为多对多
消费者:Consumer
- 用来接收并处理消息的运行实体
- 被集成在业务系统中,从RocketMQ服务端获取消息,并将消息转化为业务可理解的信息,供业务逻辑处理
消费者分组:Consumer Group
- RocketMQ系统中承载多个消费行为的消费者的负载均衡分组
- 在RocketMQ中,通过消费者分组内初始化多个消费者实现消费性能的水平扩展以及高可用容灾
kafka
概述
- 分布式、分区、多副本、多订阅者,基于zookeeper协调的消息队列系统
消息队列模式
- 点对点 - 生产者发送一条消息到queue,只有一个消费者能收到- 一条消息只能被一个消费一次,消费者消费了某条数据后,该数据从消息队列中删除
- 发布-订阅模式 - 生产者生产数据到一个topic中,消费者可以订阅一个或多个topic,消费者可以消费该topic中的所有数据。同一条数据可以被多个消费者消费,数据被消费后不会立马删除- 发布者发送到topic的消息,只有订阅了topic的订阅者才会收到消息
关键概念
节点-broker
Kafka集群包含一个或多个服务器,服务器节点称为broker
主题-Topic
每条发布到Kafka集群的消息都有一个类别,这个类别称为Topic。类似于数据库的表名
分片-partition
topic中的数据分割为一个或多个partition,每个topic至少有一个partition
生产者-Producer
生产者即数据的发布者,该角色将消息发布到Kafka的topic中,broker接收到生产者发送的消息后,broker将该消息追加到当前用于追加数据的segment
RabbitMQ
概述
高级消息队列协议:Advanced Message Queuing Protocol
开源的消息代理和队列服务器,用来通过普通协议在完全不同的应用之间共享数据;用Erlang语言编写,基于AMQP协议
与SpringAMQP完美的整合,API丰富
集群模式丰富,表达式配置,HA模式,镜像队列模型
关键概念
服务应用:Server
- 又称Broker,接受客户端的连接,实现AMQP实体服务
连接:Connection
- 应用程序与Broker的网络连接
网络信道:Channel
- 几乎所有的操作都在Channel中进行,Channel是进行消息读写的通道。客户端可建立多个Channel,每个Channel代表一个会话任务
消息:Message
- 服务器和应用程序之间传送的数据,由Properties和Body组成。Properties可以对消息进行修饰,比如消息的优先级、延迟等高级特性;Body就是消息体内容
虚拟地址:Virtual host
- 用于进行逻辑隔离,最上层的消息路由。一个Virtual host里面可以有若干个Exchange和Queue,同一个Virtual Host里面不能有相同名称的Exchange或Queue
交换机:Exchange
- 接收消息,根据路由键转发消息到绑定的队列
绑定:Binding
- Exchange和Queue之间的虚拟连接,binding中可以包含routing key
路由规则:Routing key
- 一个路由规则,虚拟机可用它来确定如何路由一个特定消息
版权归原作者 芒果-橙 所有, 如有侵权,请联系我们删除。