0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

大数据开发最火技术Kafka背后的“黑科技”

张康康 2019-10-22 17:53 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

Kafka是由Apache软件基金会开发的一个开源流处理平台,被广泛地应用在数据缓冲、异步通信、汇集日志、系统解耦等方面。相比较于其他常见消息系统,Kafka在保障了大部分功能特性的同时,还在高吞吐、低延迟等方面有很突出的表现。这篇文章不同于其他介绍Kafka使用或实现的文章,只是谈谈Kafka用了什么“黑科技”使他在性能方面有这么突出的表现。

  • 消息顺序写入磁盘

磁盘大多数都还是机械结构(SSD不在讨论的范围内),如果将消息以随机写的方式存入磁盘,就需要按柱面、磁头、扇区的方式寻址,寻址是一个“机械动作”也最耗时。为了提高读写硬盘的速度,Kafka就是使用顺序I/O

图 1 Kafka顺序IO

上图中,每个partition就是一个文件,每条消息都被append 到该 partition 中,属于顺序写磁盘,因此效率非常高。这种方法有一个缺陷—— 没有办法删除数据 ,所以Kafka是不会删除数据的,它会把所有的数据都保留下来,每个消费者(Consumer)对每个Topic都有一个offset用来表示读取到了第几条数据 。

关于磁盘顺序读写和随机读写的性能,引用一组Kafka官方给出的测试数据(Raid-5,7200rpm):

Sequence I/O: 600MB/s

Random I/O: 100KB/s

所以通过只做Sequence I/O,给Kafka带来了性能的极大提升。

  • Zero Copy

考虑一个web程序读取文件内容并传输到网络的场景,实现的核心代码如下:

图 2 普通read方法

虽然只是两个调用,但却经过了4次copy,其中有2次cpu copy,还有多次用户态与内核态的上下文切换,这会加重cpu的负担,而零拷贝就是为了解决这种低效。

# mmap:

减少拷贝次数的一种方法是调用mmap()来代替read()调用:

应用程序调用mmap(),磁盘上的数据会通过DMA被拷贝到内核缓冲区,接着操作系统会把这段内核缓冲区与应用程序共享,这样就不需要把内核缓冲区的内容往用户空间拷贝。应用程序再调用write(),操作系统直接将内核缓冲区的内容拷贝到socket缓冲区中,最后再把数据发到网卡去。

图 3 mmap方法

使用mmap可以减少一次cpu copy,但也会遇到一些陷阱,当你的程序map了一个文件,但是当这个文件被另一个进程截断(truncate)时, write系统调用会因为访问非法地址而被SIGBUS信号终止。通常可以通过,为SIGBUS信号建立信号处理程序或使用文件租凭(file leasing)的方式去解决,这里就不再赘述了。

# sendfile:

从2.1版内核开始,Linux引入了sendfile来简化操作

图 4 sendfile方法

sendfile() 方法引发 DMA 引擎将文件内容拷贝到一个读取缓冲区(DMA copy)然后由内核将数据拷贝到socket buffer(cpu copy)最后再拷贝到网卡(DMA copy)使用sendfile不仅减少了数据拷贝的次数,还减少了上下文切换,数据传送始终只发生在kernel space

聊到这里,sendfile至少还需要一次cpu copy,那么这一步能不能省去呢?为了消除内核完成的所有数据复制,我们需要一个支持收集(gather)操作的网络接口。同时,在内核版本2.4中,也修改了套接字缓冲区描述符以适应零拷贝要求。 这种方法不仅减少了多个上下文切换,还完全取消了cpu copy。

图 5 sendfile方法(DMA gather)

sendfile系统调用利用DMA引擎将文件内容拷贝到内核缓冲区去,然后将带有文件位置和长度信息的缓冲区描述符添加socket缓冲区去,这一步不会将内核中的数据拷贝到socket缓冲区中,DMA引擎会将内核缓冲区的数据拷贝到协议引擎中去,避免了最后一次CPU拷贝。

零拷贝技术非常普遍,JAVA的transferTo、transferFrom方法就是Zero Copy。


声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    M-狂野大数据5期|网盘无密Mp4+大数据直播课-狂野大数据

    大数据直播成为了提升数据生产力的关键技术之一。它通过实时数据流的采集、分析和呈现,极大地优化了决策效率,推动了创新的步伐。那么,未来大数据
    的头像 发表于 04-06 11:13 192次阅读

    工程师之夜系列分享第三十九篇:Kafka、RocketMQ、JMQ 存储架构深度对比

    开源,金融级特性突出)、JMQ(京东开源,侧重高可用与灵活性),从存储模型、数据组织、索引设计等维度展开深度对比,为技术选型与架构优化提供参考。​ 本文将从概念辨析出发,系统拆解主流存储模型与存储引擎的设计逻辑,对比 JMQ、Kafka
    的头像 发表于 01-13 16:19 285次阅读
    工程师之夜系列分享第三十九篇:<b class='flag-5'>Kafka</b>、RocketMQ、JMQ 存储架构深度对比

    大数据解决方案如何实施

    大数据解决方案实施的难点在于以下几点:  1.很少有优质可用的数据  在数聚股份看来,这几年数据交易机构如雨后春笋,“数据变现”成为很多拥有数据
    的头像 发表于 12-25 18:22 1145次阅读

    大数据平台运营的基础是什么

    ,值得每一位企业运营者思考。 本文提供大数据平台运营的三元素模型,旨在帮助企业管理层以全面的视角审视企业当前正在建设的大数据体系,真正地实现数据驱动。 1.    大数据平台的
    的头像 发表于 12-23 16:07 345次阅读

    揭秘施耐德电气中压开关背后科技

    关乎电力系统运行的安全与可靠。看似常规的操作背后,每一次可靠动作都绝非偶然——它不仅是现代工业制造实力的体现,也是前沿技术与百年电气技术经验深度融合的结晶。
    的头像 发表于 12-12 15:20 608次阅读

    AI时代大数据背后的网络力量-上海兆越100G核心工业交换机

    AI大数据与云计算的全球普及,让海量数据实时传输处理成为各行业数字化转型的核心挑战,工业通信网络面临巨大数据压力。工业交换机作为数据传输的核心载体,既能实现设备互联,又以高效稳定的网络
    的头像 发表于 11-18 17:33 2815次阅读
    AI时代<b class='flag-5'>大数据</b><b class='flag-5'>背后</b>的网络力量-上海兆越100G核心工业交换机

    充电桩背后藏着多少科技?国内的充电桩安全吗?

    随着新能源汽车驶入千家万户,为它们“补充能量”的充电桩已成为我们生活中常见的基础设施。这个看似简单的“大插座”背后,实则凝聚了多项前沿技术,而其安全性更是广大车主和社会关注的焦点。 一、 充电桩里
    的头像 发表于 11-04 13:46 1016次阅读

    湖北大数据集团到访维智科技参观交流

    近日,湖北大数据集团有限公司党委书记、董事长汪小波率队到访维智科技。双方围绕时空数据融合、公共数据授权运营及行业应用场景开发等议题展开深入探讨。
    的头像 发表于 11-03 10:02 758次阅读

    组态大数据平台是什么?有什么功能?

    组态大数据平台是融合 组态技术大数据处理能力 的综合性平台,通过图形化、可配置的方式实现数据采集、存储、分析、可视化及远程控制,适用于工业自动化、能源管理、楼宇监控等领域。其核心
    的头像 发表于 10-30 11:29 318次阅读
    组态<b class='flag-5'>大数据</b>平台是什么?有什么功能?

    微电子登陆2025深圳安博会——安防有我,共见芯

    全球规模最大、最具影响力的安防行业盛会——第二十届中国国际社会公共安全博览会(CPSE2025)于2025年10月28日-31日在深圳会展中心盛大启幕!大会聚焦AI传感、物联网、5G、大数据技术
    的头像 发表于 10-29 10:21 652次阅读
    芯<b class='flag-5'>火</b>微电子登陆2025深圳安博会——安防有我,共见芯<b class='flag-5'>火</b>

    御控工业物联网大数据解决方案:排水设备远程监控与大数据统计系统

    御控工业物联网推出排水设备远程监控与大数据统计系统,通过物联网、大数据、云计算等技术构建“感知-传输-分析-决策”闭环管理体系,助力排水行业数字化转型。
    的头像 发表于 09-12 10:04 795次阅读

    ‌Groq LPU 如何让万亿参数模型「飞」起来?揭秘 Kimi K2 40 倍提速背后科技

    Groq LPU 如何让万亿参数模型「飞」起来?揭秘 Kimi K2 40 倍提速背后科技‌ 最近,Moonshot AI 的千亿参数大模型 ‌Kimi K2‌ 在 ‌GroqCloud‌ 上
    的头像 发表于 08-07 10:01 1329次阅读

    揭秘Air8000对讲科技:AirTalk+MQTT开发示例深度解析

    的实时传输,带你深度理解这一科技背后技术奥秘。 Air8000 系列的 Airtalk 是基于 LuatOS 核心库的对讲方案,采用 MQTT 协议实现设备端、手机端、网页端的跨终端对讲,支持服务器
    的头像 发表于 08-06 17:16 963次阅读
    揭秘Air8000对讲<b class='flag-5'>黑</b>科技:AirTalk+MQTT<b class='flag-5'>开发</b>示例深度解析

    Kafka生产环境应用方案

    Apache Kafka作为分布式流处理平台,在现代大数据架构中扮演着消息中间件的核心角色。本文将从运维工程师的角度,详细介绍Kafka在生产环境中的部署方案、配置优化、监控运维等关键技术
    的头像 发表于 07-09 09:56 677次阅读

    Kafka工作流程及文件存储机制

    Kafka 中消息是以 topic 进行分类的,生产者生产消息,消费者消费消息,都是面向 topic 的。
    的头像 发表于 05-19 10:14 1059次阅读
    <b class='flag-5'>Kafka</b>工作流程及文件存储机制