RocketMQ 设计与理解

整体架构 RocketMQ 主要由 Producer、Broker、Consumer、Name Server 四个部分组成。 其中Producer 负责生产消息,Consumer 负责消费消息,Broker 负责存储消息,Name server 充当路由消息的提供者。 每个 Broker 可以存储多个Topic的消息,每个Topic的消息也可以分片存储于不同的 Broker。Message Queue 用于存储消息的物理地址,每个Topic中的消息地址存储于多个 Message Queue 中。 Topic Topic 是一种逻辑上的分区,是同一类消息的集合,每一个消息只能属于一个 Topic ,是RocketMQ进行消息订阅的基本单位。 每个 topic 会被分成很多 Messsage Queue ,和 Kafka 中的 Partition 概念一样,topic 的数据被分布在不同的 Message Queue 中。 在业务增长,消息量增大时,可以增大 topic 的 Message Queue,这样可以将压力分摊到更多的 broker 上。因为 Producer 可以发送消息的时候可以通过指定的算法,将消息均匀的发送到每个 Message Queue。 NameServer 生产者或消费者能够通过 Name Server查找各 Topic 相应的Broker IP 列表。 Name Server 可以多机部署变成一个集群保证高可用,但这些机器间彼此并不通信,也就是说三者的元数据舍弃了强一致性。 每一个 broker 启动时会向全部的 Name server 机器注册心跳,心跳里包含自己机器上 Topic 的拓扑信息,之后每隔 30s 更新一次,然后生产者和消费者启动的时候任选一台 Name Server 机器拉取所需的 Topic 的路由信息缓存在本地内存中,之后每隔 30s 定时从远端拉取更新本地缓存。...

April 5, 2021 · 2 min · 顾惜朝