宏观架构层面利用Partition实现并行处理

Kafka中每个Topic都包含一个或多个Partition,不同Partition可位于不同节点。

同时Partition在物理上对应一个本地文件夹,每个Partition包含一个或多个Segment,每个Segment包含一个数据文件和一个与之对应的索引文件。

一方面,由于不同Partition可位于不同机器,因此可以充分利用集群优势,实现机器间的并行处理。

另一方面,由于Partition在物理上对应一个文件夹,即使多个Partition位于同一个节点,也可通过配置让同一节点上的不同Partition置于不同的磁盘上,从而实现磁盘间的并行处理,充分发挥多磁盘的优势。

具体实现层面高效使用磁盘特性和操作系统特性****将写磁盘的过程变为顺序写

Kafka的整个设计中,Partition相当于一个非常长的数组,而Broker接收到的所有消息顺序写入这个大数组中。同时Consumer通过Offset顺序消费这些数据,并且不删除已经消费的数据,从而避免了随机写磁盘的过程。

而这个删除过程,并非通过使用“读-写”模式去修改文件,而是将Partition分为多个Segment,每个Segment对应一个物理文件,通过删除整个文件的方式去删除Partition内的数据。这种方式清除旧数据的方式,也避免了对文件的随机写操作。

在存储机制上,使用了Log Structured Merge Trees(LSM) 。

**注:**Log Structured Merge Trees(LSM),谷歌 “BigTable” 的论文,中提出,LSM是当前被用在许多产品的文件结构策略:HBase, Cassandra, LevelDB, SQLite,Kafka。LSM被设计来提供比传统的B+树或者ISAM更好的写操作吞吐量,通过消去随机的本地更新操作来达到这个目标。这个问题的本质还是磁盘随机操作慢,顺序读写快。这二种操作存在巨大的差距,无论是磁盘还是SSD,而且快至少三个数量级。

充分利用Page Cache

Page Cache,其中文名称为页高速缓冲存储器,简称页高缓。page cache的大小为一页,通常为4K。在Linux读写文件时,它用于缓存文件的逻辑内容,从而加快对磁盘上映像和数据的访问。是Linux操作系统的一个特色。

  • I/O Scheduler会将连续的小块写组装成大块的物理写从而提高性能
  • I/O Scheduler会尝试将一些写操作重新按顺序排好,从而减少磁盘头的移动时间
  • 读操作可直接在Page Cache内进行。如果消费和生产速度相当,甚至不需要通过物理磁盘(直接通过Page Cache)交换数据

Kafka收到数据后,写磁盘时只是将数据写入Page Cache,并不保证数据一定完全写入磁盘。

如果数据消费速度与生产速度相当,甚至不需要通过物理磁盘交换数据,而是直接通过Page Cache交换数据。同时,Follower从Leader Fetch数据时,也可通过Page Cache完成。

零拷贝

最后

如果觉得本文对你有帮助的话,不妨给我点个赞,关注一下吧!

资料免费领取方式:点击这里

va-p7)**

[外链图片转存中…(img-cQbxLCy6-1628134926509)]

Java开发自学技巧!【漫画(1)相关推荐

  1. Java开发自学技巧!链表反转的两种实现方法,太香了

    导语 回首向来萧瑟处,归去,也无风雨也无晴. 我一哥们也是做Java开发,暂且先叫他峰哥吧,到今年已经入行6年了,每天还是写一些业务代码,至今还是个单身狗,愁的头发真的都快谢顶了. 虽然峰哥每天做着C ...

  2. Java开发自学技巧!中原银行java开发

    前言 都知道MyBatis 是一款优秀的持久层框架,它支持自定义 SQL.存储过程以及高级映射.MyBatis 免除了几乎所有的 JDBC 代码以及设置参数和获取结果集的工作.MyBatis 可以通过 ...

  3. Java开发必备技巧

    1 调试技巧 一般的IDE工具都有以下调试功能,本文以 IntelliJ IDEA 为例 1.1 计算表达式 以下是实际开发中很容易遇到的一种场景:调试下面的代码时,validate() 返回值为tr ...

  4. java开发自学怎么样_为什么说自学java开发不可取?

    原标题:为什么说自学java开发不可取? 自学Java开发是否很容易,怎么样才可以精通java开发呢? 作为一种灵活.多变前景可瞻,又易学习的编程语言Java备受年轻人关注,很多开发爱好者,或者想从事 ...

  5. 大二小白从0开始的 Java开发自学之路——随学随总结!

    这里是大二下计科专业的菜狗一只 在电子科技大学吊着车尾 前一阵子一腔热血去钻研了两个月人工智能 深感无力 遂半道退出,打算开始自己的Java开发之路 嗯目前就是这么一个情况 不是那种老早就接触编程 接 ...

  6. Java开发小技巧(五):HttpClient工具类

    前言 大多数Java应用程序都会通过HTTP协议来调用接口访问各种网络资源,JDK也提供了相应的HTTP工具包,但是使用起来不够方便灵活,所以我们可以利用Apache的HttpClient来封装一个具 ...

  7. Java开发小技巧(六):使用Apache POI读取Excel

    前言 在数据仓库中,ETL最基础的步骤就是从数据源抽取所需的数据,这里所说的数据源并非仅仅是指数据库,还包括excel.csv.xml等各种类型的数据接口文件,而这些文件中的数据不一定是结构化存储的, ...

  8. 安卓开发自学技巧!我了解到的面试的一些小内幕!附面试题答案

    缘起 经过近十年的发展,Android技术优化日新月异,如今Android 10.0 已经发布,Android系统性能也已经非常流畅,可以在体验上完全媲美iOS.到了各大厂商手里,改源码.自定义系统, ...

  9. Java开发面试技巧,如何设计一个优雅的RESTFUL的接口

    HTTP 里面有几个基本的方法.我们利用这些约定一些规范. 方法 作用 GET 获取数据 POST 插入数据 PUT 更新数据 DELECT 删除数据 从表中,如果我们可以清楚看到当我们的接口是关于获 ...

最新文章

  1. 物体可见性信息在3D检测中的探索CVPR2020(oral)
  2. ECSHOP商品编辑器上传中文名图片产生乱码
  3. alpinestars与丹尼斯_胖摩的骑行路 篇四:真的值到了—丹尼斯MOTORSHOE AIR骑行靴...
  4. 华为云公布2021产品上新计划,让云无处不在,让智能无所不及
  5. 记忆化搜索--poj 1597 Function Run Fun
  6. c++ 结构体中不同类型的初始值_不同类型结构的厂房效果图大盘点
  7. 小型公司 --- OSPF 不连续区域进行通信配置
  8. 修改apache的网站根目录
  9. kX3552 + HiFi级播放器 + wifi无线保真= 实战HiFi音乐娱乐欣赏
  10. SourceForge下载慢的解决方案
  11. Java项目中常见的文件夹名称
  12. “word另存为PDF时,参考文献的上标都变为正常文本“的解决办法
  13. InstallShield
  14. 【工作笔记】微信公众号页面摇一摇+触发音效
  15. 六边形2048小游戏
  16. 用while循环写四叶玫瑰数(自幂数)
  17. tcl/tk 的安装
  18. [转]量子力学与心灵的探讨_我是亲民_新浪博客
  19. mirror命令详解
  20. 解决win10下安装typescript后仍报“tsc不是内部或外部命令...”的问题

热门文章

  1. python 操作txt 写入列表
  2. [WinError 17] 系统无法将文件移到不同的磁盘驱动器
  3. 遥感图像处理-阴影检测
  4. pytorch view(): argument 'size' (position 1) must be tuple of ints, not Tensor
  5. python3编译caffe错误:cannot find -lboost_python3
  6. Oracle 11G在用EXP 导出时,空表不能导出解决
  7. 50 调度器事件监听
  8. 经典c语言程序编程题,c语言35道经典编程题程序
  9. 视易精通收银服务器自动关机,视易精通量贩式收银系统操作-手册3.0.doc
  10. 成都计算机职业学院排名,成都计算机职高排名