关于Kafka零拷贝的疑问

来源:8-4 SpringCloud Sleuth 整合 Zipkin 实现分布式链路跟踪、收集

hllcve

2021-08-05

老师好,这是我在网上看到的,不知道说的对不对?

  1. partition顺序读写,充分利用磁盘特性,这是基础;
  2. Producer生产的数据持久化到broker,采用mmap文件映射,实现顺序的快速写入;
  3. Customer从broker读取数据,采用sendfile,将磁盘文件读到OS内核缓冲区后,直接转到socket buffer进行网络发送。

下面是我的疑问

  1. 顺序读写之所以快是因为减少了磁盘寻道时间,但是,如果在kafka多次写之间有其它线程调用了写操作呢?那为了防止这种操作只能是一个磁盘只能给Kafka一个进程使用吗?
  2. 我了解的是sendfile比mmap少一些上下文切换,那么为什么Producer生产数据时不使用sendfile方式?是因为生产数据最终要落到磁盘上,而落到磁盘就需要一次刷盘操作,而mmap利用了系统缓冲和磁盘映射的方式节省了一次刷盘操作,所以生产消息使用mmap,这个理解对吗?
写回答

1回答

张勤一

2021-08-05

同学你好:

    你在网络上看到的那三个描述是正确的。不过,你的两个问题,我是真的没有细研究过;另外,我也不建议你花很多时间在这样的问题上面,原因有两个:

    (1)对于这么底层细节的知识点,大概率是用不到的,所以,没必要细看;

    (2)即使是面试,也不太可能会问到这样的问题

    当然,如果你还是有兴趣的话,可以查查相关的资料说明。

2
1
hllcve
好的,谢谢老师,老师效率真是太高了,问的问题都是当天就答复!
2021-08-05
共1条回复

Spring Cloud / Alibaba 微服务架构实战

从架构设计到开发实践,手把手实现

1210 学习 · 674 问题

查看课程