我正在查看Kafka文档,特别是持久性部分:
Kafka文档-持久性部分
如果我在最后几行理解的话,它说kafka在磁盘到达时将数据写入磁盘,而不是使用ram。对我来说这听起来真的很奇怪(在磁盘上写不是繁重的操作?),但很明显我信任kafka开发人员。首先我想确认一下。
然后,假设并验证它,我在一台4gb-200gb的机器上执行了一个500kb/s数据流的简单任务几分钟,并生成了ram内存使用率(%)和磁盘空间使用率(mb)的图表。你可以在这里找到一张照片:
猛撞:https://ibb.co/mzyd5m
磁盘空间:https://ibb.co/coamrr
(流在第125秒被摄入,在第870秒左右结束)
根据我的理解,我希望看到一个关于磁盘空间使用率的线性递减图(由于数据到达时空间逐渐被占用),相反,我无法解释为什么会显示那些表示在相应的秒数内没有其他空间被占用的普通区域。
此外,文件中还有以下部分:
linux刷新行为
这似乎解释了与“持久性”部分相反的行为。它说linux使用pagecache(我想存储在ram中)来提供磁盘缓存。这可以解释第二个图中存在的普通区域,但这违背了kafka避免在易失性存储器上写的原则。
我真的很困惑。
谢谢你,安德里亚
1条答案
按热度按时间z4iuyo4d1#
Kafka总是直接写入磁盘,但请记住一点,i/o操作实际上是由操作系统执行的。在linux中,数据似乎被写入页面缓存,直到可以写入磁盘为止。Kafka已经完成了分配给操作系统要写入磁盘的数据的工作,但是决定何时以及如何写入数据的是操作系统。希望这能回答你的问题。