Hi,大家好,我是Mic。

一个工作5年的粉丝,在简历上写精通Kafka。

后果在面试的时候间接打脸。

面试官问他:“什么是ISR,为什么须要设计ISR”

而后他一脸懵逼的看着面试官.

上面看看普通人和高手的答复。

普通人:

ISR如同是Kafka外面的一个机制吧。

为什么要引入,应该是跟数据同步有关系。

高手:

好的,对于这个问题,我须要从几个方面来答复。

首先,发送到Kafka Broker上的音讯,最终是以Partition的物理状态来存储到磁盘上的。

而Kafka为了保障Parititon的可靠性,提供了Paritition的正本机制,而后在这些Partition正本集外面。

存在Leader Partition和Flollower Partition。

生产者发送过去的音讯,会先存到Leader Partition外面,而后再把音讯复制到Follower Partition,

这样设计的益处就是一旦Leader Partition所在的节点挂了,能够从新从残余的Partition正本外面选举出新的Leader。

而后消费者能够持续从新的Leader Partition外面获取未生产的数据。

在Partition多正本设计的计划外面,有两个很要害的需要。

  • 正本数据的同步
  • 新Leader的选举

这两个需要都须要波及到网络通信,Kafka为了防止网络通信提早带来的性能问题,

以及尽可能的保障新选举进去的Leader Partition外面的数据是最新的,所以设计了ISR这样一个计划。

ISR全称是 in-sync replica,它是一个汇合列表,外面保留的是和Leader Parition节点数据最靠近的Follower Partition

如果某个Follower Partition外面的数据落后Leader太多,就会被剔除ISR列表。

简略来说,ISR列表外面的节点,同步的数据肯定是最新的,所以后续的Leader选举,只须要从ISR列表外面筛选就行了。

所以,我认为引入ISR这个计划的起因有两个

  1. 尽可能的保证数据同步的效率,因为同步效率不高的节点都会被踢出ISR列表。
  2. 防止数据的失落,因为ISR外面的节点数据是和Leader正本最靠近的。

以上就是我对这个问题的了解。

总结

在我看来,这个问题十分有钻研价值。

一般来说,正本数据同步,无非就是同步阻塞、或者异步非阻塞。

然而这两种计划,要么带来性能问题,要么带来数据失落问题,都不是特地适合。

而ISR,就十分完满解决了这个问题,在理论过程中,咱们也能够借鉴相似的设计思路。

喜爱我作品的小伙伴,记得点赞珍藏加关注。

版权申明:本博客所有文章除特地申明外,均采纳 CC BY-NC-SA 4.0 许可协定。转载请注明来自 Mic带你学架构
如果本篇文章对您有帮忙,还请帮忙点个关注和赞,您的保持是我一直创作的能源。欢送关注同名微信公众号获取更多技术干货!