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这个计划的起因有两个
- 尽可能的保证数据同步的效率,因为同步效率不高的节点都会被踢出ISR列表。
- 防止数据的失落,因为ISR外面的节点数据是和Leader正本最靠近的。
以上就是我对这个问题的了解。
总结
在我看来,这个问题十分有钻研价值。
一般来说,正本数据同步,无非就是同步阻塞、或者异步非阻塞。
然而这两种计划,要么带来性能问题,要么带来数据失落问题,都不是特地适合。
而ISR,就十分完满解决了这个问题,在理论过程中,咱们也能够借鉴相似的设计思路。
喜爱我作品的小伙伴,记得点赞珍藏加关注。
版权申明:本博客所有文章除特地申明外,均采纳 CC BY-NC-SA 4.0 许可协定。转载请注明来自Mic带你学架构
!
如果本篇文章对您有帮忙,还请帮忙点个关注和赞,您的保持是我一直创作的能源。欢送关注同名微信公众号获取更多技术干货!