-
topicTest5只在broker-a服务器上创建了队列,并没有在broker-b服务器创建队列,不符合期望。
-
默认读写队列的个数为4。
我们再来看一下RocketMQ默认topic的路由信息截图如下:
从图中可以默认Topic的路由信息为broker-a、broker-b上各8个队列。
默认Topic的路由信息是如何创建的?
-
Topic的路由信息是存储在哪里?Nameserver?broker?
-
RocketMQ Topic默认队列个数是多少呢?
3.1 RocketMQ基本路由规则
-
Broker在启动时向Nameserver注册存储在该服务器上的路由信息,并每隔30s向Nameserver发送心跳包,并更新路由信息。
-
Nameserver每隔10s扫描路由表,如果检测到Broker服务宕机,则移除对应的路由信息。
-
消息生产者每隔30s会从Nameserver重新拉取Topic的路由信息并更新本地路由表;在消息发送之前,如果本地路由表中不存在对应主题的路由消息时,会主动向Nameserver拉取该主题的消息。
回到本文的主题:autoCreateTopicEnable,开启自动创建主题,试想一下,如果生产者向一个不存在的主题发送消息时,上面的任何一个步骤都无法获取一个不存在的主题的路由信息,那该如何处理这种情况呢?
在RocketMQ中,如果autoCreateTopicEnable设置为true,消息发送者向NameServer查询主题的路由消息返回空时,会尝试用一个系统默认的主题名称(MixAll.AUTO_CREATE_TOPIC_KEY_TOPIC),此时消息发送者得到的路由信息为:
但问题就来了,默认Topic在集群的每一台Broker上创建8个队列,那问题来了,为啥新创建的Topic只在一个Broker上创建4个队列?