这篇文章我准备来聊一聊RocketMQ消息的一生。
不知你是否跟我一样,在使用RocketMQ的时候也有很多的疑惑:
- 消息是如何发送的,队列是如何选择的?
- 消息是如何存储的,是如何保证读写的高性能?
- RocketMQ是如何实现消息的快速查找的?
- RocketMQ是如何实现高可用的?
- 消息是在什么时候会被清除?
- ...
本文就通过探讨上述问题来探秘消息在RocketMQ中短暂而又精彩的一生。
如果你还没用过RocketMQ,可以看一下这篇文章RocketMQ保姆级教程
核心概念
- NameServer:可以理解为是一个注册中心,主要是用来保存topic路由信息,管理Broker。在NameServer的集群中,NameServer与NameServer之间是没有任何通信的。
- Broker:核心的一个角色,主要是用来保存消息的,在启动时会向NameServer进行注册。Broker实例可以有很多个,相同的BrokerName可以称为一个Broker组,每个Broker组只保存一部分消息。
- topic:可以理解为一个消息的集合的名字,一个topic可以分布在不同的Broker组下。
- 队列(queue):一个topic可以有很多队列,默认是一个topic在同一个Broker组中是4个。如果一个topic现在在2个Broker组中,那么就有可能有8个队列。
- 生产者:生产消息的一方就是生产者
- 生产者组:一个生产者组可以有很多生产者,只需要在创建生产者的时候指定生产者组,那么这个生产者就在那个生产者组
- 消费者:用来消费生产者消息的一方
- 消费者组:跟生产者一样,每个消费者都有所在的消费者组,一个消费者组可以有很多的消费者,不同的消费者组消费消息是互不影响的。