关于java:Java面试什么是-ISR为什么需要引入-ISR

47次阅读

共计 1171 个字符,预计需要花费 3 分钟才能阅读完成。

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 带你学架构
如果本篇文章对您有帮忙,还请帮忙点个关注和赞,您的保持是我一直创作的能源。欢送关注同名微信公众号获取更多技术干货!

正文完
 0