【问题标题】:How does Kafka guarantee sequential disk access?Kafka如何保证顺序磁盘访问?
【发布时间】:2017-08-18 08:07:23
【问题描述】:

我是 Kafka 的新手。当我阅读Kafka的文档时,我看到了Kafka is performing well because of sequential disk access

但这怎么可能呢?在 Java(或其他)中,如果我使用文件 I/O,操作系统会适当地处理它。但是,我不知道操作系统是否将我想要存储的文件存储在多个扇区或连续扇区中。因此,我认为 Kafka 不能总是说顺序磁盘访问发生。

我是真的还是假的?

【问题讨论】:

标签: apache-kafka


【解决方案1】:

Kafka 并不总是顺序访问磁盘,但它做了一些事情,使得磁盘访问更有可能经常顺序访问。所有 Kafka 消息都存储在更大的段文件中(默认每个 1GB),并且由于 Kafka 消息在使用时不会被删除(就像在其他消息代理中一样),Kafka 不会随着时间的推移通过不断创建和删除许多可变长度来创建碎片文件系统文件。相反,它会创建段文件,然后附加到该文件,直到达到 1GB(可配置限制)。只有当段中的所有消息都过期时,它才会删除整个 1GB 段。这意味着通常这些 1GB 的磁盘部分实际上是作为连续块布局的。推荐的最佳实践是将这些 Kafka 提交日志文件保存在专用文件系统上,这样它就不会被其他应用程序在同一文件系统中读取和写入可变长度文件而碎片化。更重要的是,大多数对这些段文件的读取和写入是顺序的,并通过操作系统页面缓存,以便通过在内存中缓存最常访问的页面来进一步减少磁盘 I/O。这就是为什么建议调整内核以将 swappiness 设置为 1 以减少这些缓存页面被换出内存的可能性。

【讨论】:

  • 所以如果我用普通api提前申请1GB磁盘,然后写入这部分磁盘,也是顺序的,对吗?
  • 也许通读标题为“不要害怕文件系统!”的部分来自 Apache Kafka 设计文档svn.apache.org/repos/asf/kafka/site/082/design.html
猜你喜欢
  • 1970-01-01
  • 2019-03-20
  • 2012-10-23
  • 1970-01-01
  • 2010-10-20
  • 2011-05-23
  • 1970-01-01
  • 1970-01-01
  • 2020-03-04
相关资源
最近更新 更多