我是卡夫卡的新手。当我阅读Kafka的文档时,我看到了Kafka is performing well because of sequential disk access。
但这怎么可能?在Java(或其他)中,如果我使用文件I / O,OS将适当地处理它。但是,我不知道OS是否存储了我想要存储在多个扇区或连续扇区中的文件。因此,Kafka并不总是说顺序磁盘访问在我看来发生。
我是真的还是没有?
答案 0 :(得分:9)
Kafka不会始终按顺序访问磁盘,但它会做一些事情,使磁盘访问更可能经常顺序。所有Kafka消息都存储在较大的段文件中(默认为1GB),因为Kafka消息在使用时不会被删除(就像在其他消息代理中一样)Kafka不会通过不断创建和删除许多变量长度来创建碎片文件系统文件。相反,它会创建段文件,然后附加到该文件,直到达到1GB(可配置的限制)。只有当段中的所有消息都过期时,它才会删除整个1GB段。这意味着通常这些1GB的磁盘部分实际上是作为连续的块布局的。建议最佳做法是将这些Kafka提交日志文件保存在专用文件系统上,以免其他应用程序读取和写入可变长度文件到同一文件系统中。更重要的是,大多数读取这些段文件的写入是顺序的,并通过OS页面缓存,以便通过缓存内存中最常访问的页面来进一步减少磁盘I / O.这就是为什么建议调整内核以将swappiness设置为1以减少这些缓存页面被换出内存的可能性。