众所周知kafka可以自定义设置每个分区的副本数量,比如如下kafka命令,即可创建一个带有5个分区2个副本(1个leader、1个follower)的topic:

bin/kafka-topics.sh --create --zookeeper localhost:2181
--replication-factor 2
--partitions 5
--topic test-part

然后我们用命令查看topic的描述:

[root@VM 15 71 centos kafka 2.11-1.0.0]# bin/kafka-topics . sh --describe --zookeeper Localhost:2181 --topic test-part

结果如下:

Topic:test-part		PartitionCount:5		ReplicationFactor:2 		Configs:
Topic:test-part		Partition: 0	Leader: 0					Replicas: 0,2   Isr: 0,2
Topic:test-part 	Partition: 1	Leader: 1					Replicas: 1,3   Isr: 1,3
Topic:test-part		Partition: 2	Leader: 2					Replicas: 2,0	Isr: 2,0
Topic:test-part 	Partition: 3	Leader: 3					Replicas: 3,1	Isr: 3,1
Topic:test-part		Partition: 4	Leader: 0 					Replicas: 0,3	Isr: 0,3

可见topic test-part 下有5个分区,2个拷贝因子。broker分别有0/1/2/3共4个,以partition 0分区为例,leader在broker 0上,所有副本分别在broker 0,2上,Isr为0,2。

其他很好理解,那么什么是Isr呢?

其实副本除了Isr以外,还有AROR概念。

副本除了Isr以外,还有AROR概念。

简单来说,分区中的所有副本统称为 AR (Assigned Replicas)。所有与leader副本保持一定程度同步的副本(包括leader副本在内)组成 ISR (In Sync Replicas)ISR 集合是 AR 集合的一个子集。消息会先发送到leader副本,然后follower副本才能从leader中拉取消息进行同步。同步期间,follow副本相对于leader副本而言会有一定程度的滞后。前面所说的 ”一定程度同步“ 是指可忍受的滞后范围,这个范围可以通过参数进行配置。于leader副本同步滞后过多的副本(不包括leader副本)将组成 OSR (Out-of-Sync Replied)由此可见,AR = ISR + OSR。正常情况下,所有的follower副本都应该与leader 副本保持 一定程度的同步,即AR=ISR,OSR集合为空。

什么是Isr的伸缩性?

leader副本负责维护和跟踪 ISR 集合中所有follower副本的滞后状态,当follower副本落后太多或失效时,leader副本会把它从 ISR 集合中剔除。如果 OSR 集合中所有follower副本“追上”了leader副本,那么leader副本会把它从 OSR 集合转移至 ISR 集合。默认情况下,当leader副本发生故障时,只有在 ISR 集合中的follower副本才有资格被选举为新的leader,而在 OSR 集合中的副本则没有任何机会(不过这个可以通过配置来改变)。

发表评论

电子邮件地址不会被公开。 必填项已用*标注