Kafka从首次发布之日起,已经走过了七个年头。从最开始的大规模消息系统,发展成为功能完善的分布式流式处理平台,用于发布和订阅、存储及实时地处理大规模流数据。来自世界各地的数千家公司在使用Kafka,包括三分之一的500强公司。Kafka以稳健的步伐向前迈进,首先加入了复制功能和无边界的键值数据存储,接着推出了用于集成外部存储系统的Connect API,后又推出了为实时应用和事件驱动应用提供原生            
                
                    
                        
                                                            
                                                                        
                                                                                        转载
                                                                                    
                            2024-04-28 19:14:17
                            
                                26阅读
                            
                                                                             
                 
                
                             
         
            
            
            
            最近一个学员去滴滴面试,在第二面的时候遇到了这个问题:
"请你简单说一下Kafka的零拷贝原理"
然后那个学员努力在大脑里检索了很久,没有回答上来。
那么今天,我们基于这个问题来看看,普通人和高手是如何回答的!普通人的回答:零拷贝是一种减少数据拷贝的机制,能够有效提升数据的效率高手的回答:在实际应用中,如果我们需要把磁盘中的某个文件内容发送到远程服务器上,如图那么它必须要经过几个拷贝的过程:从磁盘            
                
                    
                        
                                                            
                                                                        
                                                                                        转载
                                                                                    
                            2024-03-21 11:06:20
                            
                                36阅读
                            
                                                                             
                 
                
                                
                     
                                    
                             
         
            
            
            
            Kafka除了具备消息队列MQ的特性和使用场景外,它还有一个重要用途,就是做存储层。用kafka做存储层,为什么呢?一大堆可以做数据存储的 MySQL、MongoDB、HDFS……因为kafka数据是持久化磁盘的,还速度快;还可靠、支持分布式……What ? ? 用了磁盘,还速度快 ? ? ?没错,kafka就是速度无敌,本文将探究kafka无敌性能背后的秘密。首先要有个概念,kafka高性能的背            
                
                    
                        
                                                            
                                                                        
                                                                                        转载
                                                                                    
                            2024-04-12 05:22:52
                            
                                63阅读
                            
                                                                             
                 
                
                                
                     
                                    
                             
         
            
            
            
            传统的数据传输方式需要从内核缓冲区将数据复制到用户空间缓冲区,再将其发送到网络。这种方式在处理大量数据时会导致性能瓶颈。而零拷贝技术通过避免这一过程,提高了数据传输的效率。  Kafka的零拷贝技术主要是通过以下几个方面实现的:内核缓冲区:Kafka生产者将数据写入到操作系统内核缓冲区中,而不是直接写入到用户空间缓冲区。sendfile系统调用:Kafka使用sendfile系统调用将数据从内核缓            
                
                    
                        
                                                            
                                                                        
                                                                                        转载
                                                                                    
                            2024-02-13 19:32:19
                            
                                43阅读
                            
                                                                             
                 
                
                             
         
            
            
            
            在上一文中“图解Kafka消息是被怎么存储的?”,我们了解了Kafka内部是如何存储数据的,其中我们提到了Kafka之所以那么快的另外一个原因就是零拷贝(zero-copy)技术。本文我们就来了解Kafka中使用的零拷贝技术为什么那么快。传统的文件拷贝传统的文件拷贝通常需要从用户态去转到核心态,经过read buffer,然后再返回到用户态的应用层buffer,然后再从用户态把数据拷贝到核心态的s            
                
                    
                        
                                                            
                                                                        
                                                                                        转载
                                                                                    
                            2024-02-23 23:07:19
                            
                                148阅读
                            
                                                                             
                 
                
                                
                     
                                    
                             
         
            
            
            
            Kafka之所以那么快,其中一个很大的原因就是零拷贝(Zero-copy)技术,零拷贝不是kafka的专利,而是操作系统的升级,又比如Netty,也用到了零拷贝。下面我就画图讲解零拷贝,如果对你有帮助请点个赞支持。传统IOkafka的数据是要落入磁盘的,那么必然牵扯到磁盘的IO,传统磁盘IO又叫缓存IO,效率是很低的,那么为什么效率低呢?我们先来粗略讲讲操作系统的知识。用户空间以及内核空间的概念:            
                
                    
                        
                                                            
                                                                        
                                                                                        转载
                                                                                    
                            2024-07-25 20:15:10
                            
                                200阅读
                            
                                                                             
                 
                
                                
                     
                                    
                             
         
            
            
            
            内容: 记录kafka快的其中一个原因:零拷贝、不使用零拷贝技术时:一个进程读取磁盘内容并发送出去的过程如下1、操作系统从磁盘读取数据到内核空间的 pagecache
2、应用程序读取内核空间的数据到用户空间的缓冲区
3、应用程序将数据(用户空间的缓冲区)写回内核空间到套接字缓冲区(内核空间)
4、操作系统将数据从套接字缓冲区(内核空间)复制到通过网络发送的网卡缓冲区
实际调用函数内容是
1:调            
                
                    
                        
                                                            
                                                                        
                                                                                        转载
                                                                                    
                            2024-07-26 12:08:01
                            
                                38阅读
                            
                                                                             
                 
                
                                
                     
                                    
                             
         
            
            
            
            1. 前言前一段时间研究了大规模日志流高吞吐并行存储,通过深入研究Kafka的底层存储机制。我们发现Kafka的Zero-Copy零拷贝技术采用的是Java底层FileTransferTo方法,后期我们尝试了对TransferTo性能及其并行性能进行测试。以及后面在Kafka上面实现了并行TransferTo方法,并应用到了Apache Kafka系统中。2. 消息存储机制Kafka是一个分布式消            
                
                    
                        
                                                            
                                                                        
                                                                                        转载
                                                                                    
                            2024-04-19 14:31:34
                            
                                26阅读
                            
                                                                             
                 
                
                                
                     
                                    
                             
         
            
            
            
            kafka中的消费者在读取服务端的数据时,需要将服务端的磁盘文件通过网络发送到消费者进程,网络发送需要经过几种网络节点。如下图所示:传统的读取文件数据并发送到网络的步骤如下:(1)操作系统将数据从磁盘文件中读取到内核空间的页面缓存;(2)应用程序将数据从内核空间读入用户空间缓冲区;(3)应用程序将读到数据写回内核空间并放入socket缓冲区;(4)操作系统将数据从socket缓冲区复制到...            
                
                    
                        
                                                            
                                                                        
                                                                                        转载
                                                                                    
                            2021-06-11 21:57:41
                            
                                785阅读
                            
                                                                             
                 
                
                             
         
            
            
            
            https://zhuanlan.zhihu.com/p/78335525            
                
                    
                        
                                                            
                                                                        
                                                                                        原创
                                                                                    
                            2022-02-17 11:40:34
                            
                                7719阅读
                            
                                                                             
                 
                
                             
         
            
            
            
            一、概念什么是零拷贝?零是指拷贝的次数为零,拷贝是指数据从一个存储区域转移到另一个存储区域,所以零拷贝就是指不需要将数据从一个存储区域复制到另一个存储区域,即 计算机在执行IO操作时,CPU不需要从一个存储区域复制到另一个存储区域,进而减少上下文切换以及CPU的拷贝时间。它是一种IO操作优化技术。可以看到,整个数据的传输过程,都要需要 CPU 亲自参与搬运数据的过程,而且这个过程,CPU 是不能做            
                
         
            
            
            
            https://zhuanlan.zhihu.com/p/78335525            
                
                    
                        
                                                            
                                                                        
                                                                                        原创
                                                                                    
                            2021-06-21 16:48:19
                            
                                358阅读
                            
                                                                             
                 
                
                             
         
            
            
            
            事件循环想象你有一个邮箱,每天都会收到很多信件。你不可能一直守在邮箱旁边等信,所以你会定时去查看,比如每天早上。这个查看的行为,就像是一个“循环”,因为你每天都会重复做这件事。这个“循环”会一直持续,直到你决定停止查看为止。在计算机编程中,“事件循环”也是类似的。计算机程序会不停地“查看”有没有新的事件发生,比如用户点击了一个按钮,或者收到了一个新的网络消息。一旦发现有新事件,程序就会立即处理它。            
                
         
            
            
            
            在实际应用中,如果我们需要把磁盘中的某个文件内容发送到远程服务器上, 那么它必须要经过几个拷贝的过程,。 从磁盘中读取目标文件内容拷贝到内核缓冲区 CPU 控制器再把内核缓冲区的数据赋值到用户空间的缓冲区中 接着在应用程序中,调用 write()方法,把用户空间缓冲区中的数据拷贝到内核下 的 Socket Buffer 中。 最后,把在内核模式下的 SocketBuffer 中的数据赋值到网卡缓冲            
                
                    
                        
                                                            
                                                                        
                                                                                        转载
                                                                                    
                            2024-04-19 08:52:12
                            
                                66阅读
                            
                                                                             
                 
                
                             
         
            
            
            
                    在实际应用中,如果我们需要把磁盘中的内容发送到远程服务器上,那么需要经过一下几个拷贝的过程。        第一个从磁盘中去读取目标文件的内容去拷贝到内核缓冲区,第二个cpu控制器把内核缓冲区的数据拷贝到用户空间的缓冲区中,            
                
                    
                        
                                                            
                                                                        
                                                                                        转载
                                                                                    
                            2024-04-03 12:01:38
                            
                                26阅读
                            
                                                                             
                 
                
                             
         
            
            
            
            零拷贝概述零拷贝可以避免无谓的copy动作,为了说清楚这一点,本文会先从传统的读写操作开始介绍。传统读操作当应用发起一个从磁盘读取文件的操作时,请求会先经过内核,由内核与磁盘进行交互。数据会从磁盘拷贝到内核的缓存区中。这个copy动作由DMA完成,整个过程中基本上不消耗CPU。DMA硬件和软件的信息传输,可以使用DMA(direct memory access)来完成如果应用想拿到信息,还得从内核            
                
                    
                        
                                                            
                                                                        
                                                                                        转载
                                                                                    
                            2024-10-13 13:21:53
                            
                                48阅读
                            
                                                                             
                 
                
                                
                     
                                    
                             
         
            
            
            
            kafka会把每个topic下的partitions复制到多个server(server数可以设置,通过设置每个分区的复制因子)。当集群中的一台server故障的时候,可以自动地实现故障转移,消息仍然可用。其他的消息系统也提供了一些复制的功能,但是在我们看来,这体现为一种附加功能,不是经常使用,并且带有大的缺点:slaves是不活动的,吞吐量受到严重影响,需要精确的人工设置等等。而kafka默            
                
                    
                        
                                                            
                                                                        
                                                                                        转载
                                                                                    
                            2024-04-04 07:14:30
                            
                                34阅读
                            
                                                                             
                 
                
                             
         
            
            
            
            参考文档: http://kafka.apache.org/documentation/#design复制Kafka跨越指定配置数量服务器(可以设置这个复制因子在)复制每个主题分期的日志。这提供了自动故障转移功能,当集群中一个服务器宕机时消息依旧可用。其他消息系统提供了复制相关的功能,但在我们看来(完全有偏见),此功能像是附加功能,没有被大量使用,并有很大的缺点:副本处于非活动状态,吞吐量受到严重            
                
                    
                        
                                                            
                                                                        
                                                                                        转载
                                                                                    
                            2024-04-09 06:41:30
                            
                                23阅读
                            
                                                                             
                 
                
                             
         
            
            
            
              零拷贝就是一种避免CPU 将数据从一块存储拷贝到另外一块存储的技术。   DMA技术是Direct Memory Access的缩写。其意思是“存储器直接访问”。它是指一种高速的数据传输操作,允许在外部设备和存储器之间直接读写数据,既不通过CPU,也不需要CPU干预。  DMA是指外部设备不通过CPU而直接与系统内存交换数据的接口技术。要把外设的数据读入内存或把内存的数据传送到外设,            
                
                    
                        
                                                            
                                                                        
                                                                                        转载
                                                                                    
                            2024-10-11 20:43:45
                            
                                16阅读
                            
                                                                             
                 
                
                                
                     
                                    
                             
         
            
            
            
            预备知识:kafka的消息可以分成不同的topic,一个topic中的消息分布在不同的partition中,一个partition有多个副本,这些副本都叫AR(assigned replica),分为一个leader和多个follower。分布式的一个核心技术就是复制。我们需要研究的问题是:follower是怎样从leader那里同步数据的?先来看下单个AR,都有哪些特点?每个副本都有LEO(Lo            
                
                    
                        
                                                            
                                                                        
                                                                                        转载
                                                                                    
                            2024-04-17 13:05:59
                            
                                31阅读