消息类中间件

1、RPC远程过程调用

2、消息中间件组成:broker,producer,consumer,topic,queue

3、消息队列的两种消息传递模型(queue和topic)

(1)点对点(PTP)Queue消息传递模型(先进先出):消息生产者想队列发送消息,消息消费者从队列读取消息;

同个队列可以关联多个消息生产者与消息消费者,但一条消息只能被一个消费者接收;这种模式是轮训模式,消费者从队列中主动请求读取消息

(2)发布/订阅(pub/sub)topic消息传递模型:消息发布在向消息主题发布消息,只有订阅了该主题的消费者才能接收到消息

pub/sub消息传递模型允许多个主题订阅者接收同一条消息(一个消息可传递给多个消费者消费),属于推模型,消息服务器自动将主题消息广播出去;

4、常用的协议:AMQP、MQTT、STOMP、XMPP

一、RocketMQ是使用标准的发布--订阅模型

1、RocketMQ在主题下增加了队列的概念,确保消息的有序性

2、每个主题包含多个队列,通过多个队列来实现多实例的并行生产与消费

3、只能保证队列上消息的有序性,主题层面无法保证严格顺序

4、订阅者的概念是通过消费者(consumer group)体现,每个消费组都消费主题中一份完整消息,不同消费组之间消费进度不受影响

5、消费组包含多个消费者

6、在topic消费过程中,由于消息需要被不同组进行多次消费,消费完的消息并不会立即被删除,需要rocketmq为每个消费组在每个队列上维护一个消费为止(consumer offset)这个位置之前的消息被消费过,之后的消息都没有被消费过,每成功消费一条消息,消费位置就加1

 二、kafka的消息模型与rocketMQ完全一直,唯一区别在kafka中,队列的概念为分区

Kafka:

1、基础概念

(1)broker:kafka集群有多个servcer,每个server被称为kafka实例,也叫做Broker

(2)partition(分区):每个topic可分成多个partition,每个partition就是一个Log文件,消息是存储在磁盘上

 

 

(3)偏移量(offset):消息在log文件中的位置,文件只能顺序读写

(4)消息被消费也不会立即删除,可配置一定时间后自动删除;文件在集群内复制备份以防丢失

(5)kafka依赖zookeeper,适合离线/在线消息消费

2、特点:

(1)分布式与分区:一个topic对应多个partition分散存储在集群的broker中,一个partition对应一个文件,每个Broker负责自己机器上的patitionde的读写

(2)副本(replicated):可配置partition需要备份的个数(replicas),每个partition将会被备份到多个Broker上,提高可用性;

3、整体的数据流程

(1)数据生产过程:

生产者写入一条记录,需要指定四个参数:topic,partition,key,value,(topic,value是必须;key,partition是可选,key有值,按照Hash,同一个Key到同一个partition;key不存在,通过轮训方式写入)

 

 

 (2)消息消费过程:

消费者是存在于一个消费组(consumer group)中,订阅topic是以一个消费组来订阅,发送到topic消息,只会被订阅此topic的每个group中的一个consumer消费

消费组中的消费者关联到一个partition,一个partition只能被一个消费者消费,但是可以同时被多个消费组消费,同个消费组的两个消费者不会同时消费一个Partition

 

 kafka中采用pull方式,即consumer在喝Broker建立链接后,主动pull消息,consumer可以根据自己消费能力适时去fetch消息并处理,且可以控制消息消费进度offset

offset保存在zk中

4、kafka的集群图

 

5、zookeeper的作用:kafka的关键集群原信息都存储在zk中,

 

posted on 2022-03-22 16:01  ChanXM  阅读(157)  评论(0)    收藏  举报

导航