Kafka使用者可以从经纪人的页面缓存中读取记录吗?

时间:2018-10-08 17:19:57

标签: apache-kafka

Kafka的文档明确指出,代理接收到的消息/记录会立即写入文件系统。使用默认配置,这意味着代理将立即将记录刷新到页面缓存中,稍后内核将其刷新到磁盘上。

我的问题是:使用者可以读取页面高速缓存中但尚未被内核刷新到磁盘的记录吗?

如果答案是肯定的,那么消费者将如何跟踪其读取的偏移量?

如果答案为否,则意味着必须先将记录从磁盘读回页面缓存,然后再通过零复制将记录发送到NIC。是吗?

谢谢

1 个答案:

答案 0 :(得分:0)

无论何时对文件进行读/写操作,都首先将数据写入/提取到页面缓存中。在读取的情况下,如果高速缓存页中已经存在数据,则不会调用实际的磁盘读取,而是从页高速缓存中提供数据。并不是kafka使用者正在从代理的页面缓存中读取数据,而是由文件系统完成的,并且对实际的读取调用隐藏了。在大多数情况下,kafka中的记录是按顺序读取的,这使其可以有效地使用页面缓存。

从卡夫卡客户端进行的每次读取均使用零拷贝优化,将数据直接从页面缓存复制到NIC缓冲区。