kafka性能指南

news2025/1/13 2:55:12

kafka性能指南

1.绪论

首先是epoll模型,epoll使其在框架上得以使用mmp和回写高性能。

epoll模型具体可以看linuxIO那一个笔记,这里简单讲一下

首先是epoll模型,模型要求有一组fd由单独线程监控,然后app去干别的事,当fd有变动时,守护线程通知app来处理。这样可以使app持续工作,提高资源使用率。

mmp就是那个单独维护fd链表地址。是在内存中的一块区域,可以在此进行数据修改,到达条件后回写到硬盘。因为是cpu直接操纵内存,所以效率快很多。

同时在kafka产生的文件里,所有的logs等文件时stage类型。该类型文件在磁盘上是顺序读写的,读写速度接近内存。

2.读写部分

2.1顺序读写

因为随机存储需要很长的寻址时间,顺序读写则省去了寻址的时间。

在这里插入图片描述

每次新文件都是直接追加到原始文件后端。每个partition都是文件。

这样的弊端是没法删除文件,所以kafka没法删除文件,所有的信息都会保存下来。

每个消费者对每个topic都会有一个offset表示读到了第几条数据。

在这里插入图片描述

一般情况offset的信息会存储到zookeeper里

2.2 MemoryMappedFiles

这就是回写,一种设计模式,比如把硬盘的文件映射到内存。cpu直接操作内存,最后回写回硬盘。

mmap就是这个思想的具体实现之一。

mmap是一个特殊的内存空间,在内核层和用户层之间。用户层可以直接操作该空间,所有不涉及到普通切换空间涉及到的四次传递文件,以及大量的contexet转换。因为kafka可以直接操作该地址。

缺点是不可靠,因为在数据flush到硬盘之前,数据都是记载在内存上的。

kafka提供了producer.type来控制flush的时机。

sync是同步,数据写道mmap时立即flush然后通知producer

async时异步,数据写道mmap后不flush直接通知producer

2.3 partition

partition的定义及划分

一个topic会分为多个partition放在多个节点上。

通过源码可知,partition默认是随机把该消息发给一个partition

当然你也可以自定义发送给那个partition。

partiton在文件系统上是一个物理文件夹的形式。同时partition里有多个segment文件。

删除是就是删除segment文件。这样可以避免随机删除数据。

partition的优化

因为存在于多个节点,可以充分发挥集群优势。

如果就一个节点,多个分区也可以配置在一个磁盘上。实现磁盘间的并行。

一般精确到节点即可

3.零拷贝

sendfile技术。该参数在nginx 等web服务器中也有可以大幅提升文件传输性能。

一般传输文件是以下过程

调用read函数,文件数据被硬件层copy到内核缓冲区
read函数返回,文件数据从内核缓冲区copy到用户缓冲区
write函数调用,将文件数据从用户缓冲区copy到内核与socket相关的缓冲区。
数据从socket缓冲区copy到相关协议引擎。

以上细节是传统read/write方式进行网络文件传输的方式,我们可以看到,在这个过程当中,文件数据实际上是经过了四次copy操作:

硬盘—>内核buf—>用户buf—>socket相关缓冲区—>协议引擎

而sendfile系统调用则提供了一种减少以上多次copy,提升文件传输性能的方法。
在内核版本2.1中,引入了sendfile系统调用,以简化网络上和两个本地文件之间的数据传输。 sendfile的引入不仅减少了数据复制,还减少了上下文切换。

sendfile(socket, file, len);

运行流程如下:

sendfile系统调用,文件数据被copy至内核缓冲区
再从内核缓冲区copy至内核中socket相关的缓冲区
最后再socket相关的缓冲区copy到协议引擎

硬盘->内核->内核中scoket区->协议引擎

相较传统read/write方式,2.1版本内核引进的sendfile已经减少了内核缓冲区到user缓冲区,再由user缓冲区到socket相关缓冲区的文件copy,而在内核版本2.4之后,文件描述符结果被改变,sendfile实现了更简单的方式,再次减少了一次copy操作。

在apache,nginx,lighttpd等web服务器当中,都有一项sendfile相关的配置,使用sendfile可以大幅提升文件传输性能。

Kafka把所有的消息都存放在一个一个的文件中,当消费者需要数据的时候Kafka直接把文件发送给消费者,配合mmap作为文件读写方式,直接把它传给sendfile。

4.删除策略

因为kafka的特殊构造,导致其并不好删除数据。所以kafka提供了两种策略。

可以基于时间删除文件,也可以基于partition大小删除文件。

5.批量压缩

对于大量数据流来说,网络IO很重要,所以kafka提供了压缩策略。

但是一个一个压缩效率会很低,所以是批量压缩。kafka支持gzip和snappy等格式。

6.总结

可以理解为epol为程序设计框架,而零拷贝是具体的关于 fd队列读写中的设计,而mmap则是具体的执行,就是零拷贝是怎么实现的。零拷贝相对于普通的I/O中忽略的关于把数据从内核层拷贝至用户缓冲区的部分就是mmap实现。

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

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

相关文章

Arduino开发实例-MAX30100 脉搏血氧仪传感器驱动

MAX30100 脉搏血氧仪传感器驱动 1、MAX30100介绍 MAX30100 脉搏血氧仪和心率传感器是一款基于 I2C 的低功耗即插即用生物识别传感器。 MAX30100 是一款集成脉搏血氧饱和度和心率监测传感器解决方案。 它结合了两个 LED、一个光电探测器、优化的光学器件和低噪声模拟信号处理,…

【蓝桥杯Web】第十四届蓝桥杯(Web 应用开发)模拟赛 2 期 | 精品题解

🧑‍💼 个人简介:一个不甘平庸的平凡人🍬 🖥️ 蓝桥杯专栏:蓝桥杯题解/感悟 🖥️ TS知识总结:十万字TS知识点总结 👉 你的一键三连是我更新的最大动力❤️! &…

降本增效利器?Share Creators智能数字资产管理系统真香!

降本增效似乎是一个持续又永久的话题。尤其在今年, 显得格外的重要~ 疫情不知不觉已经伴随了我们三年,在各行各业都受到了疫情所带来巨大冲击的背景下,降本增效对很多企业来说不再是锦上添花,而可能是一条唯一的出路。 随着市场…

荧光素PEG活性酯,FITC-PEG-NHS,FITC-PEG-SCM,荧光素聚乙二醇琥珀酰亚胺乙酸酯

中文名称:荧光素聚乙二醇琥珀酰亚胺乙酸酯 英文名称:FITC-PEG-NHS,FITC-PEG-SCM 分子量: 1K,2K,3.4K,5K,10K(黄色、橙黄色或者橘黄色固体或者粉末) 端基取代率:≥90% 原料分散系数PDI:≤1.05 纯度:98%…

Vue简单示例——weex跨平台解决方案

简单介绍: Weex的出现主要解决了Web开发的应用频繁发布版本和多端研发两个问题,同时解决了前端语言性能差异和显示效果受限的问题。 什么是weex: Weex是使用流行的Web开发体验来开发高性能原生应用框架。使开发者可以用JS语言和前端开发经…

若依框架解读(微服务版)—— 3.验证码与登录

验证码 查看验证码的请求: 之前已经讲过http://localhost/dev-api/code会在前端重写为http://localhost:8080/code。 请求第一步会进入网关模块 网关相关知识:Gateway基于的WebFlux框架,与我们平时用的WebMVC是不太一样的。网关由Route&#…

PHP的Exception

# 简单解释 Exception是PHP的内置类,用来处理异常的基类 https://www.php.net/manual/zh/class.exception.php php class Exception implements Throwable { /** The error message */ protected $message; /** The error code */ protect…

MVC升级swagger No operations defined in spec!

不要嘲笑农民工种田怎么不香了,要反思为什么别人种田收入高。 以下是农民工即将转行挖野菜之前的种田心得。 1No operations defined in spec! 2Failed to load API definition. Failed to load API definition. 经过多次试验测试&#xff0…

光盘如何重装系统教程

​如果你想用光盘来重装自己的电脑系统,但是不知道怎么操作的话,下面让我们一起来看一下光盘重装系统的步骤吧。 工具/原料: 系统版本:win7 品牌型号:惠普 光盘重装系统: 1.首先我们需要先打开电脑上的光…

VUE 的生命周期

Vue 实例有一个完整的生命周期,也就是从创建之前→创建完成→挂载之前→挂载完成→更新渲染之前→渲染完成→销毁之前→销毁完成等一系列过程,我们称这是 Vue 的生命周期。通俗说就是 Vue 实例从创建到销毁的过程,就是生命周期。每一个组件或…

22.11.20补卡 javaSE多线程学习笔记

自用 并发编程 多个任务同时执行 并发原理: CPU分时间片交替执行, 宏观并行, 微观串行; 由OS调度 进程: OS中并发的一个任务 线程: 在一个进程中,并发的一个顺序执行流程 每当执行新的进程时, 之前的进程都会暂且暂停, 由于cpu的时间片非常短, 人感觉不出来 线程的三个要素: CP…

RemObjects SDK for Delphi

RemObjects SDK for Delphi RemObjects SDK for Delphi是一个高级远程处理框架,它允许您从局域网内或Internet上的客户端远程访问驻留在服务器上的对象。RemObjects SDK for Delphi将允许您构建客户端和服务器应用程序,使用高度优化的Smart Services实现…

Seata AT模式下的源码解析(三)

7. 网络请求 7.1 TransactionManager 事务管理器,在客户端主要用于发起事务请求、提交事务、回滚事务请求等,用于跟 TC 进行通信的类,其中获取当前接口的实现类是通过 TransactionManagerHolder 进行获取,然后通过 SPI 接口获取…

【没用的小知识又增加了--电机】

一些乱七八糟的笔记.. 怎么计算电流环带宽 https://www.csdn.net/tags/MtTaMgysMTgwMTQwLWJsb2cO0O0O.html 理解电机控制系统中的带宽问题 - 知乎 电机控制电路程序带宽和硬件带宽的关系,应该如何设计相关参数? - 知乎 怎么理解Clarke和park变换&am…

[附源码]java毕业设计西柚网购物系统

项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: SSM mybatis Maven Vue 等等组成,B/S模式 M…

论文阅读【5】Attention Is All You Need

1.概述 1.1 论文相关 题目:注意你所有需要的(Attention Is All You Need)发表时间:2017出版:NIPS原文地址:经典模型了,网上一搜就能搜索到代码: 1.2 动机 因为循环神经网络通常是…

Poison Ink: Robust and Invisible Backdoor Attack 论文笔记

1. 论文信息 论文名称Poison Ink: Robust and Invisible Backdoor Attack作者Jie Zhang(中国科学技术大学)会议/出版社IEEE Transactions on Image Processingpdf📄在线pdf 2. introduction 文章提出了一种新的攻击方式称为“Poison Ink”…

CRF条件随机场

文章目录定义转移概率 & 发射概率损失函数单条路径的求解viterbi解码贪婪算法维特比算法参考解读定义 CRF:condition random field 解决序列预测问题。比如TTS的前端分词,实体命名识别等。 转移概率 & 发射概率 发射分数:将输入预测…

PPT 最后一页写什么结束语既得体又能瞬间提升格调?

谢邀!我只分享一个现下最流行的方法,绝对让尾页逼格满满!罗永浩雷军都在用的「金句法」。 提到这份方法,你可能会觉得很陌生,但你一定见过这样的页面: 这样的页面还有很多,多是以一句话收尾&…

LeetCode刷题(python版)——Topic81. 搜索旋转排序数组 II

一、题设 已知存在一个按非降序排列的整数数组 nums &#xff0c;数组中的值不必互不相同。 在传递给函数之前&#xff0c;nums 在预先未知的某个下标 k&#xff08;0 < k < nums.length&#xff09;上进行了 旋转 &#xff0c;使数组变为 [nums[k], nums[k1], ..., nu…