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條數據。