资讯专栏INFORMATION COLUMN

Kafka是如何实现高吞吐率的

RyanQ / 1942人阅读

摘要:是分布式消息系统,需要处理海量的消息,的设计是把所有的消息都写入速度低容量大的硬盘,以此来换取更强的存储能力,但实际上,使用硬盘并没有带来过多的性能损失主要使用了以下几个方式实现了超高的吞吐率顺序读写的消息是不断追加到文件中的,这个特性使可

Kafka是分布式消息系统,需要处理海量的消息,Kafka的设计是把所有的消息都写入速度低容量大的硬盘,以此来换取更强的存储能力,但实际上,使用硬盘并没有带来过多的性能损失

kafka主要使用了以下几个方式实现了超高的吞吐率

顺序读写

kafka的消息是不断追加到文件中的,这个特性使kafka可以充分利用磁盘的顺序读写性能

顺序读写不需要硬盘磁头的寻道时间,只需很少的扇区旋转时间,所以速度远快于随机读写

Kafka官方给出了测试数据(Raid-5,7200rpm):

顺序 I/O: 600MB/s

随机 I/O: 100KB/s

零拷贝

先简单了解下文件系统的操作流程,例如一个程序要把文件内容发送到网络

这个程序是工作在用户空间,文件和网络socket属于硬件资源,两者之间有一个内核空间

在操作系统内部,整个过程为:

在Linux kernel2.2 之后出现了一种叫做"零拷贝(zero-copy)"系统调用机制,就是跳过“用户缓冲区”的拷贝,建立一个磁盘空间和内存的直接映射,数据不再复制到“用户态缓冲区”

系统上下文切换减少为2次,可以提升一倍的性能

文件分段

kafka的队列topic被分为了多个区partition,每个partition又分为多个段segment,所以一个队列中的消息实际上是保存在N多个片段文件中

通过分段的方式,每次文件操作都是对一个小文件的操作,非常轻便,同时也增加了并行处理能力

批量发送

Kafka允许进行批量发送消息,先将消息缓存在内存中,然后一次请求批量发送出去

比如可以指定缓存的消息达到某个量的时候就发出去,或者缓存了固定的时间后就发送出去

如100条消息就发送,或者每5秒发送一次

这种策略将大大减少服务端的I/O次数

数据压缩

Kafka还支持对消息集合进行压缩,Producer可以通过GZIP或Snappy格式对消息集合进行压缩

压缩的好处就是减少传输的数据量,减轻对网络传输的压力

Producer压缩之后,在Consumer需进行解压,虽然增加了CPU的工作,但在对大数据处理上,瓶颈在网络上而不是CPU,所以这个成本很值得

欢迎加入本站公开兴趣群

软件开发技术群

兴趣范围包括:Java,C/C++,Python,PHP,Ruby,shell等各种语言开发经验交流,各种框架使用,外包项目机会,学习、培训、跳槽等交流

QQ群:26931708

Hadoop源代码研究群

兴趣范围包括:Hadoop源代码解读,改进,优化,分布式系统场景定制,与Hadoop有关的各种开源项目,总之就是玩转Hadoop

QQ群:288410967 

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/4190.html

相关文章

  • Kafka如何做到1秒处理1500万条消息

    摘要:例如,在的生产环境中,群集每秒能够处理超过万条消息,而且其数据聚合率接近。为高吞吐量的,调优缓冲区的大小特别是和以字节为单位。 来源:51CTO技术栈(ID:blog51cto) Apache Kafka是一款流行的分布式数据流平台,它已经广泛地被诸如New Relic(数据智能平台)、Uber、Square(移动支付公司)等大型公司用来构建可扩展的、高吞吐量的、高可靠的实时数据流系统...

    tracy 评论0 收藏0
  • 关于MQ的几件小事(一)消息队列的用途、优缺点、技术选型

    摘要:数量对吞吐量的影响可以达到几百几千个的级别,吞吐量会有小幅度的下降。这是的一大优势,可在同等数量机器下支撑大量的从几十个到几百个的时候,吞吐量会大幅下降。下一篇如何保证消息队列的高可用 1.为什么使用消息队列? (1)解耦:可以在多个系统之间进行解耦,将原本通过网络之间的调用的方式改为使用MQ进行消息的异步通讯,只要该操作不是需要同步的,就可以改为使用MQ进行不同系统之间的联系,这样项目之间...

    xialong 评论0 收藏0
  • 【备战春招/秋招系列】美团Java面经总结进阶篇 (附详解答案)

    摘要:我在前面的文章中也提到了应该怎么做自我介绍与项目介绍,详情可以查看这篇文章备战春招秋招系列初出茅庐的程序员该如何准备面试。因此基于事件消息对象驱动的业务架构可以是一系列流程。 showImg(https://user-gold-cdn.xitu.io/2018/11/14/16711ac29c2ae52c?w=928&h=531&f=png&s=798562); 一 消息队列MQ的...

    chengjianhua 评论0 收藏0
  • 消息中间件——RabbitMQ(二)各大主流消息中间件综合对比介绍!

    摘要:主流消息中间件介绍是由出品,是一个完全支持和规范的实现。主流消息中间件介绍是阿里开源的消息中间件,目前也已经孵化为顶级项目。 showImg(https://img-blog.csdnimg.cn/20190509221741422.gif);showImg(https://img-blog.csdnimg.cn/20190718204938932.png?x-oss-process=...

    hiyang 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<