历史

ApacheSoftwareFoundation开发的源_爱超联赛

2020-10-25 01:13

本文摘要:与其他罕见的消息传递系统相比,卡夫卡不仅保证了其大部分功能和特点,而且在低精度和低延迟方面也表现出显著的特点。图4sendfile方法sendfile()方法使DMA引擎将文件内容复制到一个加载缓冲区(DMAcopy),然后内核将数据复制到socketbuffer(cpucopy),最后复制到网卡(DMAcopy)。

数据

Kafka是Apache Software Foundation开发的源码处理平台,广泛应用于数据缓冲、异步通信、日志聚合、系统解决方案耦合等。与其他罕见的消息传递系统相比,卡夫卡不仅保证了其大部分功能和特点,而且在低精度和低延迟方面也表现出显著的特点。

这篇文章不同于其他解释卡夫卡的使用或构造的文章,只谈卡夫卡用什么“白色技术”让他表现出如此卓越的表现。消息按顺序装入磁盘。大部分磁盘还是机械结构(SSD不在讨论范围内)。

如果信息是随机写出来的,它们必须以圆柱体、头和扇区的形式传输。传输速率是一个“机械动作”,最费时。为了提高读取硬盘的速度,卡夫卡用于顺序I/O。

图1Kafka顺序IO在上图中,每个分区都是一个文件,每个消息都追加到分区中,属于顺序写出磁盘,所以效率很低。这个方法有一个缺——,所以卡夫卡会去掉数据,不会保留所有数据。每个使用者对每个主题都有一个偏移量,以响应加载的数据。

关于磁盘顺序读取和随机读取的性能,提到了一组卡夫卡官方测试数据(RAID-5,7200 rpm):顺序I/O: 600 MB/Srandomi/O: 100 KB/s,所以仅执行顺序I/O就大大提高了卡夫卡的性能.ZeroCopy考虑了一个web程序加载文件内容并传输到网络的场景,构建核心代码如下:图2虽然普通的read方法只有两次调用,但是它经历了四次拷贝,包括两次cpu拷贝和用户模式与内核模式之间的多次上下文转换,不会降低CPU开销,但是zero ucopy就是为了解决这个问题。# mmap:增加副本数量的一种方法是调用mmap()而不是read():当应用程序调用mmap()时,磁盘上的数据不会通过DMA复制到内核缓冲区,然后操作系统就不会与应用程序共享这个内核缓冲区,所以不需要将内核缓冲区的内容复制到用户空间。当应用再次调用write()时,需要操作系统将内核缓冲区的内容复制到socket缓冲区,最后从LTL网卡中移除数据。图3mmap方法可以为mmap添加一次cpucopy,但不会遇到一些陷阱。

当你程序映射一个文件,但是这个文件被另一个进程截断时,写系统调用不会因为访问非法地址而被信号中断。一般来说,可以通过为SIGBUS信号创建一个信号处理程序,或者使用它进行文件租赁来解决这个问题,所以我在这里重复一下。

# #sendfile:从2.1版内核开始,Linux引入了sendfile来修改操作符。图4sendfile方法sendfile()方法使DMA引擎将文件内容复制到一个加载缓冲区(DMAcopy),然后内核将数据复制到socketbuffer(cpucopy),最后复制到网卡(DMAcopy)。sendfile不仅增加了数据副本的数量,还增加了上下文转换。

数据传输只在kernelspace中再次发生。中央处理器必须至少复制一次发送文件。这一步可以省略吗?为了避免所有的数据拷贝都由内核完成,我们必须有一个反对采集操作符的网络接口。

同时,在内核版本2.4中,套接字缓冲区描述符也进行了更改,以适应零拷贝拒绝的环境。这种方法不仅增加了多个上下文转换,而且几乎停止了cpucopy。

图5sendfile方法(DMagree)send file系统调用使用DMA引擎将文件内容复制到内核缓冲区,然后将带有文件方向和长度信息的缓冲区描述符添加到套接字缓冲区。这一步会将内核缓冲区的数据复制到socket缓冲区,但是DMA引擎不会将内核缓冲区的数据复制到协议引擎,从而防止最后一次CPU复制。

零拷贝技术非常广泛,JAVA的transferTo和transferFrom方法都是零拷贝。


本文关键词:爱超联赛app,复制到,零拷贝,数据,缓冲区,卡夫卡

本文来源:爱超联赛-www.yaboyule12.icu