《3.5.1 消息中间件概念和RabbitMQ介绍》
-
4 30 消息队列两种模式:点对点与发布订阅:
-
RabbitMQ:
-
26分 AMQP模型:
-
47 30 消息:
-
64 40 RabbitMQ的架构:
-
66分 RabbitMQ的消息运转流程:
《3.5.2 kafka技术架构和配置介绍》
-
Kafka整体架构如下图。一个broker可以容纳多个topic
-
6分 每个Consumer Group中只会有一个Consumer消费一个partition
-
Broker:
-
Consumer:
-
24分 kafka data flow:
-
生产流程:
-
29 10 kafka会尽量把leader分配到不同的broker上;leader负责读与写,replica只负责读;当一个broker挂了,会针对其中的leader重新选举;进行partition分配和leader选举的执行者称为控制者,默认采用zookeeper
-
- 31 10+ leader选举
-
- 37 40 早期版本中offset保存在zookeeper中
-
在消费过程中分配Partition :
-
- 40 27 消费过程中的选择coordinator:一般是保存offset的leader所在的broker
-
- 45 50 什么时候发生rebalance: partition或者消费者的数量发生变化
-
47 45 消息投递语义:
At least once: 消费者处理完业务后,再去更新offset
At most once: 拿到消息后,先更新offset,再去处理业务 -
54 40 生产幂等性:
《3.5.3 RocketMQ介绍》
- 22 20 RocketMQ的物理架构:
-
- 26 40 Producer只发送消息到broker master,而consumer既可以从broker master也可以从broker slave读消息
- 29 27 与kafka不同,Consumer组里的所有实例都会收到同一条消息
《3.6.1 消息中间件的对比使用经验》
-
18 50
-
选型建议:
-
实现消息必达:
-
- 33 30 核心流程:
- 33 30 核心流程:
-
37分+ 实现消息幂等:
上半场使用id,id有两个特点:1)全局唯一,2)由MQ生成,业务方不需要关心
下半场的biz id?由生产者生成,在对应消费场景中全局唯一,由消费者判重和保证幂等,对MQ透明。比如把此id放在消息体中 -
45 25 流量消峰:
消费者取消息的模式,用pull,而不是push -
46 50 实现延时消息:
cron定时任务
更高效的设计:环形队列