加米谷大数据为你带来这篇文章来聊一下 Kafka 的一些架构设计原理,这也是互联网公司面试时非常高频的技术考点。

Kafka 是高吞吐低延迟的高并发、高性能的消息中间件,有极为广泛的运用。配置良好的 Kafka 集群甚至可以做到每秒几十万、上百万的超高并发写入。

那么 Kafka 到底是如何做到这么高的吞吐量和性能的呢?这篇文章我们来详细说一下。

页缓存技术 + 磁盘顺序写

首先 Kafka 每次接收到数据都会往磁盘上去写,如下图所示:

那么在这里我们不禁有一个疑问了,如果把数据基于磁盘来存储,频繁的往磁盘文件里写数据,这个性能会不会很差?大家肯定都觉得磁盘写性能是极差的。

没错,要是真的跟上面那个图那么简单的话,那确实这个性能是比较差的。

但是实际上 Kafka 在这里有极为优秀和出色的设计,就是为了保证数据写入性能,首先 Kafka 是基于操作系统的页缓存来实现文件写入的。

操作系统本身有一层缓存,叫做 Page Cache,是在内存里的缓存,我们也可以称之为 OS Cache,意思就是操作系统自己管理的缓存。

你在写入磁盘文件的时候,可以直接写入这个 OS Cache 里,也就是仅仅写入内存中,接下来由操作系统自己决定什么时候把 OS Cache 里的数据真的刷入磁盘文件中。

仅仅这一个步骤,就可以将磁盘文件写性能提升很多了,因为其实这里相当于是在写内存,不是在写磁盘,大家看下图:

接着另外一个就是 kafka 写数据的时候,非常关键的一点,它是以磁盘顺序写的方式来写的。

也就是说,仅仅将数据追加到文件的末尾,不是在文件的随机位置来修改数据。

普通的机械磁盘如果你要是随机写的话,确实性能极差,也就是随便找到文件的某个位置来写数据。

但是如果你是追加文件末尾按照顺序的方式来写数据的话,那么这种磁盘顺序写的性能基本上可以跟写内存的性能本身也是差不多的。

所以大家就知道了,上面那个图里,Kafka 在写数据的时候,一方面基于 OS 层面的 Page Cache 来写数据,所以性能很高,本质就是在写内存罢了。

另外一个,它是采用磁盘顺序写的方式,所以即使数据刷入磁盘的时候,性能也是极高的,也跟写内存是差不多的。

基于上面两点,Kafka 就实现了写入数据的超高性能。那么大家想想,假如说 Kafka 写入一条数据要耗费 1 毫秒的时间,那么是不是每秒就是可以写入 1000 条数据?

但是假如 Kafka 的性能极高,写入一条数据仅仅耗费 0.01 毫秒呢?那么每秒是不是就可以写入 10 万条数据?

所以要保证每秒写入几万甚至几十万条数据的核心点,就是尽最大可能提升每条数据写入的性能,这样就可以在单位时间内写入更多的数据量,提升吞吐量。

零拷贝技术

说完了写入这块,再来谈谈消费这块。

大家应该都知道,从 Kafka 里我们经常要消费数据,那么消费的时候实际上就是要从 Kafka 的磁盘文件里读取某条数据然后发送给下游的消费者,如下图所示:

那么这里如果频繁的从磁盘读数据然后发给消费者,性能瓶颈在哪里呢?

假设要是 Kafka 什么优化都不做,就是很简单的从磁盘读数据发送给下游的消费者,那么大概过程如下所示:

先看看要读的数据在不在 OS Cache 里,如果不在的话就从磁盘文件里读取数据后放入 OS Cache。

接着从操作系统的 OS Cache 里拷贝数据到应用程序进程的缓存里,再从应用程序进程的缓存里拷贝数据到操作系统层面的 Socket 缓存里。

最后从 Socket 缓存里提取数据后发送到网卡,最后发送出去给下游消费。

整个过程,如下图所示:

大家看上图,很明显可以看到有两次没必要的拷贝吧!一次是从操作系统的 Cache 里拷贝到应用进程的缓存里,接着又从应用程序缓存里拷贝回操作系统的 Socket 缓存里。

而且为了进行这两次拷贝,中间还发生了好几次上下文切换,一会儿是应用程序在执行,一会儿上下文切换到操作系统来执行。

所以这种方式来读取数据是比较消耗性能的。Kafka 为了解决这个问题,在读数据的时候是引入零拷贝技术。

也就是说,直接让操作系统的 Cache 中的数据发送到网卡后传输给下游的消费者,中间跳过了两次拷贝数据的步骤,Socket 缓存中仅仅会拷贝一个描述符过去,不会拷贝数据到 Socket 缓存。

大家看下图,体会一下这个精妙的过程:

通过零拷贝技术,就不需要把 OS Cache 里的数据拷贝到应用缓存,再从应用缓存拷贝到 Socket 缓存了,两次拷贝都省略了,所以叫做零拷贝。

对 Socket 缓存仅仅就是拷贝数据的描述符过去,然后数据就直接从 OS Cache 中发送到网卡上去了,这个过程大大的提升了数据消费时读取文件数据的性能。

而且大家会注意到,在从磁盘读数据的时候,会先看看 OS Cache 内存中是否有,如果有的话,其实读数据都是直接读内存的。

如果 Kafka 集群经过良好的调优,大家会发现大量的数据都是直接写入 OS Cache 中,然后读数据的时候也是从 OS Cache 中读。

相当于是 Kafka 完全基于内存提供数据的写和读了,所以这个整体性能会极其的高。

说个题外话,下回有机会给大家说一下 Elasticsearch 的架构原理,其实 ES 底层也是大量基于 OS Cache 实现了海量数据的高性能检索的,跟 Kafka 原理类似。

加米谷大数据干货:Kafka如何实现每秒上百万的超高并发写入?相关推荐

  1. Kafka如何实现每秒上百万的超高并发写入?掌握好面试给你打满分!

    这篇文章来聊一下 Kafka 的一些架构设计原理,这也是互联网公司面试时非常高频的技术考点. Kafka 是高吞吐低延迟的高并发.高性能的消息中间件,在大数据领域有极为广泛的运用.配置良好的 Kafk ...

  2. Kafka如何实现每秒上百万的超高并发写入?

    这篇文章来聊一下 Kafka 的一些架构设计原理,这也是互联网公司面试时非常高频的技术考点. Kafka 是高吞吐低延迟的高并发.高性能的消息中间件,在大数据领域有极为广泛的运用.配置良好的 Kafk ...

  3. 成都加米谷大数据教育:数据库设计中的 9 大常见错误

    成都加米谷大数据培训带你了解那些数据库带来的挑战 其中一些问题不可避免,也无法控制.但是,其中相当一部分可以追溯到数据库设计本身的质量.我们在初步阶段所做的决定会对数据库最终的工作情况有深远的影响. ...

  4. 加米谷大数据报告:多省市成立大数据中心

    在政府层面,一旦数据能够完全互联互通,政府目前所提供的所有公共服务,大多数都可以在线上办理,极大的节省人力物力. 各省市大数据局成立盘点如下 其中,湖南.辽宁.海南.江苏的机构改革方案已通过待公布.再 ...

  5. 加米谷大数据行业报告:为何数据科学团队需要通才而非专才

    加米谷大数据的工作团队在实践中发现在处理大数据工作时和工业化以来的分工模式还是有区别的 通过功能专业化,每位工人都变得非常娴熟于其所专一的任务,从而提高了效率.人均产出增加了,工厂生产钢针的效率也变得 ...

  6. 加米谷大数据报告:社交网络大数据的应用有多大的价值

    移动互联网时代,UGC(用户产生内容)不断发展,社交网络(Social Network)已经不断普及并深入人心,用户可以随时随地在网络上分享内容,由此产生了海量的用户数据.面对大数据时代的来临,复杂多 ...

  7. 加米谷大数据深度分析:大数据或将消亡?痛点在哪里?

    全世界都知道大数据是怎么回事:埃森哲公司的研究发现,79%的企业高管表示,不采用大数据的公司将失去市场实力,可能面临倒闭.大数据被广泛视为所有连接到互联网的组织的生命线.此外,89%的受访者认为,大数 ...

  8. Hadoop:HDFS的概念理解和体系架构-成都加米谷大数据分享

    HDFS是什么? HDFS 全称 Hadoop Distributed File System ,简称HDFS,是一个分布式文件系统.它是谷歌的GFS提出之后出现的另外一种文件系统.它有一定高度的容错 ...

  9. 加米谷:金融领域中的大数据应用

    如今,越来越多的领域开始运用大数据,它几乎涵盖了各行各业.数据显示,大数据在金融领域的应用范围较广.今天,我们就一起来看看在金融领域中的大数据应用都有哪些? 据统计,中国大数据IT应用投资规模以五大行 ...

最新文章

  1. 零基础搭建个性化精准营销 AI 应用,这次手把手教你!
  2. BootStrap字体图标不显示、下拉菜单不显示
  3. ssd测试软件cy,目标检测实践_tensorflow版SSD模型测试
  4. 因为代言一款游戏 罗永浩和网友吵起来了
  5. html+css+javascript 网页设计 从入门到精通_绵阳美工设计学习
  6. Delphi 2010 新增功能之: TWICImage 类[4] - 图像的修剪
  7. frida hook so层方法大全
  8. 使用xjc一秒钟生成您的JAXB类
  9. mysql查询包含字符串(模糊查询)
  10. 利用微信实现自动发送监控告警
  11. Rhino 7 for Mac(犀牛3D造型软件)
  12. HDU2094(产生冠军)题解
  13. ie6-7中会出现图片下有空隙
  14. 17、手势(Gesture)
  15. Hi3518EV200 SDK 分析
  16. 华中科技大学计算机组成原理 -运算器设计(全部通关)
  17. 魔镜mirror安卓版打不开_魔镜Mirror
  18. 利用Fiddler抓包软件,爬短视频无水印,爬wei视app,步骤完整
  19. 关于Kubernetes中的节点优雅关闭 - Graceful node shutdown
  20. 不知道短视频很火的配音怎么制作?只需要看这一篇就够了

热门文章

  1. Georgia与Times字体的比较
  2. Android 基于dkPlayer实现抖音列表播放
  3. C语言中的a++与++a的速记理解
  4. HF-Net初探之一:简介与配置使用
  5. AutoCAD2008绿色版用法
  6. Linux中软件自启动三种方式
  7. 解析 Linux 中的 VFS 文件系统机制(1)
  8. Autodesk 3ds Max 2011中文版下载
  9. 关于 web 性能的思考与分享[04]——页面 SEO 优化方案
  10. HNU工训中心: 三人表决器及八人抢答器实验报告