Kafka直接在磁盘上写数据?

Kafka writes data directly on disk?

我正在查看 Kafka 文档,特别是持久性部分:

kafka doc - persistence section

如果我在最后几行中理解它说 Kafka 在磁盘到达时将数据写入磁盘而不是使用 RAM。这听起来对我来说真的很奇怪(写磁盘不是重操作?)但显然我信任 kafka 开发人员。首先我想确认一下。

然后,假设并验证它,我在一台 4GB-200GB 的机器上用 500kb/s 的数据流执行了一个简单的任务几分钟,我制作了 ram 内存使用率 (%) 和磁盘 space 使用量(MB)。你可以在这里找到照片:

内存:https://ibb.co/mzYD5m

磁盘 SPACE:https://ibb.co/coAMrR

(流在第 125 秒被摄取并在第 870 秒左右结束)

根据我的理解,我希望看到一个关于磁盘 space 使用情况的线性递减图(由于 space 随着数据到达而逐渐占用),但我无法看到解释为什么显示那些表明在对应的秒内没有其他 space 被占用的平原区域。

此外,在文档中继续,有部分:

linux flush behaviour

这似乎解释了与 "Persistence" 部分相反的行为。它说 Linux 使用页面缓存(我想存储在 RAM 中)来提供磁盘缓存。这可以解释第二张图中普通区域的存在,但它违背了 Kafka 避免在易失性内存上写入的原则。

我真的很困惑。

谢谢, 安德里亚

Kafka 总是直接写入磁盘,但请记住一件事 I/O 操作实际上是由操作系统执行的。在 Linux 的情况下,数据似乎被写入页面缓存,直到它可以写入磁盘。 Kafka 已经完成了将要写入磁盘的数据分配给操作系统的工作,但操作系统决定何时以及如何写入数据。 希望这能回答您的问题。