首页 > 其他分享 >Kafka 什么速度那么快

Kafka 什么速度那么快

时间:2023-10-15 12:32:12浏览次数:39  
标签:那么 写入 Kafka 内存 磁盘 速度 数据 内核


批量发送消息

Kafka 采用了批量发送消息的方式,通过将多条消息按照分区进行分组,然后每次发送一个消息集合,看似很平常的一个手段,其实它大大提升了 Kafka 的吞吐量。

消息压缩

消息压缩的目的是为了进一步减少网络传输带宽。而对于压缩算法来说,通常是数据量越大,压缩效果才会越好。

因为有了批量发送这个前期,从而使得 Kafka 的消息压缩机制能真正发挥出它的威力。对比压缩单条消息,同时对多条消息进行压缩,能大幅减少数据量,从而更大程度提高网络传输率。

多分区

Kafka 使用的是多分区策略,消息被组织成一个一个的主题(topic),而主题可以划分为多个分区(partition)。每个分区都是一个有序、持久化的日志,而 Kafka 通过分区来实现消息的水平扩展和负载均衡。

每个分区内的消息有一个唯一的偏移量(offset),消费者可以根据偏移量读取消息。一个主题可以有多个分区,而消费者可以并行地消费不同分区的消息。

Kafka 什么速度那么快_分布式

Kafka 使用分区的副本机制来实现数据的冗余备份,而每个主题的分区可以配置多个副本,其中一个副本为 leader(领导者),其他副本为 follower(跟随者)。所有写入操作都由 leader 处理,而 follower 会定期从 leader 同步数据,保持与 leader 数据的一致性。

当 leader 节点故障时,Kafka 会自动从剩余的 follower 中选举新的 leader,确保数据的可用性。

 

顺序写入

Kafka 的特性之一就是高吞吐率,但是 Kafka 的消息是保存在磁盘上的,一般认为在磁盘上读写数据是会降低性能的,但是 Kafka 即使是普通的服务器,Kafka 也可以轻松支持每秒百万级的写入请求,超过了大部分的消息中间件,这种特性也使得 Kafka 在日志处理等海量数据场景广泛应用。

Kafka 为防止丢失数据,会把收到的消息都写入到硬盘中。为了优化写入速度 Kafka 采用了两个技术:顺序写入和 MMFile

因为硬盘是机械结构,每次读写都会寻址->写入,其中寻址是一个“机械动作”,它是最耗时的。所以硬盘最讨厌随机I/O,最喜欢顺序I/O。为了提高读写硬盘的速度,Kafka就是使用顺序I/O。这样省去了大量的内存开销以及节省了IO寻址的时间。

即便是顺序写入硬盘,硬盘的访问速度还是不可能追上内存。所以 Kafka 的写入性能也不可能和内存进行对比,因此 Kafka 的数据并不是实时的写入硬盘中,它充分利用了现代操作系统分页存储(Page Cache)来利用内存提高 I/O 效率。

Memory Mapped Files

Memory Mapped Files(MMAP或MMFile)也称内存映射文件,在64位操作系统中一般可以表示20G的数据文件,它的工作原理是直接利用操作系统的 Page 实现文件到物理内存的直接映射。完成 MMAP 映射后,用户对内存的所有操作会被操作系统自动的刷新到磁盘上,极大地降低了 IO 使用率。

Kafka 什么速度那么快_kafka_02

 常规的文件操作为了提高读写性能,使用了 Page Cache 机制,但是由于页缓存处在内核空间中,不能被用户进程直接寻址,所以读文件时还需要通过系统调用,将页缓存中的数据再次拷贝到用户空间中。而采用 mmap 后,它将磁盘文件与进程虚拟地址做了映射,并不会招致系统调用,以及额外的内存 copy 开销,从而提高了文件读取效率。

Page Cache

虽然磁盘顺序写已经很快了,但是对比内存顺序写仍然慢了几个数量级。Kafka 用到了 Page Cache 技术,利用了操作系统本身的缓存技术,在读写磁盘日志文件时,其实操作的都是内存,然后由操作系统决定什么时候将 Page Cache 里的数据真正刷入磁盘。

Kafka 什么速度那么快_数据_03

 如果在极端的情况下会存在丢失数据的风险。

零拷贝

传统模式下,当需要对一个文件进行传输的时候,其具体流程细节如下:

Kafka 什么速度那么快_数据_04

Kafka 什么速度那么快_数据_05

  1. 用户进程调用 read ,系统调用向操作系统发出IO请求,请求读取数据到自己的内存缓冲区中。自己进入阻塞状态。
  2. 操作系统收到请求后,进一步将IO请求发送磁盘。
  3. 磁盘驱动器收到内核的IO请求,把数据从磁盘读取到驱动器的缓冲中。此时不占用CPU。当驱动器的缓冲区被读满后,向内核发起中断信号告知自己缓冲区已满。
  4. 内核收到中断,使用CPU时间将磁盘驱动器的缓存中的数据拷贝到内核缓冲区中。
  5. 如果内核缓冲区的数据少于用户申请的读的数据,重复步骤3跟步骤4,直到内核缓冲区的数据足够多为止。
  6. 将数据从内核缓冲区拷贝到用户缓冲区,同时从系统调用中返回,完成任务。


 Kafka服务器在响应客户端读取的时候,底层使用 ZeroCopy 技术,直接将磁盘无需拷贝到用户空间,而是直接将数据通过内核空间传递输出,数据并没有抵达用户空间。

Kafka 什么速度那么快_系统调用_06

标签:那么,写入,Kafka,内存,磁盘,速度,数据,内核
From: https://blog.51cto.com/u_15856116/7871093

相关文章

  • Kafka如何解决消息丢失的问题
    在Kafka的整个架构中可以总结出消息有三次传递的过程:Producer端发送消息给Broker端Broker将消息进行并持久化数据Consumer端从Broker将消息拉取并进行消费在以上这三步中每一步都可能会出现丢失数据的情况,那么Kafka到底在什么情况下才能保证消息不丢失呢?Producer端丢......
  • Kafka 入门教程
     Kafka是分布式发布-订阅消息系统,它最初由LinkedIn公司开发,使用Scala语言编写,之后成为Apache项目的一部分。在Kafka集群中,没有“中心主节点”的概念,集群中所有的服务器都是对等的,因此,可以在不做任何配置的更改的情况下实现服务器的的添加与删除,同样的消息的生产者和消费者......
  • Kafka:用于日志处理的分布式消息系统
    周末躺不平,摆不烂,卷不动,随便读一篇paper吧原文:Kafka:aDistributedMessagingSystemforLogProcessing作者:JayKreps/NehaNarkhede/JunRao这三尊神就是当初在LinkedIn开发Kafka的大佬摘要日志处理已经成为了当下互联网公司数据管道(datapipeline)的重要组成部分。......
  • kafka 消费报错
    具体报错信息Traceback(mostrecentcalllast):File"/root/kafkatomysql.py",line166,in<module>consumer.commit()File"/usr/local/python3.9/lib/python3.9/site-packages/kafka/consumer/group.py",line527,incommitself._coo......
  • 博学谷学习记录 自我总结 用心分享 | Kafka刨析
    基本概念Kafka 体系架构Kafka体系架构包括若干Producer、若干Broker、若干Consumer,以及一个 ZooKeeper 集群。在Kafka中还有两个特别重要的概念—主题(Topic)与分区(Partition)。Kafka中的消息以主题为单位进行归类,生产者负责将消息发送到特定的主题(发送到Kafka集群......
  • 大白话教你认识 Kafka,背后原理竟能秒懂 转载
    一、Kafka基础消息系统的作用应该大部份小伙伴都清楚,用机油装箱举个例子所以消息系统就是如上图我们所说的仓库,能在中间过程作为缓存,并且实现解耦合的作用。引入一个场景,我们知道中国移动,中国联通,中国电信的日志处理,是交给外包去做大数据分析的,假设现在它们的日志都交给了你......
  • Kafka服务报UnknownHostException解决办法
    问题描述启动需要连接kafka服务的项目,报如下错误09:57:01.336[http-nio-8085-exec-3]WARNorg.apache.kafka.clients.NetworkClient-[ConsumerclientId=consumer-group-1,groupId=XX-group]ErrorconnectingtonodeMY_HOST_NAME:9092(id:0rack:null)java.net.Unk......
  • Nginx 做前端代理,上传文件速度慢
    同一台服务器,前端部署在nginx,在上传33M的文件时,耗时36s,但是通过IIS或者swagger上传文件,只需要8s解决方案:将Nginx配置文件中 proxy_passhttp://139.196.154.85:54730/;改为localhost: proxy_passhttp://localhost:54730/; 此方案只适用于前后端部署在同一台服务器的情况......
  • 【短道速滑十】非局部均值滤波的指令集优化和加速(针对5*5的搜索特例,可达到单核1080P灰
        非局部均值滤波(NonLocalMeans)作为三大最常提起来的去燥和滤波算法之一(双边滤波、非局部均值、BM3D),也是有着很多的论文作为研究和比较的对象,但是也是有着致命的缺点,速度慢,严重的影响了算法的应用范围。目前在已有的文献中尚未看到在不对算法的本质原理上做更改的情况......
  • Kafka的监控和故障恢复
    前言说完Kafka在企业级应用中的使用之后,接下来避免不了的话题就是故障监控和恢复了,今天咱们也来聊聊这个话题监控Kafka集群Kafka集群的监控是确保其正常运行和性能优化的关键步骤。下面列出了一些常用的方法和工具来监控Kafka集群:JMX监控:Kafka提供了JMX(JavaManagementExt......