拉取的机会
和 Kafka — 元数据的拉取机会的相似,分为发消息的时候以及定时工作。
拉取的流程
获取 topic 的时候,先从缓存获取是否有这个 topic 对应的路由数据,如果有,就间接返回。
如果本地缓存,那须要通过网络申请(Netty)去 NameServer 获取 topic 的路由数据。
如果从 NameServer 拿到 topic 信息的话,就会把这个 topic 数据寄存在缓存中,以供下次间接取用,防止频繁的拉取。
在放入缓存的时候,还会跟缓存里的数据进行比照,如果跟缓存里不统一,就会更新 broker 的地址以及 MessageQueue(这个前面讲)。
和 kafka 比照
Kafka — 元数据的拉取流程
共同点
- 按需拉取。也就是说,须要哪些 topic 的信息,就拉取这些 topic。所以在定时工作触发拉取元数据音讯的时候,会读取内存里有哪些 topic 信息,依据这些 topic 的信息去拉取元数据。
- 先判断内存里是否有 topic 信息,如果有,间接用,如果没有或者不可用去服务端拉取并更新内存。
不同点
- kafka 能够批量拉取 topic 的信息,RocketMQ 是一个个 topic 去拉,性能上比 kakfa 低。
- kafka 的发送音讯、拉取元数据是有专门的线程来解决的(发送音讯也是这个线程),因为是异步的,所以用休眠 - 唤醒的模式来告诉拉取后果。
- RocketMQ 是以后线程解决,会有多线程须要拉取 topic 信息的状况,须要加锁。
- kafka 会对 5 分钟内不必的 topic 进行删除,RoeketMQ 如同没有??