欢迎来到淘宝彩票注册_淘宝彩票走势图表大全_淘宝彩票官网首页电脑版! 联系我们 网站地图

淘宝彩票注册_淘宝彩票走势图表大全_淘宝彩票官网首页电脑版

0379-65557469

可研编制
全国服务热线
0379-65557469

电话: 0379-65557469
0379-63930906
0379-63900388 
0379-63253525   
传真: 0379-65557469
地址:洛阳市洛龙区开元大道219号2幢1-2522、2501、2502、2503、2504、2505室 

可研编制
当前位置: 首页 | 咨询案例 > 可研编制

Kafka在功能优化方面做了哪些行动?你知道吗?

作者:admin 发布时间:2019-09-06 19:30:10 浏览次数:293
打印 收藏 关闭
字体【
视力保护色

* 引荐阅览 *

*我说通晓字符串,面试官居然问我Java中的String有没有长度约束?

*国内Java面试总是问StringBuffer?层次为什么这么低?

*秋招Java岗:最全BAT大厂面试题收拾

*字节跳动的面试难吗?我该怎么应对?

01 批量处理

传统音讯中间件的音讯发送和消费全体上是针对单条的。关于生产者而言,它先发一条音讯,然后broker回来ACK表明已接纳,这儿发生2次rpc;关于顾客而言,它先恳求承受音讯,然后broker回来音讯,最终发送ACK表明已消费,这儿发生了3次rpc(有些音讯中间件会优化一下,broker回来的时分回来多条音讯)。而Kafka选用了批量处理:生产者聚合了一批音讯,然后再做2次rpc将音讯存入broker,这本来是需求很屡次的rpc才干完结的操作。假定需求发送1000条音讯,每条音讯巨细1KB,那么传统的音讯中间件需求2000次rpc,而Kafka或许会把这1000条音讯包装成1个1MB的音讯,选用2次rpc就完结了使命。这一改善行动一度被认为是一种“做弊”的行为,但是在微批次理念盛行的今天,其它音讯中间件也开端纷繁仿效。

02 客户端优化

这儿接着批量处理的概念持续来说,新版生产者客户端摒弃了以往的单线程,而选用了双线程:主线程和Sender线程。主线程担任将音讯置入客户端缓存,Sender线程担任从缓存中发送音讯,而这个缓存会聚合多个音讯为一个批次。有些音讯中Kafka在功能优化方面做了哪些行动?你知道吗?间件会把音讯直接扔到broker。

03 日志格局

Kafka从0.8版别开端日志格局历经了三次革新:v0、v1、v2,Kafka的日志格局越来越利于批量音讯的处理。

04 日志编码

假如了解了Kafka详细的日志格局(能够参阅上图),那么你应该了解日志(Record,或许称之为音讯)自身除了根本的key和value之外,还有一些其它的字段,本来这些附加字段依照固定的巨细占用必定的篇幅(参阅上图左),而Kafka最新的版别中选用了变成字段Varints和ZigZag编码,有用地下降了这些Kafka在功能优化方面做了哪些行动?你知道吗?附加字段的占用巨细。日志(音讯)尽或许变小了,那么网络传输的功率也会变高,日志存盘的功率也会进步,然后收拾的功能也会有所进步。

05 音讯紧缩

Kafka支撑多种音讯紧缩方法(gzip、snappy、lz4)。对音讯进行紧缩能够极大地削减网络传输 量、下降网络 I/O,然后进步全体的功能。音讯紧缩是一种运用时刻换空间的优化方法,假如对 时延有必定的要求,则不引荐对音讯进行紧缩。

06 树立索引,便利快速定位查询

每个日志分段文件对应了两个索引文件,首要用来进步查找音讯的功率,这也是进步功能的一种方法。(详细的内容在书中的第5章有详细的解说,大众号里如同忘掉宣布了,找了一圈没找到)

07 分区

许多人会疏忽掉这个要素,其实分区也是进步功能的一种十分有用的方法,这种方法所带来的作用会比前面所说的日志编码、音讯紧缩等愈加的显着。分区在其他分布式组件中也有许多触及,至于为什么分区能够进步功能这种根本知识在这儿就不在赘述了。不过需求留意,一昧的增加分区并不能一向带来功能的进步。

08 一致性

绝大多数的材料在叙述Kafka功能优化的行动之时是不会提及一致性的东西的。咱们所了解的通用的一致性协议如Paxos、Raft、Gossip等,而Kafka另辟蹊径选用相似PacificA的做法不是“拍大腿”拍出来的,选用这种模型会进步收拾的功率。

09 次序写盘

操作体系能够Kafka在功能优化方面做了哪些行动?你知道吗?针对线性读写做深层次的优化,比方预读(read-ahead,提早将一个比较大的磁盘块读入内存) 和后写(write-behind,将许多小的逻辑写操作兼并起来组成一个大的物理写操作)技能。Kafka 在设计时选用了文件追加的方法来写入音讯,即只能在日志文件的尾部追加新的消 息,而且也不允许修正已写入的音讯,这种方法归于典型的次序写盘的操作,所以就算 Kafka 运用磁盘作为存储介质,它所能承载的吞吐量也不容小觑。

10 页缓存

为什么Kafka功能这么高?当遇到这个问题的时分许多人都会想到上面的次序写盘这一点。其实在次序斜盘前面还有页缓存(PageCache)这一层的优化。

页缓存是操作体系完成的一种首要的磁盘缓存,以此用来削减对磁盘 I/O 的操作。详细 来说,便是把磁盘中的数据缓存到内存中,把对磁盘的拜访变为对内存的拜访。为了补偿性 能上的差异,现代操作体系越来越“急进地”将内存作为磁盘缓存,乃至会十分愿意将一切 可用的内存用作磁盘缓存,这样当内存收回时也几乎没有功能丢失,一切关于磁盘的读写也 将经由一致的缓存。

当一个进程预备读取磁盘上的文件内容时,操作体系会先查看待读取的数据地点的页 (page)是否在页缓存(pagecache)中,假如存在(射中)则直接回来数据,然后避免了对物 理磁盘的 I/O 操作;假如没有射中,则操作体系会向磁盘建议读取恳求并将读取的数据页存入 页缓存,之后再将数据回来给进程。相同,假如一个进程需求将数据写入磁盘,那么操作体系也会检测数据对应的页是否在页缓存中,假如不存在,则会先在页缓存中增加相应的页,最终将数据写入对应的页。被修正往后的页也就变成了脏页,操作体系会在适宜的时刻把脏页中的 数据写入磁盘,以坚持数据的一致性。

对一个进程而言,它会在进程内部缓存处理所需的数据,但是这些数据有或许还缓存在操 作体系的页缓存中,因而同一份数据有或许被缓存了两次。而且,除非运用 Direct I/O 的方法, 不然页缓存很难被制止。此外,用过 Java 的人一般都知道两点现实:目标的内存开支十分大, 一般会是实在数据巨细的几倍乃至更多,空间运用率低下;Java 的废物收回会跟着堆内数据的 增多而变得越来越慢。根据这些要素,运用文件体系并依赖于页缓存的做法显着要优于保护一 个进程内缓存或其他结构,至少咱们能够省去了一份进程内部的缓存耗费,一起还能够经过结构紧凑的字节码来代替运用目标的方法以节约更多的空间。如此,咱们能够在 32GB 的机器上运用 28GB 至 30GB 的内存而不必忧虑 GC 所带来的功能问题。此外,即便 Kafka 服务重启, 页缓存仍是会坚持有用,但是进程内的缓存却需求重建。这样也极大地简化了代码逻辑,由于 保护页缓存和文件之间的一致性交由操作体系来担任,这样会比进程内保护愈加安全有用。

Kafka 中许多运用了页缓存,这是 Kafka 完成高吞吐的重要要Kafka在功能优化方面做了哪些行动?你知道吗?素之一。尽管音讯都是先被写入页缓存,然后由操作体系担任详细的刷盘使命的。

11 零复制

Kafka运用了Zero Copy技能进步了消费的功率。前面所说的Kafka将音讯先写入页缓存,假如顾客在读取音讯的时分假如在页缓存中能够射中,那么能够直接从页缓存中读取,这样又节约了一次从磁盘到页缓存的copy开支。别的关于读写的概念能够进一步了解一下什么是写扩大和读扩大。

附上一个磁盘IO流程能够参阅下图:

假如觉得有所收成的话能够点赞重视百令胶囊我和转发共享给更多的程序猿们哦~

版权所有:洛阳市建设工程咨询有限责任公司 联系人:李经理 电话: 地址:洛阳市洛龙区开元大道219号2幢1-2522、2501、2502、2503、2504、2505室
版权所有 淘宝彩票注册 藏ICP备166161708号-5