本篇文章為大家展示了kafka解決查找效率的兩大工具分別是什么,內(nèi)容簡(jiǎn)明扼要并且容易理解,絕對(duì)能使你眼前一亮,通過(guò)這篇文章的詳細(xì)介紹希望你能有所收獲。
成都創(chuàng)新互聯(lián)公司主要從事網(wǎng)頁(yè)設(shè)計(jì)、PC網(wǎng)站建設(shè)(電腦版網(wǎng)站建設(shè))、wap網(wǎng)站建設(shè)(手機(jī)版網(wǎng)站建設(shè))、響應(yīng)式網(wǎng)站建設(shè)、程序開(kāi)發(fā)、網(wǎng)站優(yōu)化、微網(wǎng)站、微信小程序開(kāi)發(fā)等,憑借多年來(lái)在互聯(lián)網(wǎng)的打拼,我們?cè)诨ヂ?lián)網(wǎng)網(wǎng)站建設(shè)行業(yè)積累了豐富的成都網(wǎng)站設(shè)計(jì)、成都做網(wǎng)站、網(wǎng)站設(shè)計(jì)、網(wǎng)絡(luò)營(yíng)銷(xiāo)經(jīng)驗(yàn),集策劃、開(kāi)發(fā)、設(shè)計(jì)、營(yíng)銷(xiāo)、管理等多方位專(zhuān)業(yè)化運(yùn)作于一體。
數(shù)據(jù)文件的分段
Kafka解決查詢(xún)效率的手段之一是將數(shù)據(jù)文件分段,比如有100條Message,它們的offset是從0到99。假設(shè)將數(shù)據(jù)文件分成5段,第一段為0-19,第二段為20-39,以此類(lèi)推,每段放在一個(gè)單獨(dú)的數(shù)據(jù)文件里面,數(shù)據(jù)文件以該段中最小的offset命名。這樣在查找指定offset的Message的時(shí)候,用二分查找就可以定位到該Message在哪個(gè)段中。
為數(shù)據(jù)文件建索引
數(shù)據(jù)文件分段使得可以在一個(gè)較小的數(shù)據(jù)文件中查找對(duì)應(yīng)offset的Message了,但是這依然需要順序掃描才能找到對(duì)應(yīng)offset的Message。為了進(jìn)一步提高查找的效率,Kafka為每個(gè)分段后的數(shù)據(jù)文件建立了索引文件,文件名與數(shù)據(jù)文件的名字是一樣的,只是文件擴(kuò)展名為.index。
索引文件中包含若干個(gè)索引條目,每個(gè)條目表示數(shù)據(jù)文件中一條Message的索引。索引包含兩個(gè)部分(均為4個(gè)字節(jié)的數(shù)字),分別為相對(duì)offset和position。
相對(duì)offset:因?yàn)閿?shù)據(jù)文件分段以后,每個(gè)數(shù)據(jù)文件的起始o(jì)ffset不為0,相對(duì)offset表示這條Message相對(duì)于其所屬數(shù)據(jù)文件中最小的offset的大小。舉例,分段后的一個(gè)數(shù)據(jù)文件的offset是從20開(kāi)始,那么offset為25的Message在index文件中的相對(duì)offset就是25-20 = 5。存儲(chǔ)相對(duì)offset可以減小索引文件占用的空間。
position,表示該條Message在數(shù)據(jù)文件中的絕對(duì)位置。只要打開(kāi)文件并移動(dòng)文件指針到這個(gè)position就可以讀取對(duì)應(yīng)的Message了。
index文件中并沒(méi)有為數(shù)據(jù)文件中的每條Message建立索引,而是采用了稀疏存儲(chǔ)的方式,每隔一定字節(jié)的數(shù)據(jù)建立一條索引。這樣避免了索引文件占用過(guò)多的空間,從而可以將索引文件保留在內(nèi)存中。但缺點(diǎn)是沒(méi)有建立索引的Message也不能一次定位到其在數(shù)據(jù)文件的位置,從而需要做一次順序掃描,但是這次順序掃描的范圍就很小了。
在Kafka中,索引文件的實(shí)現(xiàn)類(lèi)為OffsetIndex,它的類(lèi)圖如下:
主要的方法有:
append方法,添加一對(duì)offset和position到index文件中,這里的offset將會(huì)被轉(zhuǎn)成相對(duì)的offset。
lookup, 用二分查找的方式去查找小于或等于給定offset的最大的那個(gè)offset
上述內(nèi)容就是kafka解決查找效率的兩大工具分別是什么,你們學(xué)到知識(shí)或技能了嗎?如果還想學(xué)到更多技能或者豐富自己的知識(shí)儲(chǔ)備,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道。