Kafka 为什么这么快 ?

Kafka为什么这么快,顺序写是怎么实现的? Kafka 是一个高性能的分布式消息系统,具备极快的读写速度,顺序写是其实现高性能的关键因素之一。下面详细阐述 Kafka 快的原因以及顺序写的实现方式。 阅读详情

那 Kafka 为什么这么快?如何做到这个高的性能?

本篇文章主要从这 3 个角度来分析:

  • 生产端
  • 服务端 Broker
  • 消费端

        在这里插入图片描述


先来看下生产端发送消息,Kafka 做了哪些优化?


                     (1)生产端 Producer

          在这里插入图片描述

先来回顾下 Producer 生产者发送消息的流程:

  1. 首先指定消息发送到哪个 Topic。
  2. 选择一个 Topic 的分区 partitiion,默认是轮询来负载均衡。

也可以指定一个分区 key,根据 key 的 hash 值来分发到指定的分区。

也可以自定义 partition 来实现分区策略。

  1. 找到这个分区的 leader partition。
  2. 与所在机器的 Broker 的 socket 建立通信。
  3. 发送 Kafka 自定义协议格式的请求(包含携带的消息、批量消息)。


在这里插入图片描述

将思绪集中在消息发送时候,可发现这两个华点:批量消息和自定义协议格式。

  1. 批量发送:减少了与服务端 Broker 处理请求的次数,从而提升总体的处理能力。

调用 send() 方法时,不会立刻把消息发送出去,而是缓存起来,选择恰当时机把缓存
里的消息划分成一批数据,按批次发送给服务端Broker。

  1. 自定义协议格式:序列化方式和压缩格式都能减少数据体积,从而节省网络资源消耗。

各种压缩算法对比:

  • 吞吐量方面:LZ4 > Snappy > zstd 和 GZIP
  • 压缩比方面:zstd > LZ4 > GZIP > Snappy

在这里插入图片描述




                     (2)服务端 Broker

Broker 的高性能主要从这 3 个方面体现:

  1. PageCache 缓存
  2. Kafka 的文件布局 以及 磁盘文件顺序写入
  3. 零拷贝 sendfile:加速消费流程

下面展开讲讲。

1)PageCache 加速消息读写

使用 PageCache 主要能带来如下好处:

  • 写入文件的时候:操作系统会先把数据写入到内存中的 PageCache,然后再一批一批地写到磁盘上,从而减少磁盘 IO 开销。
    在这里插入图片描述

  • 读取文件的时候:也是从 PageCache 中来读取数据。

如果消息刚刚写入到服务端就会被消费,按照 LRU 的“优先清除最近最少使用的页”这种策略,读取的时候,对于这种刚刚写入的
PageCache,命中的几率会非常高。

2)Kafka 的文件布局 以及 磁盘文件顺序写入

文件布局如下图所示:

在这里插入图片描述

主要特征是:文件的组织方式是“topic + 分区”,每一个 topic 可以创建多个分区,每一个分区包含单独的文件夹。

Kafka 在分区级别实现文件顺序写:即多个文件同时写入,更能发挥磁盘 IO 的性能。

  • 相对比 RocketMQ: RocketMQ 在消息写入时追求极致的顺序写,所有的消息不分主题一律顺序写入 commitlog 文件, topic 和 分区数量的增加不会影响写入顺序。
  • 弊端: Kafka 在消息写入时的 IO 性能,会随着 topic 、分区数量的增长先上升,后下降。
    所以使用 Kafka 时,要警惕 Topic 和 分区数量。

3)零拷贝 sendfile:加速消费流程

当不使用零拷贝技术读取数据时:

在这里插入图片描述

流程如下:

  1. 消费端 Consumer:向 Kafka Broker 请求拉取消息
  2. Kafka Broker 从 OS Cache 读取消息到 应用程序的内存空间:
a. 若 OS Cache 中有消息,则直接读取 
b. 若 OS Cache 中无消息,则从磁盘里读取
  1. 再通过网卡,socket 将数据发送给 消费端Consumer

当使用零拷贝技术读取数据:

在这里插入图片描述

Kafka 使用零拷贝技术可以把这个复制次数减少一次,直接从 PageCache 中把数据复制到 Socket 缓冲区中。

  • 这样不用将数据复制到用户内存空间。
  • DMA 控制器直接完成数据复制,不需要 CPU 参与,速度更快。




                     (3)消费端 Consumer

消费者只从 Leader分区批量拉取消息。

为了提高消费速度,多个消费者并行消费比不可少。Kafka 允许创建消费组(唯一标识 group.id),在同一个消费组的消费者共同消费数据。

举个栗子:

  • 有两个 Kafka Broker,即有 2个机子
  • 有一个主题:TOPICA,有 3 个分区(0, 1, 2)
    在这里插入图片描述

如上图,举例 4 中情况:

  1. group.id = 1,有一个消费者:这个消费者要处理所有数据,即 3 个分区的数据。
  2. group.id = 2,有两个消费者:consumer 1消费者需处理 2个分区的数据,consumer2 消费者需处理 1个分区的数据
  3. group.id = 3,有三个消费者:消费者数量与分区数量相等,刚好每个消费者处理一个分区
  4. group.id = 4,有四个消费者:消费者数量 > 分区数量,第四个消费者则会处于空闲状态
Seedance 2.5、HappyHorse 1.1与豆包Seed 2.1:一周内三大模型技术参数分析 音频生成延续原生音画同步架构,将文本、画面、音频统一序列建模,生成过程同步产出匹配口型的原声音频,支持中、英、日、韩、德、法、阿拉伯7种语言唇形对齐,无需二次调音。从行业趋势看,30秒直出、4K分辨率、7语种唇形同步正在成为视频生成的标配,编程Agent化和多模态理解正在成为语言模型的标配。技术狂奔的同时,监管在同步收紧。我理解这里的关键在于,视频生成模型的商业化落地不仅取决于生成质量,更取决于推理效率——生成一段15秒1080P视频需要多少秒、消耗多少算力,直接决定了模型的商用可行性。 阅读详情

相关推荐

绕开华为通道,获取解锁码解锁BootLoader

刷机有风险,操作需谨慎,如果因为各种因素导致手机变砖无法开机,本教程概不负责,望悉知 前言 这篇文章的大多内容是根据我自己找的一篇文章《绕开华为通道,获取解锁码解锁BootLoader》来编写的,里面的大部分内容是文章的原内容。下面的都是我参考文章中做了一些小部分的修改,增加了我华为P8手机的一些操作,下面开始讲述我的解锁过程。 因为华为官方在2018年的七八月份吧,关闭了解锁码的申请通道,这...

Martin.Mu `s Special Column 5万+

Kafka 为什么那么快?

那 为什么这么快?如何做到这个高的性能?本篇文章主要从这 3 个角度来分析: 先来看下生产端发送消息, 做了哪些优化? 先来回顾下 生产者发送消息的流程:将思绪集中在消息发送时候,可发现这两个华点:批量消息和自定义协议格式。批量发送:减少了与服务端 处理请求的次数,从而提升总体的处理能力。自定义协议格式:序列化方式和压缩格式都能减少数据体积,从而节省网络资源消耗。各种压缩算法对比: 的高性能主要从这 3 个方面体现:下面展开讲讲。1) 加速消息读写使用 主要能带来如下好处: 读取文件的时候:也是

m0_73088370的博客 472

CST Studio Suite安装详细教程(附安装包)CST Studio Suite 2024超详细安装教程

CST Studio Suite 2024安装指南摘要:本文详细介绍了CST Studio Suite 2024电磁仿真软件的下载与安装流程,包含23个图文步骤说明,从解压安装包到配置许可证服务器。重点提示了以管理员身份运行、自定义安装路径等关键步骤,并提供了常见问题解决方案和入门技巧。该软件适用于天线设计、PCB分析等高频电磁场仿真,安装后需通过localhost:27000连接许可证服务器完成激活。

pythonqiang9的博客 1万+

Kafka 为什么这么快?

Kafka 为什么这么快? 顺序读写、零拷贝、分区并发、批量、压缩、稀疏索引

杨宇昌的博客 775

mac(apple silicon)arm64安装spm12详细教程

3.下载matlab runtime R2023b for macOS (macA64),注意必须下载这个,只下载matlab是不可以的。默认安装目录是/Applications/MATLAB/MATLAB_Runtime/R2023b。注意最后的命令,路径根据自己的matlab_runtime安装位置进行调整,然后就可以安装成功了。5. 解压spm12.zip,解压后将文件夹拖到应用程序下(Applications)2.下载spm12,这个版本可兼容mac芯片!6.打开mac终端,输入。

weixin_62332001的博客 2020

芒果YOLOv8改进165:损失函数angleLoss:即插即用 | 独家首发原创新颖|公开数据集DOTA高效无损涨点0.5% | 旋转检测

YOLOv8改进:旋转检测Loss损失函数angleLoss:即插即用 | 独家首发原创新颖|公开数据集DOTA高效无损涨点0.5%

包括YOLOv5、YOLOv7、YOLOv8等模型改进 1148

kafka为什么那么快?

一、简介 Kafka是由Apache软件基金会开发的一个开源流处理平台,Kafka是一种高吞吐量的分布式发布订阅消息系统,它可以处理消费者在网站中的所有动作流数据。 Kafka的目的是通过Hadoop的并行加载机制来统一线上和离线的消息处理,也是为了通过集群来提供实时的消息。 Kafka对消息保存时根据Topic进行归类,发送消息者称为Producer,消息接受者称为Consumer,此外ka...

453

fatal: unable to access ‘https://github.com/xxx.git/‘ OpenSSL SSL_connect: SSL_ERROR_SYSCALL 解决方案

 本文主要介绍了fatal: unable to access ‘https://github.com/xxx.git/’: OpenSSL SSL_connect: SSL_ERROR_SYSCALL in connection to github.com:443解决方案,希望能对使用git的同学们有所帮助。 文章目录 1. 问题描述 2. 解决方案

weixin_43178406的博客 24万+

kafka为啥速度快

综上所述,Kafka 通过磁盘顺序读写、零拷贝技术、分区和多副本机制、批量处理以及高效的存储结构等多种技术手段,实现了高吞吐量和低延迟的数据传输,从而使其在处理大规模数据和高并发场景时具有出色的性能表现。三、分区和多副本机制。

weixin_39304656的博客 1175

ENVI无法打开Landsat8的头文件问题和解决

再次将txt文件拖入ENVI中,就会得到7个波段组合后的真彩色图像,而且辐射定标所需的参数信息都已经定义好了。按住CTRL+F,查找GROUP = LEVEL1_PROCESSING_RECORD。第一行GROUP = LANDSAT_METADATA_FILE。会查到两个包含的句子,把这两个中间的部分全部删掉。双击打开该xxx_MTL.txt的头文件。删除空行后,应该为如下图的样子。把LANDSAT改为L1。

所有专家都曾始于新手 9697

爬虫进阶必备:深入理解requests.Session(),提升爬虫效率与稳定性

前两天,有个朋友跟我吐槽,说自己写了个爬虫爬取某个电商网站的商品信息,刚开始跑得好好的,爬了大概几百页之后,突然就开始报错了。HTTP状态码一会儿429,一会儿403,最离谱的是有些页面明明登录了却显示未登录状态。他排查了半天也没找到原因,最后把代码发给我看。 我扫了一眼代码,发现一个典型问题:他每次请求都新建一个requests.Session(),甚至有些请求直接用了requests.get()。这就好比每次进超市都要重新注册会员,每次都重新跟服务器“握手”,不翻车才怪。 其实,这就是我们今天要聊的

2201_76125261的博客 1227

kafka是什么_Kafka 为什么能那么快的 6 个原因

无论 kafka 作为 MQ 也好,作为存储层也罢,无非就是两个功能(好简单的样子),一是 Producer 生产的数据存到 broker,二是 Consumer 从 broker 读取数据。那 Kafka 的快也就体现在读写两个方面了,下面我们就聊聊 Kafka 快的原因。1. 利用 Partition 实现并行处理我们都知道 Kafka 是一个 Pub-Sub 的消息系统,无论是发布...

weixin_39970823的博客 82

Playwright爬虫实战:破解动态网页懒加载与无限滚动

本文介绍了使用Playwright处理懒加载和无限滚动页面的完整解决方案。摘要如下: 问题分析:传统爬虫无法获取JS动态渲染内容,Playwright能模拟真实浏览器行为解决此类问题。 核心原理: 懒加载:资源延迟加载,滚动触发 无限滚动:滚动到底部异步加载新内容 技术方案: 分段滚动页面并等待加载 动态监测页面高度变化 合理设置等待和终止条件 代码实现: 提供图片懒加载和无限滚动列表的完整可运行代码 包含异常处理和性能优化建议 关键优势: 比传统爬虫更可靠 支持复杂交互场景 完善的错误处理机制 该方法已在

专注于Python爬虫开发,分享爬虫技巧、项目实战与反爬经验,使用Scrapy、BeautifulSoup等工具,解决数据抓取难题。 523

Kafka为什么比其他消息中间件快

无论 Kafka 作为 MQ 也好,还是作为存储层也罢,无非就是两个功能,一是 Producer 生产的数据存到 Broker,二是 Consumer 从 Broker 读取数据。那 Kafka 的快也就体现在读写两个方面了,下面我们就聊聊 Kafka 快的原因。

程序猿进阶 1477

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

Kafka为什么这么快?

点击上方蓝色“程序猿DD”,选择“设为星标”回复“资源”获取独家整理的学习资料!在过去的几年里,软件架构领域发生了巨大的变化。人们不再认为所有的系统都应...

程序猿DD 605

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

Kafka为什么这么快

前言: 无论 kafka 作为 MQ 也好,作为存储层也罢,无非就是两个功能(好简单的样子),一是 Producer 生产的数据存到 broker,二是 Consumer 从 broker 读取数据。那 Kafka 的快也就体现在读写两个方面了,下面我们就聊聊 Kafka 快的原因。 1. 利用 Partition 实现并行处理 我们都知道 Kafka 是一个 Pub-Sub 的消息系统,无论是发布还是订阅,都要指定 Topic。 Topic 只是一个逻辑的概念。每个 Topic 都包含一个或多个 Part

LBJ_小松鼠的博客 145

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

为什么Kafka那么快

为什么Kafka那么快 原创 2016-07-18 fireflyc 写程序的康德 网上有很多Kafka的测试文章,测试结果通常都是“吊打”其他MQ。感慨它的牛B之余我觉得必要仔细分析一下它如此快速的原因。这篇文章不同于其他介绍Kafka使用或者技术实现的文章,我会重点解释——为什么真快。(当然不是因为它用了Scala!!!!) 生产者(写入数据) 生产者(producer

joniers的博客 1万+

Kafka性能篇:为何Kafka这么“快“?

Kafka性能篇:为何Kafka这么"快"?

nikyae的博客 304

kafka为什么那么快

Kafka 为什么那么快 Broker 不同于 Redis 和 MemcacheQ 等内存消息队列,Kafka 的设计是把所有的 Message 都要写入速度低容 量大的硬盘,以此来换取更强的存储能力。实际上,Kafka 使用硬盘并没有带来过多的性能损失,“规规矩矩”的抄了一条“近道”。 首先,说“规规矩矩”是因为 Kafka 在磁盘上只做 Sequence I/O,由于消...

b_oyidyt的博客 1574

为什么 Kafka 如此之快?

【优快云编者按】:Kafka的设计者和维护者设计了一个非常优秀的、以性能为主的方案。不论是将工作量交个客户端,还是代理的日志式架构,甚至是批处理、压缩、零复制I/O和流式并行,Kafka...

优快云资讯 5182

Kafka为啥比RocketMQ快

- • RocketMQ 和 kafka 相比,在架构上做了减法,在功能上做了加法 - • 跟 kafka 的架构相比,RocketMQ 简化了协调节点和分区以及备份模型。同时增强了消息过滤、消息回溯和事务能力,加入了延迟队列,死信队列等新特性。 - • 凡事皆有代价,RocketMQ 牺牲了一部分性能,换取了比 kafka 更强大的功能特性。

qq_62097431的博客 1735

kafka为什么这么快?

Kafka 的高性能源于多项设计优化:1.顺序 I/O 替代随机 I/O,最大化磁盘吞吐。2.零拷贝 减少 CPU 和内存开销。3.分区分段 实现并行处理与快速定位。4.批量与压缩 降低网络和磁盘压力。5.分布式架构 支持水平扩展。这些技术共同作用,使 Kafka 成为处理海量实时数据的首选消息系统。

qq_39126115的博客 2133

KafKa为什么这么快?

在如今的MQ中三分天下性能之王的必然是Kafkka呢,为什么呢?最简单的就是kafka的单机吞吐量在百万级别以上。而RabbitMQ单机吞吐量在10万级别以下,而阿里开源的RocketMQ在二者之间十万到百万级别,那为什么kafka可以这么快呢,我总结了以下几点原因,如下图,我们可以从以下几个角度来分析分析。

Java小白的博客 致力分享每一天学到的知识 1700

Kafka为什么快

Kafka为什么快

959
上一篇: 【HashMap篇】JDK1.7多线程下resize()导致最终产生循环链表的原因
下一篇: CDN详细介绍
_Romeo
_Romeo 优质创作者: 后端开发技术领域 优质创作者: 后端开发技术领域
博客等级 码龄8年 2万+粉丝 104原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

_Romeo

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值