有人可以解释在以下上下文中刷新到磁盘的含义吗?如果我将数据写入文件系统上的日志,这是否意味着我将其放在磁盘上?在什么时候/应该将文件刷新到磁盘?
这表明了一种非常简单的设计:与其在内存中尽可能多地维护并在空间不足时恐慌地将其全部刷新到文件系统中,不如将其反转。所有数据都会立即写入文件系统上的持久日志,而不必刷新到磁盘。实际上,这只是意味着它被传输到内核的页面缓存中。
所有数据都会立即写入文件系统上的持久日志,而不必刷新到磁盘。实际上,这只是意味着它被传输到内核的页面缓存中。
这意味着 Kafka 通过write()系统调用将数据传递给内核——此时它对其他进程可见,但实际上可能会或可能不会反映在磁盘上并在重新启动后仍然存在——但不会强制内核通过fsync()调用或类似方式将其快速写入磁盘(适用于手头的操作系统)。如果优化吞吐量并且不需要保证内容可检索,这可能是一个合适的决定:fsync()它的亲属可能是昂贵的调用(尽管通过执行不需要查找的长连续写入,kafka 最大限度地减少了其磁盘 IO 的开销)。