欧美一级特黄大片做受成人-亚洲成人一区二区电影-激情熟女一区二区三区-日韩专区欧美专区国产专区

Kafka的基本概念是什么

這期內(nèi)容當(dāng)中小編將會給大家?guī)碛嘘P(guān)Kafka的基本概念是什么,文章內(nèi)容豐富且以專業(yè)的角度為大家分析和敘述,閱讀完這篇文章希望大家可以有所收獲。

畢節(jié)網(wǎng)站建設(shè)公司創(chuàng)新互聯(lián)建站,畢節(jié)網(wǎng)站設(shè)計制作,有大型網(wǎng)站制作公司豐富經(jīng)驗。已為畢節(jié)1000多家提供企業(yè)網(wǎng)站建設(shè)服務(wù)。企業(yè)網(wǎng)站搭建\外貿(mào)網(wǎng)站建設(shè)要多少錢,請找那個售后服務(wù)好的畢節(jié)做網(wǎng)站的公司定做!

0、引言

Kafka是LinkedIn開源出來的一款消息服務(wù)器,用Scala語言實現(xiàn);這貨的性能是百萬級的QPS(估計是掛載了多塊磁盤),我隨便寫個測試程序就是十萬級。

1、Kafka基本概念

Kafka的基本概念是什么

在Kafka中消息是按照Topic進(jìn)行分類的;每條發(fā)布到Kafka集群的消息都有一個類別,這個類別被稱為Topic。(物理上不同Topic的消息分開存儲,邏輯上一個Topic的消息雖然保存于一個或多個broker上但用戶只需指定消息的Topic即可生產(chǎn)或消費數(shù)據(jù)而不必關(guān)心數(shù)據(jù)存于何處)。

每個Topic包含一個或多個Parition;Parition是物理存儲上的概念,創(chuàng)建Topic時可指定Parition數(shù)量。每個Parition對應(yīng)一個存儲文件夾,文件夾下存儲該Parition所持有的消息數(shù)據(jù)和索引文件。Topic進(jìn)行分區(qū)劃分的主要目的是出于性能方面的考慮,Kafka盡量的使所有分區(qū)均勻的分布到集群所有的節(jié)點上而不是集中在某些節(jié)點上,另外主從關(guān)系也盡量均衡,這樣每個節(jié)點都會擔(dān)任一定比例的分區(qū)的Leader。每個Parition是一個有序的隊列,每條消息在Parition中擁有一個offset。

消息的發(fā)布者可將消息發(fā)布到指定的Topic中,同時Producer也能決定將此消息發(fā)送到哪個Parition(也可以采取隨機(jī)、哈希、輪訓(xùn)等策略)。

 Kafka的基本概念是什么

消息的消費者主動從Kafka中拉取消息進(jìn)行消費(pull模式),在Kafka中一個Parition中的消息可以被無限多個消費者進(jìn)行消費,每個消費者之間是完全獨立,每個Consumer消費后的消息Kafka并不進(jìn)行刪除操作,Kafka中的消息刪除是定期進(jìn)行的,可以指定保留多長時間消息不被刪除。通過指定offset就可以消費任意位置的消息,當(dāng)然前提是指定的offset是存在的。從這點上看Kafka更像是一個只能追加、不能修改、支持隨機(jī)讀取的小文件管理系統(tǒng)。

上面提到每個Consumer是完全獨立,如果多個Consume想輪流消費同一個Topic的同一個Parition就做不到;后來Kafka發(fā)明了一個Consumer-group的概念,每個Consumer客戶端被創(chuàng)建時,會向Zookeeper注冊自己的信息;一個group中的多個Consumer可以交錯的消費一個Topic的所有Paritions;簡而言之,保證此Topic的所有Paritions都能被此group所消費,且消費時為了性能考慮,讓Parition相對均衡的分散到每個Consumer上,Consume-group之間是完全獨立。主人的相反是挺好的,但是悲劇的是客戶端基本都不支持,貌似只有Java的客戶端支持比較好。

Kafka的基本概念是什么

2、消息順序性與可靠性設(shè)計

發(fā)布到Kafka的消息在一個Parition中是順序存儲的,發(fā)布者可以通過隨機(jī)、哈希、輪訓(xùn)等方式發(fā)布到多個分區(qū)中,消費者通過指定offset進(jìn)行消費;所以Kafka當(dāng)中消息的順序性更多的取決于使用方如何使用。

Kafka系統(tǒng)中消息支持容災(zāi)備份存儲,每個Parition有主分區(qū)、備用分區(qū)的概念,一個Topic中的多個Parition的主分區(qū)可能落在不同的物理機(jī)器上面,Kafka也是盡量讓其分布在不同的機(jī)器上以提高系統(tǒng)性能。消息的讀寫都是通過主分區(qū)直接完成,客戶端要直連主分區(qū)所在的物理機(jī)進(jìn)行讀寫操作。備用分區(qū)就像一個"Consumer"消費主分區(qū)的消息并保存在本地日志中進(jìn)行備份;主分區(qū)負(fù)責(zé)跟蹤所有的備用分區(qū)的狀態(tài),如果備用分區(qū)"落后"太多或者失效,主分區(qū)將會把它從同步列表中刪除;主備分區(qū)的管理是通過zookeeper進(jìn)行的。

發(fā)布時的可靠性取決于兩點:發(fā)送端的確認(rèn)機(jī)制、以及Kafka系統(tǒng)落地的策略。發(fā)送端支持無確認(rèn)、主分區(qū)確認(rèn)(主分區(qū)收到消息后發(fā)送確認(rèn)回執(zhí))、以及主備分區(qū)確認(rèn)(備用分區(qū)消息同步后主分區(qū)才發(fā)送確認(rèn)回執(zhí))三種機(jī)制;Kafka系統(tǒng)落地的策略有兩種刷盤方式:通過配置消息數(shù)、以及配置刷盤時間間隔。

消費時的可靠性取決于消費者的讀取邏輯,Kafka是不保存消息的任何狀態(tài)的。At most once、At least once 、Exactly once 三種模式需要自己按照業(yè)務(wù)實現(xiàn),最容易實現(xiàn)就是At least once,兩外兩種在分布式系統(tǒng)中都不可能做到完全的絕對實現(xiàn),只能無限靠近,降低錯誤率。

3、消息存儲方式

Parition是以文件的形式存儲在文件系統(tǒng)中,比如創(chuàng)建了一個名為tipocTest的Topic,其有4個Parition,在Kafka的數(shù)據(jù)目錄下面會有四個文件夾,按照Topic-partnum命名。

 Kafka的基本概念是什么

每個文件夾的內(nèi)容

 Kafka的基本概念是什么

Parition中的每條Message由offset來表示它在這個Parition中的偏移量,這個offset不是該Message在Parition數(shù)據(jù)文件中的實際存儲位置,而是邏輯上一個值,它唯一確定了Parition中的一條Message。因此,可以認(rèn)為offset是Parition中Message的id。Parition中的每條Message包含了三個屬性: Offset 、DataSize 、Data;Parition的數(shù)據(jù)文件則包含了若干條上述格式的Message,按offset由小到大排列在一起;Kafka收到新的消息后追加到文件末尾即可,所以消息的發(fā)布效率是很高的。

下面我們來思考另一個問題,如果一個Parition只有一個數(shù)據(jù)文件會怎么樣? 新消息是添加在文件末尾,不論文件數(shù)據(jù)文件有多大,這個操作永遠(yuǎn)都是O(1)。但是在讀取的時候根據(jù)offset查找Message是順序查找的,因此,如果數(shù)據(jù)文件很大的話,查找的效率就低。那么Kafka是如何解決查找效率的的問題呢?1) 分段、2) 索引。

4、數(shù)據(jù)文件的分段與索引

Kafka解決查詢效率的手段之一是將數(shù)據(jù)文件分段,可以配置每個數(shù)據(jù)文件的最大值,每段放在一個單獨的數(shù)據(jù)文件里面,數(shù)據(jù)文件以該段中最小的offset命名。這樣在查找指定offset的Message的時候,用二分查找就可以定位到該Message在哪個段中。

數(shù)據(jù)文件分段使得可以在一個較小的數(shù)據(jù)文件中查找對應(yīng)offset的Message了,但是這依然需要順序掃描才能找到對應(yīng)offset的Message。為了進(jìn)一步提高查找的效率,Kafka為每個分段后的數(shù)據(jù)文件建立了索引文件,文件名與數(shù)據(jù)文件的名字是一樣的,只是文件擴(kuò)展名為.index。索引文件中包含若干個索引條目,每個條目表示數(shù)據(jù)文件中一條Message的索引——Offset與position(Message在數(shù)據(jù)文件中的絕對位置)的對應(yīng)關(guān)系;index文件中并沒有為數(shù)據(jù)文件中的每條Message建立索引,而是采用了稀疏存儲的方式,每隔一定字節(jié)的數(shù)據(jù)建立一條索引。這樣避免了索引文件占用過多的空間,從而可以將索引文件保留在內(nèi)存中。但缺點是沒有建立索引的Message也不能一次定位到其在數(shù)據(jù)文件的位置,從而需要做一次順序掃描,但是這次順序掃描的范圍就很小了。

每個分段還有一個.timeindex索引文件,這個文件的格式與.index文件格式一樣,所記錄的東西是消息發(fā)布時間與offset的稀疏索引,用于消息定期刪除使用。

下圖是一個分段索引的例子

Kafka的基本概念是什么

這套機(jī)制是建立在offset是有序的;索引文件被映射到內(nèi)存中,所以查找的速度還是很快的。一句話,Kafka的Message存儲采用了分區(qū)(Parition)、分段(segment)和稀疏索引這幾個手段來達(dá)到高效發(fā)布和隨機(jī)讀取。

5、消費端設(shè)計

出于性能、容災(zāi)方面的考慮,實際需求是有多Consumer消費一個Topic的情況;由于多個Consumer之間是相互獨立的,可以采用競爭Parition上崗的方式進(jìn)行消費,同一個時刻只有一個Consumer在消費一個Parition,多個Consumer之間定期同步offset狀態(tài);如果是需要多通道消費,可以競爭不同的Parition對應(yīng)資源上崗消費。

由于Kafka是按照offset進(jìn)行讀取的,一般的client都封裝成:給定一個起始o(jì)ffset后續(xù)不停的get就可以順序讀取了,沒有消費確認(rèn)的概念,Kafka也不會維護(hù)每個消息、每個Consumer的狀態(tài)。其實實現(xiàn)一套消費確認(rèn)機(jī)制也不難,這需要我們實現(xiàn)一個proxy層,在proxy層保留一個循環(huán)緩沖區(qū),業(yè)務(wù)端消費確認(rèn)后方可從緩沖區(qū)里面移除,如果一段時間沒有確認(rèn),下次來取的時候重復(fù)下發(fā)下去,類似于tcp滑動窗口的概念。

上述就是小編為大家分享的Kafka的基本概念是什么了,如果剛好有類似的疑惑,不妨參照上述分析進(jìn)行理解。如果想知道更多相關(guān)知識,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道。

文章題目:Kafka的基本概念是什么
網(wǎng)頁網(wǎng)址:http://aaarwkj.com/article10/igdhdo.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站排名、網(wǎng)站導(dǎo)航網(wǎng)站設(shè)計、App開發(fā)、品牌網(wǎng)站建設(shè)、網(wǎng)站策劃

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

h5響應(yīng)式網(wǎng)站建設(shè)
99热成人精品热久久| 国产精品一品二区三区在线观看| 伊人欧美一区二区三区| 91免费观看视频高清| 国产精品人成在线观看不卡| 日韩精品欧美视频久久| 国产精品国产三级国产专用| 亚洲国产中文日韩欧美在线| 国产精品一区二区三区四区久久| 欧美精品在线观看不卡一区| 中文字幕日韩精品在线看| 亚洲欧美日韩老汉影院| 开心五月婷婷丁香综合| 欧美色精品人妻在线最新| 中文字幕人妻熟女在线| 1区2区3区精品视频| 麻豆国产传媒片在线观看| av真人青青小草一区二区欧美 | 日本黄网色三级三级三级| 日韩欧美一区二区免费| 久久97精品人人做人人爽| 亚洲国产精品高清久久| 91天美精东果冻麻豆| 熟女人妻丰满视频中文字幕| 午夜福利在线视频观看| 黑丝美女国产精品久久久| 亚洲av香蕉综合一区| 国产精品高清呻吟久久久| 人妻系列少妇人妻偷人| 欧美在线免费黄片视频| 成人午夜在线免费观看| 久久久久久精品妇女| 中文字幕在线感觉av| 激情小说婷婷亚洲综合| 最新国产不卡一区二区| 久久99精品人妻一区二区三区| 亚洲伦理第一页中文字幕| 日韩一级不卡高清视频| 亚洲精品国产av一区二区三区| 国产精品人妻在线av| 日本免费精品人成视频|