[ 消息队列- RocketMQ | 青训营笔记 ]

54 阅读2分钟

一.使用场景

例如,针对电商业务线,其业务涉及广泛,如注册、订单、库存、物流等;同时,也会涉及许多业务峰值时刻,如秒杀活动、周年庆、定期特惠等

二. RocketMQ基本概念

(p6-juejin.byteimg.com/tos-cn-i-k3…?)

三. RocketMQ架构

  1. NameServer提供路由的概念
  2. 把角色上升到Broker上

四. 存储模型

对于一个Broker来说所有的消息的会发到一个CommitLog上面,然后按照不同的ConsumerQueue 来Dispatch到不同的ConsumerQueue上去,但这里的ConsumerQueue所存储的并不是真实的数据,这里存的仅仅是真实数据的位置信息

五. 高级特性-事务消息

  • 反查回查机制(即二阶段提交[1])

六. 高级特性-延迟发送、消息

七. 高级特性-消费重试和死信队列

八. 个人感悟

  1. 不要不懂装懂,一遍看不懂就看两遍,两遍看不懂就看三遍、四遍、五遍……
  2. 多敲代码

[1]二阶段提交:在计算机网络以及数据库领域内,二阶段提交(英语:Two-phase Commit)是指,为了使基于分布式系统架构下的所有节点在进行事务提交时保持一致性而设计的一种算法(Algorithm)。通常,二阶段提交也被称为是一种协议(Protocol)。在分布式系统中,每个节点虽然可以知晓自己的操作是成功或者失败,却无法知道其他节点的操作的成功或失败。当一个事务跨越多个节点时,为了保持事务的ACID[2]特性,需要引入一个作为协调者的组件来统一掌控所有节点(称作参与者)的操作结果并最终指示这些节点是否要把操作结果进行真正的提交(比如将更新后的数据写入磁盘等等)。因此,二阶段提交的算法思路可以概括为:参与者将操作成败通知协调者,再由协调者根据所有参与者的反馈情报决定各参与者是否要提交操作还是中止操作。

[2]ACID:是指数据库管理系统(DBMS)在写入或更新资料的过程中,为保证事务(transaction)是正确可靠的,所必须具备的四个特性:原子性(atomicity,或称不可分割性)、一致性(consistency)、隔离性(isolation,又称独立性)、持久性(durability)。

课后作业

  1. 手动搭建一个Kafka集群。
  2. 完成Hello World的发送与接收。
  3. 关闭其中一个Broker,观察发送与接收的情况,并写出,在关闭一个Broker后,Kafka 集群会做哪些事情?