1. 创建Topic的时候为何要指定MessageQueue数量
首先如果要搞明白生产者的工作原理,那么就必须先明白一个概念,MessageQueue是什么?
而要明白MessageQueue是什么,就必须把他跟Topic以及Broker综合起来看,才能搞明白。如果我们要使用RocketMQ,你先部署出来一套RocketMQ集群这个肯定是必须的,有了集群之后,就必须根据你的业务需求去创建一些Topic。
像我们创建的这些Topic就可以在上面提到的rocketmq-console控制台去创建,在创建Topic的时候,需要指定一个很关键的参数,就是MessageQueue。
简单来说,就是你要指定你和这个Topic对应了多少个队列,也就是多少个MessageQueue。
那么这个MessageQueue是用来干嘛的?
2. Topic、MessageQueue以及Broker之间到底是什么关系
假设我们现在创建了一个Topic,指定了4个MessageQueue,那么这个Topic的数据在Broker集群中是如何分布的?
每个Topic的数据都是分布式存储在多个Broker中的,那么我们如何决定这个topic的哪些数据放在这个broker上,哪些数据放在那个broker上呢?
所以RocketMQ引入了MessageQueue的概念,本质上就是一个数据分片的机制。在这个机制中,假设Topic有1万条数据,然后Topic有4个MessageQueue,那么大致可以认为会在每个MessageQueue中放入2500条数据。