关于Kafka零拷贝的疑问
来源:8-4 SpringCloud Sleuth 整合 Zipkin 实现分布式链路跟踪、收集

hllcve
2021-08-05
老师好,这是我在网上看到的,不知道说的对不对?
- partition顺序读写,充分利用磁盘特性,这是基础;
- Producer生产的数据持久化到broker,采用mmap文件映射,实现顺序的快速写入;
- Customer从broker读取数据,采用sendfile,将磁盘文件读到OS内核缓冲区后,直接转到socket buffer进行网络发送。
下面是我的疑问
- 顺序读写之所以快是因为减少了磁盘寻道时间,但是,如果在kafka多次写之间有其它线程调用了写操作呢?那为了防止这种操作只能是一个磁盘只能给Kafka一个进程使用吗?
- 我了解的是sendfile比mmap少一些上下文切换,那么为什么Producer生产数据时不使用sendfile方式?是因为生产数据最终要落到磁盘上,而落到磁盘就需要一次刷盘操作,而mmap利用了系统缓冲和磁盘映射的方式节省了一次刷盘操作,所以生产消息使用mmap,这个理解对吗?
写回答
1回答
-
同学你好:
你在网络上看到的那三个描述是正确的。不过,你的两个问题,我是真的没有细研究过;另外,我也不建议你花很多时间在这样的问题上面,原因有两个:
(1)对于这么底层细节的知识点,大概率是用不到的,所以,没必要细看;
(2)即使是面试,也不太可能会问到这样的问题
当然,如果你还是有兴趣的话,可以查查相关的资料说明。
212021-08-05
相似问题