我是小米,一个喜欢分享技术的29岁程序员。如果你喜欢我的文章,欢迎关注我的微信公众号“软件求生”,获取更多技术干货!
大家好,我是小米,一个热爱分享技术的小伙伴!今天我们来聊聊一个非常有趣的话题:为什么 Kafka 不支持完全的读写分离?自从 Kafka 2.4 版本之后,Kafka 确实提供了一些有限度的读写分离功能,但在许多情况下,我们还是发现它并不适用于所有场景。让我们一起来探讨一下原因吧!
有限度的读写分离
先来看看 Kafka 2.4 带来的变化。之前的 Kafka 版本中,所有的读写操作都必须由 Leader 分区来处理,这意味着 Leader 承担了所有的压力。当 Kafka 2.4 推出时,它引入了一种新的机制:Follower 节点可以处理只读请求。也就是说,现在我们可以将一部分读请求分散到 Follower 上,以减轻 Leader 的负担。
这听起来很不错,对吧?然而,实际使用中我们发现,这种有限度的读写分离还是有很多限制的。首先,并不是所有的读请求都可以被分配到 Follower 上。对于一些高一致性要求的读请求,我们还是必须从 Leader 获取数据。其次,Follower 处理读请求的效率并不一定比 Leader 高,尤其是在复制延迟较大的情况下,Follower 的数据可能会落后于 Leader。
场景不适用
那么,什么情况下读写分离是有效的呢&