消息类中间件
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中,
浙公网安备 33010602011771号