Java开发自学技巧!【漫画(1)
宏观架构层面利用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)相关推荐
- Java开发自学技巧!链表反转的两种实现方法,太香了
导语 回首向来萧瑟处,归去,也无风雨也无晴. 我一哥们也是做Java开发,暂且先叫他峰哥吧,到今年已经入行6年了,每天还是写一些业务代码,至今还是个单身狗,愁的头发真的都快谢顶了. 虽然峰哥每天做着C ...
- Java开发自学技巧!中原银行java开发
前言 都知道MyBatis 是一款优秀的持久层框架,它支持自定义 SQL.存储过程以及高级映射.MyBatis 免除了几乎所有的 JDBC 代码以及设置参数和获取结果集的工作.MyBatis 可以通过 ...
- Java开发必备技巧
1 调试技巧 一般的IDE工具都有以下调试功能,本文以 IntelliJ IDEA 为例 1.1 计算表达式 以下是实际开发中很容易遇到的一种场景:调试下面的代码时,validate() 返回值为tr ...
- java开发自学怎么样_为什么说自学java开发不可取?
原标题:为什么说自学java开发不可取? 自学Java开发是否很容易,怎么样才可以精通java开发呢? 作为一种灵活.多变前景可瞻,又易学习的编程语言Java备受年轻人关注,很多开发爱好者,或者想从事 ...
- 大二小白从0开始的 Java开发自学之路——随学随总结!
这里是大二下计科专业的菜狗一只 在电子科技大学吊着车尾 前一阵子一腔热血去钻研了两个月人工智能 深感无力 遂半道退出,打算开始自己的Java开发之路 嗯目前就是这么一个情况 不是那种老早就接触编程 接 ...
- Java开发小技巧(五):HttpClient工具类
前言 大多数Java应用程序都会通过HTTP协议来调用接口访问各种网络资源,JDK也提供了相应的HTTP工具包,但是使用起来不够方便灵活,所以我们可以利用Apache的HttpClient来封装一个具 ...
- Java开发小技巧(六):使用Apache POI读取Excel
前言 在数据仓库中,ETL最基础的步骤就是从数据源抽取所需的数据,这里所说的数据源并非仅仅是指数据库,还包括excel.csv.xml等各种类型的数据接口文件,而这些文件中的数据不一定是结构化存储的, ...
- 安卓开发自学技巧!我了解到的面试的一些小内幕!附面试题答案
缘起 经过近十年的发展,Android技术优化日新月异,如今Android 10.0 已经发布,Android系统性能也已经非常流畅,可以在体验上完全媲美iOS.到了各大厂商手里,改源码.自定义系统, ...
- Java开发面试技巧,如何设计一个优雅的RESTFUL的接口
HTTP 里面有几个基本的方法.我们利用这些约定一些规范. 方法 作用 GET 获取数据 POST 插入数据 PUT 更新数据 DELECT 删除数据 从表中,如果我们可以清楚看到当我们的接口是关于获 ...
最新文章
- 物体可见性信息在3D检测中的探索CVPR2020(oral)
- ECSHOP商品编辑器上传中文名图片产生乱码
- alpinestars与丹尼斯_胖摩的骑行路 篇四:真的值到了—丹尼斯MOTORSHOE AIR骑行靴...
- 华为云公布2021产品上新计划,让云无处不在,让智能无所不及
- 记忆化搜索--poj 1597 Function Run Fun
- c++ 结构体中不同类型的初始值_不同类型结构的厂房效果图大盘点
- 小型公司 --- OSPF 不连续区域进行通信配置
- 修改apache的网站根目录
- kX3552 + HiFi级播放器 + wifi无线保真= 实战HiFi音乐娱乐欣赏
- SourceForge下载慢的解决方案
- Java项目中常见的文件夹名称
- “word另存为PDF时,参考文献的上标都变为正常文本“的解决办法
- InstallShield
- 【工作笔记】微信公众号页面摇一摇+触发音效
- 六边形2048小游戏
- 用while循环写四叶玫瑰数(自幂数)
- tcl/tk 的安装
- [转]量子力学与心灵的探讨_我是亲民_新浪博客
- mirror命令详解
- 解决win10下安装typescript后仍报“tsc不是内部或外部命令...”的问题
热门文章
- python 操作txt 写入列表
- [WinError 17] 系统无法将文件移到不同的磁盘驱动器
- 遥感图像处理-阴影检测
- pytorch view(): argument 'size' (position 1) must be tuple of ints, not Tensor
- python3编译caffe错误:cannot find -lboost_python3
- Oracle 11G在用EXP 导出时,空表不能导出解决
- 50 调度器事件监听
- 经典c语言程序编程题,c语言35道经典编程题程序
- 视易精通收银服务器自动关机,视易精通量贩式收银系统操作-手册3.0.doc
- 成都计算机职业学院排名,成都计算机职高排名