拉取的机会
和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如同没有??