分区(Partition):作用是分段存储kafka中的消息 副本:是对分区的备份,在集群中,不同的副本会被部署在不同的broker上。

一:副本概念

副本是对分区的备份。在集群中,不同的副本会被部署在不同的broker上。

1.1 副本实例及说明

下面例子:创建1个主题,2个分区、3个副本。

./kafka-topics.sh --create --zookeeper localhost:2181 --replication-factor 3 --partitions 2 --topic my-replicated-topic

实际操作:

[root@localhost bin]# ./kafka-topics.sh --create --zookeeper localhost:2181 --replication-factor 3 --partitions 2 --topic my-replicated-topic
Created topic my-replicated-topic.
# 查看该topic
[root@localhost bin]# ./kafka-topics.sh --describe --zookeeper localhost:2181 --topic my-replicated-topic
Topic: my-replicated-topic      PartitionCount: 2       ReplicationFactor: 3    Configs: 
        Topic: my-replicated-topic      Partition: 0    Leader: 1       Replicas: 1,0,2 Isr: 1,0,2
        Topic: my-replicated-topic      Partition: 1    Leader: 2       Replicas: 2,1,0 Isr: 2,1,0
[root@localhost bin]#

查看的信息解释:

kafka修改分区数与副本数 kafka分区 副本_zookeeper


上图中的参数意义如下:

  1. replicas:leader和flower,主从之间副本之间目前有的结点数
    当前副本存在的broker节点
  2. leader:副本里的概念
  • 每个partition都有一个broker作为leader。
  • 消息发送方要把消息发给哪个broker?就看副本的leader是在哪个broker上面。副本里的leader专门用来接收消息。接收到消息,其他follower通过poll的方式来同步数据。
  1. follower: leader处理所有针对这个partition的读写请求,而follower被动复制leader,不提供读写(主要是为了保证多副本数据与消费的一致性),如果leader所在的broker挂掉,那么就会进行新leader的选举,至于怎么选,在之后的controller的概念中介绍。
  2. Isr:作用为当leader挂了的话,在选举新的leader的时候就想要从Isr集合中选取 可以同步的broker节点和已同步的broker节点,存放在isr集合中。

生产者发送消息会往leader上面发,消费者消费消息也是从leader上面去消费;副本的作用就是等leader挂了之后,其副本所在的broker变为leader

kafka修改分区数与副本数 kafka分区 副本_分布式_02

1.2 副本总结(leader、flower、isr说明)

副本是为了为主题中的分区创建多个备份,多个副本在kafka集群的多个broker中,会有一个副本作为leader,其他是follower。

  1. leader
    kafka的写和读的操作,都发生在leader上。leader负责把数据同步给folower。当leader挂了,经过主从选举,从多个follower中选举产生一个新的leader
  2. flower
    接收leader的同步的数据
  3. isr
    可以同步和已同步的节点会被存入到isr集合中。这里有一个细节:如果isr中的节点性能较差,会被提出isr集合

1.3 broker、主题、分区、副本总结

集群中有多个broker,创建主题时可以指明主题有多个分区(把消息拆分到不同的分区中存储),可以为分区创建多个副本,不同的副本存放在不同的broker里