美文网首页
kafka源码

kafka源码

作者: Ary_zz | 来源:发表于2018-12-04 11:11 被阅读0次

2018-12-04

https://www.infoq.cn/article/kafka-analysis-part-6

https://www.infoq.cn/article/kafka-analysis-part-8

零拷贝

传统的文件拷贝通常需要从用户态去转到核心态,经过read buffer,然后再返回到用户态的应用层buffer,然后再从用户态把数据拷贝到核心态的socket buffer,然后发送到网卡


传统拷贝

DMA,全称叫Direct Memory Access,一种可让某些硬件子系统去直接访问系统主内存,而不用依赖CPU的计算机系统的功能。

image.png

因此可以实现零拷贝


image.png

java中,零拷贝是通过java.nio.channels.FileChannel中的transferTo方法来实现的。transferTo方法底层是基于操作系统的sendfile这个system call来实现的(不再需要拷贝到用户态了),sendfile负责把数据从某个fd(file descriptor)传输到另一个fd


image.png

写入

顺序写入
内存映射
Memory Mapped Files 也被翻译成 内存映射文件 ,在64位操作系统中一般可以表示20G的数据文件,它的工作原理是直接利用操作系统的Page来实现文件到物理内存的直接映射。
完成映射之后你对物理内存的操作会被同步到硬盘上(操作系统在适当的时候)。
通过mmap,进程像读写硬盘一样读写内存(当然是虚拟机内存),也不必关心内存的大小有虚拟内存为我们兜底。
使用这种方式可以获取很大的I/O提升,省去了用户空间到内核空间复制的开销(调用文件的read会把数据先放到内核空间的内存中,然后再复制到用户空间的内存中。)
但也有一个很明显的缺陷——不可靠,写到mmap中的数据并没有被真正的写到硬盘,操作系统会在程序主动调用flush的时候才把数据真正的写到硬盘。
Kafka提供了一个参数——producer.type来控制是不是主动flush,如果Kafka写入到mmap之后就立即flush然后再返回Producer叫 同步 (sync);写入mmap之后立即返回Producer不调用flush叫异步 (async)。

相关文章

  • Kafka源码分析-Content Table

    Kafka源码分析-网络层-1 Kafka源码分析-网络层-2 Kafka源码分析-网络层-3 Kafka源码分析...

  • KafkaProducer

    Kafka源码阅读(一):Kafka Producer整体架构概述及源码分析 zqhxuyuan Kafka源码分...

  • Kafka源码阅读准备

    目标是希望能通过idea工具阅读Kafka源码并能成功的编译Kafka源码。 源码下载 Kafka的源码地址在 h...

  • 消息队列之一: kafka

    原则: kafka版本!kafka broker及spring-boot配置看官网,看kafka源码, 源码, 源...

  • Kafka源码剖析

    Kafka源码剖析 Kafka源码剖析之源码阅读环境搭建 首先下载源码:http://archive.apache...

  • Flink kafka source源码解析

    Flink kafka source源码解析(一)Flink kafka source源码解析(二)Flink k...

  • 搭建Kafka源码阅读环境

    搭建Kafka源码阅读环境在阅读Kafka源码之前,我们要动手搭建Kafak源码阅读环境。需要准备的软件有:Jav...

  • zkkafka

    kafka安装单机版 下载kafka源码包,http://kafka.apache.org/downloads解压...

  • kafka源码导入idea

    最近开始学习kafka源码,在将kafka源码导入idea的过程中遇到各种问题,故做此记录。 下载源码从githu...

  • Kafka源码环境搭建

    1 git上找到kafka地址 地址:Kafka源码git地址 2 下载源码 这里我们切换到1.1,主要针对1.1...

网友评论

      本文标题:kafka源码

      本文链接:https://www.haomeiwen.com/subject/yckmcqtx.html