大家好,我是Mic。一位从业5年的粉丝,在简历上写着精通Kafka。结果面试的时候直接被打了耳光。面试官问他:“什么是ISR,为什么要设计ISR?”然后他一脸懵逼的看着面试官。我们来看看普通人和专家的回答。老百姓:ISR好像是Kafka里面的一种机制。为什么要引入应该和数据同步有关。师:嗯,我要从几个方面来回答这个问题。首先发送给KafkaBroker的消息最终以Partition的物理形式存储在磁盘上。为了保证Parititon的可靠性,Kafka提供了Parititon的replica机制,然后在这些Partition中复制副本集。有Leader分区和Follower分区。生产者发送的消息会先存储在LeaderPartition中,然后复制到FollowerPartition中。这样设计的好处是,一旦LeaderPartition所在的节点挂了,可以从剩下的Partition副本中重新选出一个新的。领导者。然后消费者可以继续从新的LeaderPartition中获取未消费的数据。在Partitionmulti-copy设计方案中,有两个关键需求。副本数据的同步和新领导者的选举都需要涉及到网络通信。为了避免网络通信延迟带来的性能问题,Kafka保证新选出的LeaderPartition中的数据是最新的。设计了这样一个ISR方案。ISR的全称是in-syncreplica。它是一个集合列表,存储了距离LeaderParition节点数据最近的FollowerPartition。如果一个FollowerPartition中的数据落后于Leader太多,它将被从ISR列表中移除。简单来说,ISR列表中的节点必须同步最新的数据,所以后续的Leader选举只需要从ISR列表中过滤即可。因此,我认为引入ISR方案尽可能保证数据同步效率的原因有两个,因为同步效率低的节点会被踢出ISR列表。避免数据丢失,因为ISR中的节点数据距离Leader副本最近。以上是我对这个问题的理解。小结在我看来,这个问题非常值得研究。一般来说,副本数据同步无非是同步阻塞或者异步非阻塞。但是,这两种方案要么带来性能问题,要么带来数据丢失问题,都不是特别合适。ISR完美解决了这个问题。在实际过程中,我们也可以借鉴类似的设计思路。喜欢我作品的朋友记得点赞收藏关注哦。版权声明:除特别声明外,本博客所有文章均采用CCBY-NC-SA4.0许可协议。转载请注明来自Mic带你学建筑!如果本文对您有帮助,请给个关注和点赞。您的坚持是我不断创作的动力。欢迎关注同名微信公众号获取更多技术干货!
