Kafka如何保证顺序磁盘访问?

dev*_*hak 4 apache-kafka

我是卡夫卡的新手.当我阅读Kafka的文档时,我看到Kafka由于顺序磁盘访问而表现良好.

但那怎么可能呢?在Java(或其他)中,如果我使用文件I/O,OS将适当地处理它.但是,我不知道OS是否存储了我想要存储在多个扇区或连续扇区中的文件.因此,Kafka并不总是说顺序磁盘访问发生在我看来.

我是真的还是不真的?

Han*_*sen 10

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

  • 也许通读标题为“不要害怕文件系统!”的部分。来自 Apache Kafka 设计文档 https://svn.apache.org/repos/asf/kafka/site/082/design.html (2认同)