消息队列|青训营

77 阅读2分钟

什么是消息队列

消息队列一般简称为 MQ (Messges Queue),是指利用高效可靠的消息传递机制进行与平台无关的数据交流,并基于数据通信来进行分布式系统的集成,是在消息的传输过程中保存消息的容器。消息队列本质上是一个队列,而队列中存放的是一个个消息。

队列是一个数据结构,具有先进先出的特点。而消息队列就是将消息放到队列里,用队列做存储消息的介质。消息的发送放称为生产者,消息的接收方称为消费者。

消息队列由 Broker(消息服务器,核心部分)、Producer(消息生产者)、Consumer(消息消费者)、Topic(主题)、Queue(队列)和Message(消息体)组成。

消息队列有三个作用,分别是削峰、解耦和异步

业界消息队列

kafka

分布式的,分区的,多副本的日志提交服务,在高吞吐场景下发挥尤为出色  
使用场景:

image.png

基本概念:

image.png

-   Topic:主题,可以理解为一个队列,生产者和消费者都是面向一个Topic  
-  Producer:消息生产者,向Kafka中发布消息的角色。  
-  Consumer:消息消费者,即从Kafka中拉取消息消费的客户端。  
-  Consumer Group:消费者组,消费者组则是一组中存在多个消费者,消费者消费Broker中当前Topic的不同分区中的消息,消费者组之间互不影响,所有的消费者都属于某个消费者组,即消费者组是逻辑上的一个订阅者。某一个分区中的消息只能够一个消费者组中的一个消费者所消费    
-  Broker:经纪人,一台Kafka服务器就是一个Broker,一个集群由多个Broker组成,一个Broker可以容纳多个Topic。  
-   Partition:分区,为了实现扩展性,一个非常大的Topic可以分布到多个Broker上,一个Topic可以分为多个Partition,每个Partition是一个有序的队列(分区有序,不能保证全局有序)  
-  Leader:每个分区多个副本的主角色,生产者发送数据的对象,以及消费者消费数据的对象都是Leader。  
-  Follower:每个分区多个副本的从角色,实时的从Leader中同步数据,保持和Leader数据的同步,Leader发生故障的时候,某个Follower会成为新的Leader。  

存在的问题: image.png

BMQ

和Pulsar架构类似,存算分离,初期定位是承接高吞吐的离线业务场景,逐步替换掉对应的Kafka集群 

image.png

和Kafka大同小异,增加了proxy,同时controller和coordinator独立出来部署了

RocketMQ

低延迟,强一致,高性能,高可靠,万亿级容量和灵活的可扩展性,在一些实时场景运用较广  
和kafka比较:

image.png

架构

image.png