Why is Kafka fast?(Kafka性能基石)

Kafka概述

在这里插入图片描述


Why is kafka fast?

思考一下,当我们在讨论Kafka快的时候我们是在谈论什么呢?What does it even mean that Kafka is fast?

我们是在谈论kafka的低延迟(low latency)还是在讨论吞吐量(throughput)呢?

It is fast compared to what?

在这里插入图片描述


kafka is optimized for high throughput. lt is designed to move a large number of records in a short amount of time.

Kafka针对高吞吐量进行了优化。它的设计目的是在短时间内移动大量的记录。

Think of it as a very large pipe moving liquid.把Kafka想象成一个非常大的管道移动液体。

在这里插入图片描述

The bigger the diameter of the pipe, the largerthe volume of liquid that can move through it.

管道的直径越大,流经管道的液体体积就越大。

在这里插入图片描述

So when someone says Kafka is fast, they usually refer to Kafka’s ability to move a lot of data.

所以人们谈论Kafka很快的时候,他们通常指的是Kafka移动大量数据的能力。
在这里插入图片描述

What are some of the design decisions that help Kafka move a lot of data quickly?

那么Kafka哪些设计决策与设计细节可以实现快速移动大量数据呢?

There are many design decisions that contributed to Kafka’s performance.这里我们只关注两种最重要的设计。在这里插入图片描述

1.Sequential I/O

The first one is Kafka’s reliance on sequential l/0.首先是Kafka对顺序l/0的依赖。

在这里插入图片描述

什么是sequential I/O呢?

这里我们有一个常见的误区,我们常常认为磁盘访问比内存访问慢,但是其实这在很大程度上取决于数据访问模式(access pattern)。

There are two types of disk access patterns —random and sequential.

在这里插入图片描述

For hard drives it takes time to physically move the arm to different locations on the magnetic disks.This is what makes random access slow.

对于硬盘驱动器,它需要时间来物理移动磁头臂到磁盘上的不同位置。这就是随机访问缓慢的原因。

For sequential access, though, since your arm doesn’t need to jump around, it is much faster to read and write blocks of data oneafter the other.

对于顺序访问,由于磁头臂不需要跳转,因此依次读取和写入数据块的速度要快得多。
在这里插入图片描述

Kafka takes advantage of this by using an append-only log as its primary data structure.

Kafka使用仅追加日志作为其主要数据结构,即实现了顺序I/O模式。

An append-only log adds new data to the end of the file.This access pattern is sequential.

仅追加日志将新数据添加到文件的末尾,这种访问模式是顺序的。
在这里插入图片描述

On modern hardware with an array of these hard disks, sequential writes reach hundreds of megabytes per second, while random writes aremeasured in hundreds of kilobyte per second.

在拥有这些硬盘阵列的现代硬件上,顺序写入达到每秒数百Mb字节,而随机写入只能达到每秒数百Kb字节。
在这里插入图片描述

Sequential access is several order of magnitude faster. 顺序访问速度快几个数量级。


Using hard disks has its cost advantage, too. 使用硬盘也有其成本优势。

在这里插入图片描述
与SSD相比,硬盘的价格只有它的三分之一,但容量却是它的三倍。

Giving Kafka a large pool of cheap disk space without any performance penalty means that Kafka can cost effectively retain messages for a long period of time,a feature that was uncommon to messaging systems before Kafka.

为Kafka提供大量廉价的磁盘空间而没有任何性能损失,这意味着Kafka可以有效地长时间保留消息。

而这一点在Kafka之前的消息系统中,并不常见。

在这里插入图片描述


2.Zero copy principle

The second design choice that gives Kafka its performance advantage is its focus on efficiency.

Kafka moves a lot of data from network to disk, and from disk to network.

Kafka将大量数据从网络移动到磁盘,再从磁盘移动到网络。

It is critically important to eliminate excess copy when moving pages and pages of data between the disk and the network.

在磁盘和网络之间移动一页又一页的数据时,消除多余的拷贝是非常重要的。

在这里插入图片描述

这就是零复制原理发挥作用的地方。This is where zero copy principle comes into the picture.

现代unix操作系统经过高度优化,可以将数据从磁盘传输到网络,而不会过度复制数据。
Modern unix operating systems are highly optimized to transfer data from disk to network without copying data excessively.

首先,我们看一下Kafka是如何在零拷贝根本不使用的情况下将磁盘上的一页数据发送给消费者的。

在这里插入图片描述

  • 1.数据从磁盘加载到操作系统缓存。
    First the data is loaded from disk to the OS cache.

  • 2.数据从操作系统缓存复制到Kafka应用程序。
    Second the data is copied from the OS cache into the Kafka application.

在这里插入图片描述

  • 3.数据从Kafka复制到套接字缓冲区。Third the data is copied from Kafka to the socket buffer.

  • 4 将数据从套接字缓冲区复制到网络接口卡缓冲区。
    And fourth the data is copied from the socket buffer to the network interface card buffer.

  • 5.最后数据通过网络发送给消费者。And finally, the data is sent over the network to the consumer.

Now this is clearly inefficient. There are four copies and two system calls. 这显然是低效的。有四个副本和两个系统调用。


现在我们再来看一下使用零拷贝的Kafka。

在这里插入图片描述

第一步是一样的。数据页面从磁盘加载到操作系统缓存。

零拷贝时,Kafka应用程序使用一个名为sendfile()的系统调用来告诉操作系统直接将数据从操作系统缓存复制到网络接口卡缓冲区。
With zero copy, the Kafka application uses a system call called sendfile() to tell the operating system to directly copy the data from the OS cache to the network interface card buffer.

在这个优化的路径中,唯一的拷贝是从操作系统缓存到网卡缓冲区的。

With a modern network card, this copying is done with DMA.对于现代网卡,这种复制是通过DMA完成的。

在这里插入图片描述
DMA stands for direct memory access. When DMA is used the cpu is not involved, making it even more efficient.
DMA表示直接内存访问。当使用DMA时,不涉及cpu,使其更加高效。


To recap, sequential I/O and zero copy principle are the cornerstone to Kafka’s high performance.

顺序I/O和零拷贝原则是Kafka高性能的基石。

Kafka uses other techniques to squeeze every ounce of performance out of modern hardware, but
these two are the most important in our view.

Kafka使用其他技术从现代硬件中挤出每一丝性能,而在我们看来,顺序I/O、零拷贝原则这两个是最重要的。


Learned it from youtuber:ByteByteGo.

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

快速了解GPT-4o和GPT-4区别

GPT-4o简介 在5月14日的OpenAI举行春季发布会上,OpenAI在活动中发布了新旗舰模型“GPT-4o”!据OpenAI首席技术官穆里穆拉蒂(Muri Murati)介绍,GPT-4o在继承GPT-4强大智能的同时,进一步提升了文本、图像及语…

C语言 | Leetcode C语言题解之第204题计数质数

题目&#xff1a; 题解&#xff1a; int countPrimes(int n) {if (n < 2) {return 0;}int isPrime[n];int primes[n], primesSize 0;memset(isPrime, 0, sizeof(isPrime));for (int i 2; i < n; i) {if (!isPrime[i]) {primes[primesSize] i;}for (int j 0; j < …

TCP单进程循环服务器程序与单进程客户端程序

实验目的 理解并掌握以下内容: 网络进程标识(即套接字地址)在Linux中的数据结构与地址转换函数。网络字节序与主机字节序的定义、转换以及相关函数在网络编程中的应用。数据结构内存对齐的基本规则,以及基于数据结构构建PDU的基本方法。TCP单进程循环服务器与单进程客户端的…

动手学深度学习(Pytorch版)代码实践 -计算机视觉-44目标检测算法综述:R-CNN、SSD和YOLO

41~44目标检测算法综述&#xff1a;R-CNN、SSD和YOLO 1. 区域卷积神经网络 (R-CNN 系列) 1.1 R-CNN 使用启发式搜索算法来选择锚框。使用预训练模型对每个锚框提取特征&#xff08;每个锚框视为一张图片&#xff0c;使用 CNN 提取特征&#xff09;。训练 SVM 进行类别分类&a…

ONLYOFFICE 8.1 版本桌面编辑器测评

在现代办公环境中&#xff0c;办公软件的重要性不言而喻。从文档处理到电子表格分析&#xff0c;再到演示文稿制作&#xff0c;强大且高效的办公软件工具能够极大提升工作效率。ONLYOFFICE 作为一个功能全面且开源的办公软件套件&#xff0c;一直以来都受到广大用户的关注与喜爱…

[物联网专题] - 螺钉式接线端子的选择和辨识

工业设备上大量使用各式各样的端子来连接外部设备和电缆电线&#xff0c;其中用得最多的就是标准的螺钉式端子&#xff0c;其外形如下&#xff1a; 标准端子一般是2位&#xff08;2个接线端子&#xff09;&#xff0c;端子与端子之间可以级联&#xff0c;组成任意数量的位数。…

SpringCloudAlibaba基础四 微服务调用组件OpenFeign

JAVA 项目中如何实现接口调用&#xff1f; 1&#xff09;Httpclient HttpClient 是 Apache Jakarta Common 下的子项目&#xff0c;用来提供高效的、最新的、功能丰富的支持 Http 协议的客户端编程工具包&#xff0c;并且它支持 HTTP 协议最新版本和建议。HttpClient 相比传统 …

Databend db-archiver 数据归档压测报告

Databend db-archiver 数据归档压测报告 背景准备工作Create target databend table启动 small warehouse准备北京区阿里云 ECSdb-archiver 的配置文件准备一亿条源表数据开始压测 背景 本次压测目标为使用 db-archiver 从 MySQL 归档数据到 Databend Cloud&#xff0c; 归档的…

2006年下半年软件设计师【上午题】试题及答案

文章目录 2006年下半年软件设计师上午题--试题2006年下半年软件设计师上午题--答案2006年下半年软件设计师上午题–试题

idea 项目互联网转内网开发 依赖报错问题 maven问题

场景&#xff1a; 这个问题困扰好久&#xff0c;通过分析后&#xff0c;发现是maven配置问题&#xff0c;废话不多说&#xff0c;上干活。 问题描述 项目互联网从转内网开发&#xff0c;提前下载好repository&#xff0c;跟项目一起导入内网&#xff0c;导入后&#xff0c;发…

昇思25天学习打卡营第10天|FCN图像语义分割

一、简介&#xff1a; 本篇博客是昇思大模型打卡营应用实践部分的第一次分享&#xff0c;主题是计算机视觉&#xff08;CV&#xff09;领域的FCN图像语义分割&#xff0c;接下来几天还会陆续分享其他CV领域的知识&#xff08;doge&#xff09;。 全卷积网络&#xff08;Fully…

linux-内存映射MMAP-lseek-dup-fifo-通信-IO多路复用

1、内存映射MMap&#xff1a; DMA&#xff1a; 可以用*/[]取代read和write&#xff1b; 限制&#xff1a; 1、文件大小固定不能改变&#xff1b;&#xff08;ftruncate&#xff09; 2、只能是磁盘文件&#xff1b; 3、建立映射之前先open mmap函数&#xff1a; mmap第一个…

SpringMVC启动流程

文章目录 引文HandlerHandlerMapperHandlerAdapterRequestMapping方法参数解析RequestMapping方法返回值解析文件上传流程拦截器解析 SpringMVC启动流程如下 引文 我们在使用SpringMVC时&#xff0c;传统的方式是在webapp目录下定义一个web.xml文件&#xff0c;比如&#xff1a…

npm安装依赖报错——npm ERR gyp verb cli的解决方法

1. 问题描述 1.1 npm安装依赖报错——npm ERR! gyp verb cli npm MARN deprecated axiosQ0.18.1: critical security vuLnerability fixed in v0.21.1. For more information, npm WARN deprecated svg001.3.2: This SVGO version is no Longer supported. upgrade to v2.x.x …

秋招突击——第七弹——Redis快速入门

文章目录 引言Redis是什么 正文对象String字符串面试重点 List面试考点 压缩列表ZipList面试题 Set面试题讲解 Hash面试重点 HASHTABLE底层面试考点 跳表面试重点 ZSET有序链表面试重点 总结 引言 在项目和redis之间&#xff0c;我犹豫了一下&#xff0c;觉得还是了解学习一下…

大数据信用报告查询应该选什么样的平台?

随着大数据技术的不断发展&#xff0c;大数据信用报告查询平台也应运而生。这些平台通过数据挖掘和分析&#xff0c;为个人提供有关大数据信用的详细报告&#xff0c;帮助他们在做出决策时获得更多的信息。然而&#xff0c;面对众多的大数据信用报告查询平台&#xff0c;如何选…

使用Apache POI库在Java中导出Excel文件的详细步骤

使用Apache POI库在Java中导出Excel文件的详细步骤 学习总结 1、掌握 JAVA入门到进阶知识(持续写作中……&#xff09; 2、学会Oracle数据库入门到入土用法(创作中……&#xff09; 3、手把手教你开发炫酷的vbs脚本制作(完善中……&#xff09; 4、牛逼哄哄的 IDEA编程利器技…

240628_昇思学习打卡-Day10-SSD目标检测

240628_昇思学习打卡-Day10-SSD目标检测 今天我们来看SSD&#xff08;Single Shot MultiBox Detector&#xff09;算法&#xff0c;SSD是发布于2016年的一种目标检测算法&#xff0c;使用的是one-stage目标检测网络&#xff0c;意思就是说它只需要一步&#xff0c;就能把目标检…

hive调优原理详解:案例解析参数配置(第17天)

系列文章目录 一、Hive常问面试函数&#xff08;掌握&#xff09; 二、Hive调优如何配置&#xff08;重点&#xff09; 文章目录 系列文章目录前言一、Hive函数&#xff08;掌握&#xff09;11、JSON数据处理12、炸裂函数13、高频面试题13.1 行转列13.2 列转行 14、开窗函数&a…

免交互和嵌入执行模式

目录 概念 语法格式 统计行数 赋值变量 修改密码​编辑往文件里添加内容 ​编辑​编辑引入变量 整体赋值​编辑 加引号不赋值变量 expect实现免交互 免交互设置密码 免交互切换用户 嵌入执行模式 添加用户并免交互设置密码 免交互登录 传参实现ssh 练习 概念 …