kafka主题中的分区和分区副本的作用是什么?

陌上花开蝴蝶飞 发表于: 2020-08-12   最后更新时间: 2020-08-12  

小弟主要是对分区这个东西到底做了什么不太理解,我们发送的消息是发送到主题的某个分区上,但是正真处理消息的是分区副本的首领,其他副本分区会同步首领的消息,首领里面也会做ISR的集合用于选举首领和判断副本是否有效,那么我们之前的分区到底做了什么,难道只是做了一个通道的作用吗?

kafka一个分区的所有副本都挂了怎么处理?比如3个broker, 一个分区有2个副本,刚好 分区和副本分布在3个broker上,2个broker挂了,就剩一个broker, 而这个broker上就只有分区没有副本,那么近下来的读写操作是否正常?



您需要解锁本帖隐藏内容请: 点击这里
本帖隐藏的内容




上一条: 使用spring kafka 本地调试循环发送1W+消息时,会出现producer超时被强制关闭异常
下一条: kafka在做分区rebanlace的时候。有15个分区,一个分区160g的数据,这个过程大概需要多久

  • 我给你举个例子吧,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之间,副本分区来同步消息来保障你的可靠性。

    • 我看到的是,分区只是为了打散消息,具体的消息消费和处理都是由分区副本首领来处理的,该分区的其他副本跟随分区副本首领。 就比如你的一个例子里就有一个问题,一个主题可以有2个分区,但是不能没有分区副本,所以第一个例子是不成立的。那么分区充当着什么角色呢?

        • 所以在创建主题的时候,有三个参数,主题名称,分区数量,分区副本数量, 这里的分区数量其实也只是做负载均衡用到的,也是一个逻辑概念,正在存储和处理消息的是由分区副本选出来的leader,如果一个主题有 1个分区,3个分区副本, 那么最大可能就是3次leader,而不会把分区数量也算进去