亚洲精品久久久久久第一页-人妻少妇精彩视品一区二区三区-91国产自拍免费视频-免费一级a在线播放视频正片-少妇天天日天天射天天爽-国产大屁股喷水视频在线观看-操美女骚穴抽插性爱视频-亚洲 欧美 中文字幕 丝袜-成人免费无码片在线观看

史上最全的kafka知識(shí)解析 kafka作用是什么( 二 )


每一個(gè)Topic的信息被切分為多個(gè)Partitions 。若Partition數(shù)量設(shè)置成1個(gè) , 則可以保證消息消費(fèi)的順序性 。如果某Topic有N個(gè)Partition , 集群有N個(gè)Broker , 那么每個(gè)Broker存儲(chǔ)該topic的一個(gè)Partition 。如果某Topic有N個(gè)Partition , 集群有(N+M)個(gè)Broker , 那么其中有N個(gè)Broker存儲(chǔ)該Topic的一個(gè)Partition , 剩下的M個(gè)Broker不存儲(chǔ)該Topic的Partition數(shù)據(jù) 。如果某Topic有N個(gè)Partition , 集群中Broker數(shù)目少于N個(gè) , 那么一個(gè)Broker存儲(chǔ)該Topic的一個(gè)或多個(gè)Partition 。在實(shí)際生產(chǎn)環(huán)境中 , 盡量避免這種情況的發(fā)生 , 這種情況容易導(dǎo)致Kafka集群數(shù)據(jù)不均衡 。當(dāng)Broker收到消息 , 根據(jù)分區(qū)算法選擇將其存儲(chǔ)到哪一個(gè) Partition 。其路由機(jī)制為優(yōu)先按照指定Partition來路由;若未指定patition但指定key , 則通過對(duì)key的value進(jìn)行hash選出一個(gè)patition;如果patition和key都未指定 , 則輪詢選出一個(gè)patition 。
Offset:偏移量 , 分區(qū)中的消息位置 , 由Kafka自身維護(hù) , Consumer消費(fèi)時(shí)也要保存一份Offset以維護(hù)消費(fèi)過的消息位置 。Replication:同一個(gè)Partition可能會(huì)有多個(gè)副本 , 多個(gè)副本之間數(shù)據(jù)是一樣的 , 增加容錯(cuò)性與可擴(kuò)展性 。注:
當(dāng)集群中的有Broker掛掉的情況 , 系統(tǒng)可以主動(dòng)的使用Replication提供服務(wù) 。系統(tǒng)默認(rèn)設(shè)置每一個(gè)Topic的Replication系數(shù)為1 , 可以在創(chuàng)建Topic時(shí)單獨(dú)設(shè)置 。Replication的基本單位是Topic的Partition 。所有的讀和寫都由Leader進(jìn) , Followers只是做為數(shù)據(jù)的備份 。Follower必須能夠及時(shí)復(fù)制Leader的數(shù)據(jù) 。
Replication Leader:一個(gè)Partition的多個(gè)副本上 , 需要一個(gè)Leader負(fù)責(zé)該P(yáng)artition上與Producer和Consumer交互 。一個(gè)Partition只對(duì)應(yīng)一個(gè)Replication Leader 。Replication Follower:Follower跟隨Leader , 所有寫請(qǐng)求都會(huì)廣播給所有Follower , Follower與Leader保持?jǐn)?shù)據(jù)同步 。ReplicaManager:負(fù)責(zé)管理當(dāng)前Broker所有分區(qū)和副本的信息 , 處理KafkaController發(fā)起的一些請(qǐng)求 , 副本狀態(tài)的切換、添加/讀取消息等 。Rebalance 。消費(fèi)者組內(nèi)某個(gè)消費(fèi)者實(shí)例掛掉后 , 其他消費(fèi)者實(shí)例自動(dòng)重新分配訂閱主題分區(qū)的過程 。Rebalance是Kafka消費(fèi)者端實(shí)現(xiàn)高可用的重要手段 。Kafka通過Zookeeper管理集群配置 , 選舉Leader , 以及在Consumer Group發(fā)生變化時(shí)進(jìn)行Rebalance 。
Kafka的復(fù)制機(jī)制如何將所有Replication均勻分布到整個(gè)集群為了更好的做負(fù)載均衡 , Kafka盡量將所有的Partition均勻分配到整個(gè)集群上 。一個(gè)典型的部署方式是一個(gè)Topic的Partition數(shù)量大于Broker的數(shù)量 。同時(shí)為了提高Kafka的容錯(cuò)能力 , 也需要將同一個(gè)Partition的Replication盡量分散到不同的機(jī)器 。如果所有的Replication都在同一個(gè)Broker上 , 那一旦該Broker宕機(jī) , 該P(yáng)artition的所有Replication都無法工作 , 也就達(dá)不到HA的效果 。同時(shí) , 如果某個(gè)Broker宕機(jī)了 , 需要保證它上面的負(fù)載可以被均勻的分配到其它幸存的所有Broker上 。
Kafka分配Replication的算法如下:
將所有Broker(假設(shè)共n個(gè)Broker)和待分配的Partition排序 。將第i個(gè)Partition分配到第(i % n)個(gè)Broker上 。將第i個(gè)Partition的第j個(gè)Replication分配到第((i + j) % n)個(gè)Broker上 。HW高水位與LEOHW是High Watermark的縮寫 , 俗稱高水位 , 它標(biāo)識(shí)了一個(gè)特定的消息偏移量(Offset) , 消費(fèi)者只能拉取到這個(gè)Offset之前的消息 。
如圖所示 , 它代表一個(gè)日志文件 , 這個(gè)日志文件中有 9 條消息 , 第一條消息的Offset(LogStartOffset)為0 , 最后一條消息的Offset為8 , Offset為9的消息用虛線框表示 , 代表下一條待寫入的消息 。日志文件的HW為6 , 表示消費(fèi)者只能拉取到Offset在0至5之間的消息 , 而Offset為6的消息對(duì)消費(fèi)者而言是不可見的 。


以上關(guān)于本文的內(nèi)容,僅作參考!溫馨提示:如遇健康、疾病相關(guān)的問題,請(qǐng)您及時(shí)就醫(yī)或請(qǐng)專業(yè)人士給予相關(guān)指導(dǎo)!

「愛刨根生活網(wǎng)」www.malaban59.cn小編還為您精選了以下內(nèi)容,希望對(duì)您有所幫助: