kafka高性能的底层原理分析

news2024/11/20 21:28:27

目录

1.磁盘顺序写

2.零拷贝

3.数据压缩

4.消息批量处理

5.pageCache

6.稀疏索引

总结


Kafka是一种高吞吐量的分布式发布订阅消息系统,它可以处理消费者在网站中的所有动作流数据。那么他是如何做到高性能的呢,本篇文章从宏观上分析一下,具体细节后续文章会持续更新,欢迎大家捧场阅读,希望能对你有所帮助。

1.磁盘顺序写

我们都知道,磁盘的随机IO非常慢, 7200rpm SATA RAID-5 顺序写速度可达 600MB/sec ,但是随机写速率 100k/sec,相差6000倍,kafka消息写入采用了顺序写。

2.零拷贝

传统的数据传输,需要经历用户态和内核态的4次切换,4次数据copy,如图

        零拷贝,带有 DMA 收集拷贝功能的 sendfile 实现的 I/O使用了2次用户空间与内核空间的上下文切换,2次数据的拷贝,而且这2次的数据拷贝都是非CPU拷贝,这样就实现了最理想的零拷贝I/O传输了,不需要任何一次的CPU拷贝即数据直接从内核缓冲区 copy 到网卡。如下图

3.数据压缩

     支持压缩算法,如Gzip,Snappy,Lz4,Zstd。

     压缩流程:Producer 压缩,broker 保持,consumer解压缩

4.消息批量处理

     producer发送消息给broker,消息在producer端等待达到batch.size (默认值16k)时,才会发       送至broker端,减少网络IO,提升效率 

5.pageCache

        数据写入和读取时,调用了linux底层的sendfile机制,pageCache 页缓存通常是4k,用于提            高文件的读写效率的缓存页。

6.稀疏索引

        日志文件类型:.log文件,index.log,timeIndex.log

        索引文件目的是在高效查找分区内的位置,通过二分查找算法实现

总结

        以上是从整体上总结了kafka支持高性能的6点原因,我们先从宏观上有个清晰的认知

具体每个原因的具体内部技术细节,后期会慢慢给大家分析

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

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

相关文章

论文阅读——Design of Environmental backscatter tag antenna for 5G Internet of things

文章目录 摘要一、背景二、系统模型三、天线设计A. 指标B. 天线结构描述C. 天线结构优化D. 天线结构确定 四、仿真结果总结 论文来源:https://ieeexplore.ieee.org/document/9379395 摘要 文章针对传统设备识别在电力物联网场景中存在的可靠性低和读取距离不足的问…

2024年陕西省职业院校技能大赛高职信息安全管理与评估样题

2024年陕西省职业院校技能大赛高职信息安全管理与评估样题 模块一竞赛项目试题 根据信息安全管理与评估技术文件要求,模块一为网络平台搭建与网络安全防护。本文件为信息安全管理与评估项目竞赛-模块一试题。 模块一 平台搭建与安全设备防护 竞赛任务 网络平台搭建…

[网鼎杯 2020 朱雀组]Nmap(详细解读版)

这道题考察nmap的一些用法,以及escapeshellarg和escapeshellcmd两个函数的绕过,可以看这里PHP escapeshellarg()escapeshellcmd() 之殇 (seebug.org) 两种解题方法: 第一种通过nmap的-iL参数读取扫描一个文件到指定文件中第二种是利用nmap的参数写入we…

CAN总线的错误检测机制

文章目录 错误类型1、位错误-Bit Check Error2、填充错误-Stuff Error3、格式错误-Form Error4、ACK错误-ACK Error 和 CRC错误-CRC Error5、错误示例 错误处理1、主动错误 - error active2、被动错误 - error passive3、总线关闭 - bus off4、错误计数值的变动条件 参考 错误类…

信创终端操作系统上vmware的命令行操作

原文链接:信创终端操作系统上vmware的命令行操作 Hello,大家好啊!今天给大家带来一篇关于在信创终端操作系统上使用命令行操作VMware的文章。通过命令行管理VMware虚拟机可以提高效率,特别是在需要批量操作或自动化管理时。本文将…

【PyCharm】PyCharm 2024.1 的最新变化-代码导航与重构

目录 代码导航与重构 改进的代码导航功能 高级重构工具 代码导航与重构 改进的代码导航功能 符号搜索和文件搜索增强:改进后的符号搜索功能能够更快速地定位到特定的类、函数、变量等,而增强的文件搜索则让用户能够轻松找到所需的文件或目录。现在&a…

【IJER】: 二苄基甲苯加氢及不同 Pt 负载量的 Pt/Al对全氢二苄基甲苯制氢的催化性能

摘要: 研究了二苄基甲苯加氢和全氢二苄基甲苯(H18-DBT)脱氢的特性。氢化实验使用Raney-Ni进行。结果表明,170℃、7MPa是最佳反应条件,在30小时内氢气容量达到6.2wt%。 H18-DBT 脱氢的最佳温度为 290C。此外,在不同Pt金属负载量&am…

【Redis系列】RedisTemplate的使用与注意事项

目录 一.什么是RedisTemplate 二.如何使用RedisTemplate RedisTemplate的API 序列化 三.StringRedisTemplate 一.什么是RedisTemplate RedisTemplate 是一个工具类,由 Spring 官方提供的方便操作 Redis 数据库的一个工具类,来源于 org.springframe…

day3 测试基础知识

1. 你认为性能测试的目的是什么?做好性能测试的工作的关键是什么? 性能测试工作的目的是检查系统是否满足在需求说明书中规定的性能,性能测试常常需要和强度测试结合起来,并常常要求同时进行软件和硬件的检测。 性能测试主要的关…

写在礼拜天

这两天巴黎奥运会,办的如火如荼,各个国家都有拿到金牌的人…… 前几天,俞敏洪正式发文,说董宇辉从东方甄选离职,明确已经出来单干…… 前段时间的高考成绩已经揭晓,有人金榜题名,有人名落孙山…

Spring Boot配置文件的语法规则

主要介绍两种配置文件的语法和格式,properties和yml 目录 1.配置文件的作用 2.创建配置文件 3.properties语法 4.yml语法 5.配置文件格式 1.配置文件的作用 对于配置文件,也有独立的文件夹去存放,主要用来存放一些需要经过变动的数据&a…

质数差列 信友队

题目描述 驰骋宇宙的鱼大大找到了一个古遗迹,稍作研究后发现这是一个来着远古的质数星球文明遗迹,这个文明的特点是所有事物都和质数息息相关。于是,鱼大大赶紧列出了一堆的质数,以方便自己的研究。 这天鱼大大找到了质数星球文明…

ubuntu安装docker和docker-compose

安装软件包 sudo apt install apt-transport-https ca-certificates software-properties-common 将 Docker 的 APT 源添加到系统中 echo "deb https://mirrors.aliyun.com/docker-ce/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/…

<Python><paddle>基于python使用百度paddleocr实现车牌识别

前言 paddleocr是百度飞桨的一个文字识别库,准确度非常高,基于其文字识别的基础,将其用于车牌识别。这个识别的准确度是相当高的。 环境配置 系统:windows 平台:visual studio code 语言:python 库&#…

FreeModbus学习——eMBInit初始化

FreeModbus版本:1.6 在mb.c文件中 先看一下静态变量的定义 /* ----------------------- Static variables ---------------------------------*/static UCHAR ucMBAddress; static eMBMode eMBCurrentMode;ucMBAddress是从机地址,eMBCurrentMode是M…

简易版:在 SpringBoot 中设计一个订单号生成系统

​ 博客主页: 南来_北往 系列专栏:Spring Boot实战 引言 要在SpringBoot中设计一个订单号生成系统,你可以按照以下步骤进行: 创建一个SpringBoot项目,添加必要的依赖,如spring-boot-starter-web。 创建一个订单…

前端了解到框架-网络复习

前端 HTML 超文本标记语言 画页面 各种各样的标签组成页面进行展示 桌面创建文本修改后缀即可 <!DOCTYPE html>: 声明文档类型和HTML版本。<html>: 根标签&#xff0c;所有其他标签都包含在内。<head>: 包含了文档的元数据&#xff0c;如字符编码、网页标…

Mac系统中用brew安装MongoDB【详细教程】

文章目录 概述一、安装步骤1.下载适用于 MongoDB 的官方 Homebrew 公式和数据库工具,方法是在 macOS 终端运行以下命令:2.更新 Homebrew3.安装 MongoDB二、使用步骤1.查看版本2.启动服务3.停止服务4.连接测试三、可视化工具1.MongoDB Compass2.使用概述 使用本教程在 macOS …

heic怎么转换成jpg?heic转jpg,分享6款图片格式转换器免费汇总!

众所周知&#xff0c;在与非苹果手机设备用户&#xff08;如安卓手机或Windows台式机用户&#xff09;分享照片之前&#xff0c;通常需要将iphone的heic格式转换为jpg。由于这些操作系统的旧版本不原生支持heic图片格式&#xff0c;因此需要额外的第三方工具来查看这些图像。因…

1.Linux_基础

文件结构 Linux的文件结构是一个倒的树状图&#xff0c;具体结构如下&#xff1a; bin&#xff1a;存放二进制文件 boot&#xff1a;存放系统启动文件 dev&#xff1a;存放设备文件 etc&#xff1a;存放系统管理时要用到的各种配置文件和子目录 lib&#xff1a;存放系统动…