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。


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

    评论

    相关推荐

    超详细“零”基础kafka入门篇

    ,类似于消息队列或企业消息传递系统。 以 容错的持久方式存储记录流 。 记录发生时处理流。 (2)Kafka通常用于两大类应用: 构建可在 系统或应用程序之间 可靠获取数据的实时流数据管道 构建转换或
    的头像 发表于 12-18 09:50 149次阅读
    超详细“零”基础<b class='flag-5'>kafka</b>入门篇

    智慧城市与大数据的关系

    智慧城市与大数据之间存在着密切的关系,这种关系体现在大数据对智慧城市建设的支撑和推动作用,以及智慧城市产生的大量数据大数据技术的应用需求。
    的头像 发表于 10-24 15:27 619次阅读

    Kafka高性能背后技术原理

    Kafka 是一款性能非常优秀的消息队列,每秒处理的消息体量可以达到千万级别。
    的头像 发表于 10-23 09:37 315次阅读
    <b class='flag-5'>Kafka</b>高性能<b class='flag-5'>背后</b>的<b class='flag-5'>技术</b>原理

    基于Kepware的Hadoop大数据应用构建-提升数据价值利用效能

    处理超大数据集。 Hadoop的生态系统非常丰富,包括许多相关工具和技术,如Hive、Pig、HBase等,这些工具可以方便地构建复杂的大数据应用。Hadoop广泛应用于各种场景,包括数据
    的头像 发表于 10-08 15:12 149次阅读
    基于Kepware的Hadoop<b class='flag-5'>大数据</b>应用构建-提升<b class='flag-5'>数据</b>价值利用效能

    迅为RK3588开发板!神话悟空,启动?

    之后,就引起了全球范围内的广泛关注和热议。 那能否在iTOP-RK3588开发板上畅玩《神话 悟空》呢?请看VCR: https://www.bilibili.com/video
    发表于 09-23 10:48

    神话:悟空》背后的数字化中国——天创信用守卫数据安全

    国产单机游戏《神话:悟空》遍全球之后,游戏中的“数字孪生”古建受到了强烈的关注,为取景地最多的山西带来了不菲流量,相关文旅部门纷纷计划借势开展文旅活动、打造数字文旅精品。这种现象反映了中国社会
    的头像 发表于 09-06 16:52 253次阅读
    《<b class='flag-5'>黑</b>神话:悟空》<b class='flag-5'>背后</b>的数字化中国——天创信用守卫<b class='flag-5'>数据</b>安全

    独家探秘!Datasheet5背后大数据机制

    现在市面上林林总总、各式各样的数据手册网站,国内的,国外的,并不少,也都号称运用大数据智能匹配和运算,为工程师提供数据手册查询、器件参数,应用等等等等。
    的头像 发表于 08-26 17:24 339次阅读
    独家探秘!Datasheet5<b class='flag-5'>背后</b>的<b class='flag-5'>大数据</b>机制

    语言RPA中有哪些优势,可以提高开发效率?

    语言RPA提供了多种资源和工具来帮助用户提高开发效率,以下是一些值得关注的点: 1、跨平台兼容:语言支持在Win, Mac, Linux上三端跨平台运行,一个脚本规则适配所有系统。 2、发布本地
    的头像 发表于 08-07 13:40 321次阅读

    大数据采集系统分为几类

    和应用场景. 1. 概述 大数据采集系统是实现数据收集、处理和存储的关键环节。随着大数据技术的快速发展,大数据采集系统也在不断演进和创新。本
    的头像 发表于 07-01 15:44 1488次阅读

    大数据在军事方面的应用有哪些

    大数据技术为战争决策提供了全新的思路和工具。军事机关指挥系统通过搜集和分析大量的战场数据,可以建立复杂的决策模型,快速分析敌我态势,评估作战可行性,并推荐最优的战术方案。 利用大数据
    的头像 发表于 06-23 10:34 999次阅读

    面试官:Kafka会丢消息吗?

    许多开发人员普遍认为,Kafka 的设计本身就能保证不会丢失消息。然而,Kafka 架构和配置的细微差别会导致消息的丢失。我们需要了解它如何以及何时可能丢失消息,并防止此类情况的发生。
    的头像 发表于 04-29 17:32 1013次阅读
    面试官:<b class='flag-5'>Kafka</b>会丢消息吗?

    学习鸿蒙背后的价值?星河版开放如何学习?

    真正的操作系统。 鸿蒙爆背后是举国支持,鸿蒙具有无与伦比的机遇和潜力,预计到今年年底,将会有5,000款的应用,完成原生鸿蒙开发,未来将会支持50万款的应用。 那么这么多的应用需要开发
    发表于 02-22 20:55

    Redis流与Kafka相比如何?

    我们先来看看Kafka的基本架构。基本的数据结构是主题。它是一个按时间排序的记录序列,只需追加。使用这种数据结构的好处在Jay Kreps的经典博文The Log中得到了很好的描述。
    的头像 发表于 02-21 16:09 464次阅读
    Redis流与<b class='flag-5'>Kafka</b>相比如何?

    大数据技术是干嘛的 大数据核心技术有哪些

    大数据技术是指用来处理和存储海量、多类型、高速的数据的一系列技术和工具。现如今,大数据已经渗透到各个行业和领域,对企业决策和业务发展起到了重
    的头像 发表于 01-31 11:07 3387次阅读

    kafka基本原理详解

    今天浩道跟大家分享一篇关于kafka相关原理的硬核干货,可以说即使你没有接触过kafka,也可以秒懂,一起看看!
    的头像 发表于 01-03 09:57 882次阅读
    <b class='flag-5'>kafka</b>基本原理详解