










当一个3主集群(broker-a、broker-b、broker-c)中每个broker的autoCreateTopicEnable=true、defaultTopicQueueNums=4时,则broker-a、broker-b、broker-c在启动时都会创建一个名为TBW102,队列数为4的主题,合计12个队列。
自动创建Topic的本质是通过系统主题TBW102的元信息来完成的,详细流程如下。
当生产者发送消息到不存在的Topic OrderTopic时
OrderTopic,就会自动创建它:
OrderTopic的队列数 = 本机TBW102的队列数,默认由 defaultTopicQueueNums 控制,通常是 4。OrderTopic的新路由信息注册到NameServer。OrderTopic的路由,不再依赖TBW102。从上面这个过程,不难推断出一个重大问题,假设在一个拥有3主的集群(broker-a、broker-b、broker-c),每个broker都开启了autoCreateTopicEnable并且defaultTopicQueueNums=4,意味值TBW102主题拥有12个队列,每个broker都有4个。
当生产者向一个不存在的主题OrderTopic发送一条消息时,生产者从TBW102挑选到一个队列后,假设这个队列位于broker-a上,那么broker-a则会创建OrderTopic主题(包含4个队列),生产者之后再发送消息时能直接从NameServer中获取到路由信息,便不会再向TBW102获取信息,相当于OrderTopic只有这4个队列了,并且只遍布在broker-a上,这意味着:自动创建无法让Topic均匀分布到集群的所有Broker上。
autoCreateTopicEnable=false,这是5.x版本的默认行为,也是官方强烈推荐的做法。此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。