为什么Kafka这么快(Kafka高吞吐、高性能)

文章目录

    • 问什么 Kafka 可以这么快?
    • 消息发送端
    • 消息存储
      • 1.零拷贝机制
      • 2.磁盘顺序读写
      • 3.稀疏索引
      • 4.页缓存
      • 5.分区和副本
      • 6.分段存储的好处
    • 消息消费

Kafka是分布式消息系统,需要处理海量的消息,Kafka的设计是把所有的消息都写入速度低容量大的硬盘,以此来换取更强的存储能力,但实际上,使用硬盘并没有带来过多的性能损失。kafka主要使用了以下几个方式实现了超高的吞吐率,Kafka是一个号称能用普通的PC机也能处理超千万亿的消息吞吐量的实时消息流处理平台。

问什么 Kafka 可以这么快?

发送端、存储端、消费端
发送端:异步发送+多分区并行+消息批量发送
存储端:零拷贝技术+磁盘顺序写入+稀疏索引+分区和副本+页缓存
消费端:消费者群组+并行消费+批量拉取

消息发送端

异步发送+多分区并行+消息批量发送
1.异步发送:生产者可以异步发送消息,不必等待每个消息的确认,这大大提高了消息发送的效率。
2.多分区并行:通过将数据分布在不同的分区(partitions)中,生产者可以并行发送消息,从而提高吞吐量。
3.数据压缩+消息批量发送,节省网络IO开销

消息存储

零拷贝技术+磁盘顺序写入+稀疏索引+分区和副本+页缓存

1.零拷贝机制

零拷贝技术:karka使用零拷贝技术来避免了数据的拷贝操作,降低了内存和cpu的使用率,提高了系统的性能。
零烤贝,首先要了解操作系统的o流程,因为有内核态和用户态的区别,为了保证安全性和缓存。
操作系统的虚拟内存分成两部分,一部分是内核空间,一部分是用户空间。这样就可以避免用户进程直接操作内核,保证内核安全。如图所示:
在这里插入图片描述

正常情况下,如果用户要从磁盘读取数据,必须先把数据从磁盘拷贝到内核缓冲区,然后在从内核缓冲区到用户缓冲区,最后才能返回给用户。
在Linux操作系统里面提供了一个sendfile函数,可以实现“零拷贝”。意思就是不需要经过用户缓冲区,可以直接把数据拷贝到网卡。
而Kafka中文件传输最终调用的是Java NIO 库里的 transferTo 方法,实际上最后就会使用到Linux sendfile() 系统调用函数。零拷贝技术可以大大地提升文件传输的性能。

2.磁盘顺序读写

磁盘顺序写入:kark把消息存储在磁盘上,且以顺序的方式写入数据。顶序写入比随机写入速度快很多,因
为它减少了磁头寻道时间,避免了随机读写带来的性能损耗,提高了磁盘的使用效率。

在这里插入图片描述

3.稀疏索引

Kafka的索引并不是每一条消息都会建立索引,而是一种稀疏索引
也就是说,Kafka插入一批消息才会产生一条索引记录。后续利用二分查找,可以大大提高检索效率。
稀疏索引:kafka存储消息是通过分段的日志文件,每个分段都有自己的索引文件,这些索引文件中的条目不
是对分段中的每条消息都建立索引,而是每隔一定数量的消息建立一个索引点,这就构成了稀疏索引,稀疏索
引减少了索引大小,使得加载到内存中的索引更小,提高了查找特定消息的效率
4.批量文件压缩
Kafka默认不会删除数据,它会把所有的消息都变成一个批量的文件。如图所示,它会把相同的Key合并为最后一个Value。这样对消息进行合理的批量压缩,可以减少网络IO损耗。

4.页缓存

kak将其数据存储在磁盘中,但在访问数据时,它会先将数据加载到操作系统的页缓存中,并在页缓存中保留一份副本,从而实现快速的数据访问。
页缓存:kaka将其数据存储在磁盘中,但在访问数据时,它会先将数据加载到操作系统的页缓存中,并在页缓存中保留一份副本,从而实现快速的数据访问。
这个是磁盘的构造。磁盘的盘片不停地旋转,磁头会在磁盘表面画出一个圆形轨迹,这个就叫磁道。从内到位半径不同有很多磁道。然后又用半径线,把磁道分割成了扇区(两根射线之内的扇区组成扇面)。如果要读写数据,必须找到数据对应的扇区,这个过程就叫寻址。
如果读写的多条数据在磁盘上是分散的,寻址会很耗时,这叫随机I/O。
如果读写的数据在磁盘上是集中的,不需要重复寻址的过程,这叫顺序I/O。
而Kafka的Message是不断追加到本地磁盘文件末尾的,而不是随机的写入,这使得Kafka写入吞吐量得到了显著提升。
在一定条件下测试,磁盘的顺序读写可以达到53.2M每秒,比内存的随机读写还要快。

5.分区和副本

kaka采用分区和副本的机制,可以将数据分散到多个节点上进行处理,从而实现了分布式的但
高可用性和负载均衡。

6.分段存储的好处

1、读取效率高
2、方便消息清理,仅删除,无修改

消息消费

1,消费者群组:通过消费者群组可以实现消息的负载均衡和容错处理。
2,并行消费:不同的消费者可以独立地消费不同的分区,实现消费的并行处理。
3,批量拉取:kak支持批量拉取消息,可以一次性拉取多个消息进行消费。减少网络消耗,提升性能

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/709302.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

宝塔FTP服务设置并结合cpolar内网穿透实现远程传输文件

文章目录 1. Linux安装Cpolar2. 创建FTP公网地址3. 宝塔FTP服务设置4. FTP服务远程连接小结 5. 固定FTP公网地址6. 固定FTP地址连接 宝塔FTP是宝塔面板中的一项功能,用于设置和管理FTP服务。通过宝塔FTP,用户可以创建FTP账号,配置FTP用户权限…

Unity 常用操作

2D素材网站 https://craftpix.net/ https://itch.io/game-assets/tag-2d/tag-backgrounds 3D素材资源网址 https://www.mixamo.com/#/ 场景常用操作: 快捷键:QWER Q:Q键或鼠标中键,可以拉动场景。 W:选中物体后&…

新闻网站封锁AI爬虫 AI与新闻媒体博弈继续

随着ChatGPT等新兴AI模型的兴起,它们所依赖的网络爬虫正面临来自全球主流新闻网站的大规模封锁。Richard Fletcher博士团队对十个国家主流新闻网站的统计发现,到2023年底,48%的网站屏蔽了OpenAI的爬虫,24%屏蔽了Google的爬虫。那么…

010 Linux 进程间通信_匿名管道

前言 本文将会向你介绍匿名管道的原理以及用法,以及管道的使用存在的情况和管道的特性 文章重点 重点:匿名管道的原理,使用情况,以及特性 进程间通信 进程间通信的本质: 让不同的进程先看到同一份资源&#xff0c…

c#使用log4net的3种调用方法

https://blog.csdn.net/summer_top/article/details/107961245 第一步:下载log4net。 右键项目引用,进入管理NuGet包。 搜索log4net,下载安装。 第二步:创建LogHelper类。 public class LogHelper { private LogHelp…

部署PhotoMaker通过堆叠 ID 嵌入自定义逼真的人物照片

PhotoMaker只需要一张人脸照片就可以生成不同风格的人物照片,可以快速出图,无需额外的LoRA培训。 安装环境 python 3.10gitVisual Studio 2022 安装依赖库 git clone https://github.com/bmaltais/PhotoMaker.git cd PhotoMaker python -m venv venv…

C++_STL使用手册

STL基础 STL全称为 standard template library,中文可译为标准模板库或者泛型库,其包含有大量的模板类和模板函数,是 C 提供的一个基础模板的集合;STL由容器、算法、迭代器、函数对象、适配器、内存分配器这 6 部分构成,其中后面…

为什么这么多项目经理选择考取PMP证书?

PMP认证是目前国际上项目管理领域认可度和含金量最高的证书。通过PMP就证明你的项目管理水平达到了国际标准,有能力从事项目管理工作,普通人需要很多年才能积累悟出的职场做事逻辑,学一个PMP就搞定了。考证花的钱,持证后加薪分分钟…

传感器为智能化基础,L3车规落地打开激光雷达新空间(下)

3 L3车规落地打开激光雷达新空间,未来进一步迭代降本 3.1 技术落地,智能驾驶迈入L3关键节点 L3是区分辅助驾驶与智能驾驶的关键节点,L0-L2“人为主、车为辅”,L3之后“车为主、人为辅”。随着技术持续升级,智能驾驶…

洛谷 P2249 【深基13.例1】查找

思路:这是最典型和基础的二分查找题,因为符合单调性和有界性,如果直接暴力查找的话,会超时,只需要用一下二分即可 左边界为:0(因为编号最小为1) 右边界为:n1&#xff0…

LeetCode # 206. 反转链表

206. 反转链表 题目 给你单链表的头节点 head ,请你反转链表,并返回反转后的链表。 示例 1: 输入:head [1,2,3,4,5] 输出:[5,4,3,2,1] 示例 2: 输入:head [1,2] 输出:[2,1] 示例…

Java SpringBoot 获取 yml properties 自定义配置信息

Java SpringBoot 获取 yml properties 自定义配置信息 application.yml server:port: 9090servlet:context-path: /app第一种方法 HelloController package com.zhong.demo01.controller;import org.springframework.beans.factory.annotation.Value; import org.springfram…

qt5与qt6的cmake区别

文章目录 使用cmake构建qt项目,坑很多。一是本身就麻烦,二是,确实坑,因为不同的qtcreator版本,选了不同的kits(套件) 生成的CMakeList.txt文件也不一样。 如果可以的话都选择Qt6的相关选项&…

人工智能到深度学习:药物发现的机器智能方法(综述学习)

Artificial intelligence to deep learning: machine intelligence approach for drug discovery - PubMed (nih.gov) 人工神经网络、深度神经网络、支持向量机、分类和回归、生成对抗网络、符号学习和元学习是应用于药物设计和发现过程的算法的例子。人工智能已应用于药物设计…

【Spring】回顾反射机制

一、分析方法四要素 package org.qiu.reflect;/*** author 秋玄* version 1.0* email qiu_2022aliyun.com* project Spring* package org.qiu.reflect* date 2022-11-11-17:26* since 1.0*/ public class SomeService {public void doSome(){System.out.println("public …

森林监测VR虚拟情景再现系统更便利

AI人工智能技术已经逐渐渗透到各个领域,为我们的生活带来了诸多便利。在虚拟仿真教学领域,AI技术的应用也日益丰富,为虚拟情景交互体验带来了前所未有的好处。 提高VR虚拟情景的逼真度 通过深度学习和计算机视觉等技术,AI/VR虚拟现…

Vue3 + xterm + eventSource

xterm 是一个使用 typescript 编写的前端终端组件&#xff0c;可以在浏览器中实现一个命令行终端应用&#xff0c;通常与 websocket一起使用。 一、安装 pnpm install xterm or yarn add xterm or pnpm install xterm二、代码实现: 实现日志展示 <template><a-modal…

从 0 到 1 搭建亿级商品 ES 搜索引擎

建设并维护一个亿级的搜索引擎并非易事&#xff0c;也不存在一劳永逸的最优治理方法。本文是在实践中不断学习和总结的成果&#xff0c;介绍了如何搭建一个可支持从千万级到亿级商品量级的搜索系统&#xff0c;并实现查询总 QPS 从百级增长到千级&#xff0c;写入总 QPS 从百级…

androidapp的开发流程,王者笔记

昨天去面了一家公司&#xff0c;价值观有受到冲击。 面试官技术方面没的说&#xff0c;他可能是个完美主义的人&#xff0c;无论什么事情到了他那里好像都有解决的方案&#xff0c;我被说的无所适从&#xff0c;感觉他很厉害。 但我不能认可的是&#xff0c;面试官觉得加班是…