Kafka的文档明确指出,代理接收到的消息/记录会立即写入文件系统。使用默认配置,这意味着代理将立即将记录刷新到页面缓存中,稍后内核将其刷新到磁盘上。
我的问题是:使用者可以读取页面高速缓存中但尚未被内核刷新到磁盘的记录吗?
如果答案是肯定的,那么消费者将如何跟踪其读取的偏移量?
如果答案为否,则意味着必须先将记录从磁盘读回页面缓存,然后再通过零复制将记录发送到NIC。是吗?
谢谢
答案 0 :(得分:0)
无论何时对文件进行读/写操作,都首先将数据写入/提取到页面缓存中。在读取的情况下,如果高速缓存页中已经存在数据,则不会调用实际的磁盘读取,而是从页高速缓存中提供数据。并不是kafka使用者正在从代理的页面缓存中读取数据,而是由文件系统完成的,并且对实际的读取调用隐藏了。在大多数情况下,kafka中的记录是按顺序读取的,这使其可以有效地使用页面缓存。
从卡夫卡客户端进行的每次读取均使用零拷贝优化,将数据直接从页面缓存复制到NIC缓冲区。