乐趣区

关于rocketmq:RocketMQ-元数据的拉取

拉取的机会

和 Kafka — 元数据的拉取机会的相似,分为发消息的时候以及定时工作。

拉取的流程

获取 topic 的时候,先从缓存获取是否有这个 topic 对应的路由数据,如果有,就间接返回。

如果本地缓存,那须要通过网络申请(Netty)去 NameServer 获取 topic 的路由数据。

如果从 NameServer 拿到 topic 信息的话,就会把这个 topic 数据寄存在缓存中,以供下次间接取用,防止频繁的拉取。

在放入缓存的时候,还会跟缓存里的数据进行比照,如果跟缓存里不统一,就会更新 broker 的地址以及 MessageQueue(这个前面讲)。

和 kafka 比照

Kafka — 元数据的拉取流程

共同点

  1. 按需拉取。也就是说,须要哪些 topic 的信息,就拉取这些 topic。所以在定时工作触发拉取元数据音讯的时候,会读取内存里有哪些 topic 信息,依据这些 topic 的信息去拉取元数据。
  2. 先判断内存里是否有 topic 信息,如果有,间接用,如果没有或者不可用去服务端拉取并更新内存。

不同点

  1. kafka 能够批量拉取 topic 的信息,RocketMQ 是一个个 topic 去拉,性能上比 kakfa 低。
  2. kafka 的发送音讯、拉取元数据是有专门的线程来解决的(发送音讯也是这个线程),因为是异步的,所以用休眠 - 唤醒的模式来告诉拉取后果。
  3. RocketMQ 是以后线程解决,会有多线程须要拉取 topic 信息的状况,须要加锁。
  4. kafka 会对 5 分钟内不必的 topic 进行删除,RoeketMQ 如同没有??
退出移动版