所以在创建主题的时候,有三个参数,主题名称,分区数量,分区副本数量, 这里的分区数量其实也只是做负载均衡用到的,也是一个逻辑概念,正在存储和处理消息的是由分区副本选出来的leader,如果一个主题有 1个分区,3个分区副本, 那么最大可能就是3次leader,而不会把分区数量也算进去
我看到的是,分区只是为了打散消息,具体的消息消费和处理都是由分区副本首领来处理的,该分区的其他副本跟随分区副本首领。 就比如你的一个例子里就有一个问题,一个主题可以有2个分区,但是不能没有分区副本,所以第一个例子是不成立的。那么分区充当着什么角色呢?
我给你举个例子吧,broker还是3个。
topic是逻辑概念,比如你有100条消息,topic命名为“A”,A有2个分区PA和PB,也就是说PA存50条,PB存50条,分别在broker1和broker2上面,这样你的消息是不是打散了,不会单一的放在某一台机器上了,这样是不是单一机器的负载就变小了?
再来,如果broker1挂了,那上面的所有分区也挂了,你的50条消息就丢了。为了不丢消息,你为分区增加了副本,这样PA和PB在broker2和broker3分别同步50条消息,当broker1再挂了,分区leader切到broker3上面的副本分区,消息是不是就还在。
所以,分区来打散你的消息,让你把庞大的消息负载均衡到broker之间,副本分区来同步消息来保障你的可靠性。