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