Kafka直接在磁盘上写入数据?

时间:2017-10-25 20:40:04

标签: filesystems apache-kafka ram

我正在查看Kafka文档,特别是在Persistence部分:

kafka doc - persistence section

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

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

RAM:https://ibb.co/mzYD5m

DISK SPACE:https://ibb.co/coAMrR

(该流在第二个125摄取,在第二个870左右结束)

根据我的理解,我预计会看到一个线性递减图(由于数据到达时逐渐占用空间)关于磁盘空间的使用,相反我无法解释为什么会显示那些表明那些指示的平原区域通讯秒内没有其他空间被占用。

此外,继续在文档中,有一节:

linux flush behaviour

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

我真的很困惑。

谢谢你, 安德烈

1 个答案:

答案 0 :(得分:7)

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