您好,登錄后才能下訂單哦!
目錄:
1、kafka簡(jiǎn)介 什么是kafka? 設(shè)計(jì)目標(biāo)是什么?
2、kafka的優(yōu)缺點(diǎn)
3、kafka中專業(yè)術(shù)語(yǔ)解釋說(shuō)明
官方網(wǎng)站: http://kafka.apache.org/intro
kafka中文教程 http://orchome.com/kafka/index
1/ kafka 簡(jiǎn)介
Kafka是最初由Linkedin公司開(kāi)發(fā),是一個(gè)分布式、分區(qū)的、多副本的、多訂閱者,基于zookeeper協(xié)調(diào)的分布式日志系統(tǒng)(也可以當(dāng)做MQ系統(tǒng)),常見(jiàn)可以用于web/nginx日志、訪問(wèn)日志,消息服務(wù)等等,Linkedin于2010年貢獻(xiàn)給了Apache基金會(huì)并成為頂級(jí)開(kāi)源項(xiàng)目。//發(fā)展近十年的項(xiàng)目 目前很成熟了
主要應(yīng)用場(chǎng)景是:日志收集系統(tǒng)和消息系統(tǒng)。
Kafka主要設(shè)計(jì)目標(biāo)如下:
(1)以時(shí)間復(fù)雜度為O(1)的方式提供消息持久化能力,即使對(duì)TB級(jí)以上數(shù)據(jù)也能保證常數(shù)時(shí)間的訪問(wèn)性能。
(2)高吞吐率。即使在非常廉價(jià)的商用機(jī)器上也能做到單機(jī)支持每秒100K條消息的傳輸。
(3)支持Kafka Server間的消息分區(qū),及分布式消費(fèi),同時(shí)保證每個(gè)partition內(nèi)的消息順序傳輸。
(4)同時(shí)支持離線數(shù)據(jù)處理和實(shí)時(shí)數(shù)據(jù)處理。
(5)Scale out:支持在線水平擴(kuò)展
Kafka就是一種發(fā)布-訂閱模式 在發(fā)布-訂閱消息系統(tǒng)中,消息被持久化到一個(gè)topic中。與點(diǎn)對(duì)點(diǎn)消息系統(tǒng)不同的是,消費(fèi)者可以訂閱一個(gè)或多個(gè)topic,消費(fèi)者可以消費(fèi)該topic中所有的數(shù)據(jù),同一條數(shù)據(jù)可以被多個(gè)消費(fèi)者消費(fèi),數(shù)據(jù)被消費(fèi)后不會(huì)立馬刪除。在發(fā)布-訂閱消息系統(tǒng)中,消息的生產(chǎn)者稱為發(fā)布者,消費(fèi)者稱為訂閱者。 // 發(fā)布者發(fā)送到topic的消息,只有訂閱了topic的訂閱者才會(huì)收到消息。
為什么要使用kafka?
1、作為緩存
2、解(系統(tǒng))耦合
3、時(shí)間小于10ms 基本上是一種實(shí)時(shí)的
他能簡(jiǎn)化,我們系統(tǒng)的設(shè)計(jì),提示公司的開(kāi)發(fā)速度,和效率
2/kafka優(yōu)點(diǎn)
1、解耦
//S 系統(tǒng)與 A、B、C 系統(tǒng)緊密耦合。由于需求變動(dòng),A 系統(tǒng)修改了相關(guān)代碼,S 系統(tǒng)也需要調(diào)整 A 相關(guān)的代碼。 過(guò)幾天,C 系統(tǒng)需要?jiǎng)h除,S 緊跟著刪除 C 相關(guān)代碼;又過(guò)了幾天,需要新增 D 系統(tǒng),S 系統(tǒng)又要添加與 D 相關(guān)的代碼;再過(guò)幾天,程序猿瘋了 這樣各個(gè)系統(tǒng)緊密耦合,不利于維護(hù),也不利于擴(kuò)展。現(xiàn)在引入 MQ,A 系統(tǒng)變動(dòng),A 自己修改自己的代碼即可;C 系統(tǒng)刪除,直接取消訂閱;D 系統(tǒng)新增,訂閱相關(guān)消息即可。這樣通過(guò)引入消息中間件,使各個(gè)系統(tǒng)都與 MQ 交互,從而避免它們之間的錯(cuò)綜復(fù)雜的調(diào)用關(guān)系。
2、冗余(副本)
//有些情況下,處理數(shù)據(jù)的過(guò)程會(huì)失敗。除非數(shù)據(jù)被持久化,否則將造成丟失。消息隊(duì)列把數(shù)據(jù)進(jìn)行持久化直到它們已經(jīng)被完全處理,通過(guò)這一方式規(guī)避了數(shù)據(jù)丟失風(fēng)險(xiǎn)。許多消息隊(duì)列所采用的"插入-獲取-刪除"范式中,在把一個(gè)消息從隊(duì)列中刪除之前,需要你的處理系統(tǒng)明確的指出該消息已經(jīng)被處理完畢,從而確保你的數(shù)據(jù)被安全的保存直到你使用完畢。
3、擴(kuò)展性
//因?yàn)橄㈥?duì)列解耦了你的處理過(guò)程,所以增大消息入隊(duì)和處理的頻率是很容易的,只要另外增加處理過(guò)程即可。不需要改變代碼、不需要調(diào)節(jié)參數(shù)。擴(kuò)展就像調(diào)大電力按鈕一樣簡(jiǎn)單。
4、靈活性&峰值處理能力(削峰)
//數(shù)據(jù)庫(kù)的處理能力是有限的,在峰值期,過(guò)多的請(qǐng)求落到后臺(tái),一旦超過(guò)系統(tǒng)的處理能力,可能會(huì)使系統(tǒng)掛掉。 系統(tǒng)的處理能力是 2k/s,MQ 處理能力是 8k/s,峰值請(qǐng)求 5k/s,MQ 的處理能力遠(yuǎn)遠(yuǎn)大于數(shù)據(jù)庫(kù),在高峰期,請(qǐng)求可以先積壓在 MQ 中,系統(tǒng)可以根據(jù)自身的處理能力以 2k/s 的速度消費(fèi)這些請(qǐng)求。這樣等高峰期一過(guò),請(qǐng)求可能只有 100/s,系統(tǒng)可以很快的消費(fèi)掉積壓在 MQ 中的請(qǐng)求。
5、可恢復(fù)性
//系統(tǒng)的一部分組件失效時(shí),不會(huì)影響到整個(gè)系統(tǒng)。消息隊(duì)列降低了進(jìn)程間的耦合度,所以即使一個(gè)處理消息的進(jìn)程掛掉,加入隊(duì)列中的消息仍然可以在系統(tǒng)恢復(fù)后被處理。
6、順序保證
//在大多使用場(chǎng)景下,數(shù)據(jù)處理的順序都很重要。大部分消息隊(duì)列本來(lái)就是排序的,并且能保證數(shù)據(jù)會(huì)按照特定的順序來(lái)處理。Kafka保證一個(gè)Partition內(nèi)的消息的有序性。
7、緩沖
//在任何重要的系統(tǒng)中,都會(huì)有需要不同的處理時(shí)間的元素。例如,加載一張圖片比應(yīng)用過(guò)濾器花費(fèi)更少的時(shí)間。消息隊(duì)列通過(guò)一個(gè)緩沖層來(lái)幫助任務(wù)最高效率的執(zhí)行———寫(xiě)入隊(duì)列的處理會(huì)盡可能的快速。該緩沖有助于控制和優(yōu)化數(shù)據(jù)流經(jīng)過(guò)系統(tǒng)的速度。 在用戶請(qǐng)求和數(shù)據(jù)庫(kù)之間 MQ起到很大到緩沖作用 在削峰上有很大到體現(xiàn)
8、異步通信
//很多時(shí)候,用戶不想也不需要立即處理消息。消息隊(duì)列提供了異步處理機(jī)制,允許用戶把一個(gè)消息放入隊(duì)列,但并不立即處理它。想向隊(duì)列中放入多少消息就放多少,然后在需要的時(shí)候再去處理它們。
優(yōu)點(diǎn)小結(jié):
1、單機(jī)吞吐量:
10萬(wàn)級(jí)別,這是kafka最大的優(yōu)勢(shì),就是他的吞吐量高,一般配合大數(shù)據(jù)類的系統(tǒng)來(lái)進(jìn)行實(shí)施數(shù)據(jù)計(jì)算,日志采集等場(chǎng)景
2、topic數(shù)據(jù)對(duì)吞吐量的影響:
topic從幾十個(gè)到上百個(gè)不等,但是topic越多,會(huì)很大程度的影響吞吐量,所以在同等機(jī)器下,kafka經(jīng)量保證topic數(shù)量不要過(guò)度。如果要支撐大規(guī)模的topic的話,需要增加更多的集群資源。
3、時(shí)效性:
延遲控制在ms以內(nèi)
4、可用性:
非常高,kafka是分布是的,一個(gè)數(shù)據(jù)多個(gè)副本,少數(shù)機(jī)器的宕機(jī),不會(huì)丟數(shù)據(jù),不會(huì)導(dǎo)致不可用
5、消息可靠性
經(jīng)過(guò)參數(shù)優(yōu)化配置,消息可以做到0丟失
6、功能支持
功能較為簡(jiǎn)單,主要支持簡(jiǎn)單的MQ功能,在大數(shù)據(jù)領(lǐng)域的實(shí)時(shí)計(jì)算以及日志采集被大規(guī)模使用,是事實(shí)上的標(biāo)準(zhǔn)
優(yōu)劣勢(shì)總結(jié)
kafka的特點(diǎn)其實(shí)很明顯,就是僅僅提供較少的核心功能,但是提供較高的吞吐量,ms級(jí)別的延遲,較高的可用性以及可靠性,而且是分布式的,可以任意的擴(kuò)展,同時(shí)kafka也是做好的是支撐少量的topic數(shù)量即可,保證其吞吐量,而且kafka唯一的一點(diǎn)劣勢(shì)就是可能出現(xiàn)就消息的重復(fù)消費(fèi)(為什么會(huì)出現(xiàn)消息到重復(fù)消費(fèi),見(jiàn)后期博客內(nèi)容),那么對(duì)數(shù)據(jù)準(zhǔn)確性會(huì)產(chǎn)生影響,在大數(shù)據(jù)領(lǐng)域中以及日志收集中,這點(diǎn)輕微可以忽略。 kafka的特性就是天然適合大數(shù)據(jù)實(shí)時(shí)計(jì)算以及日志的收集。
3/kafka中專業(yè)術(shù)語(yǔ)解釋說(shuō)明(相關(guān)概念)
在深入理解kafka之前,有必要先了解和弄懂kafka中會(huì)出現(xiàn)到的相關(guān)術(shù)語(yǔ)概念:
1、Broker:Kafka 集群中包含的服務(wù)器。
//一個(gè)安裝kafka的服務(wù)器節(jié)點(diǎn) Kafka 集群包含一個(gè)或多個(gè)服務(wù)器,服務(wù)器節(jié)點(diǎn)稱為broker。
broker存儲(chǔ)topic的數(shù)據(jù)。如果某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ù)不均衡。
比如我們有5個(gè)broker節(jié)點(diǎn) 那么盡量創(chuàng)建的topic的partition分區(qū)個(gè)數(shù)為5的倍數(shù) 10 20 30... 50都可以 這樣可以讓kafka的數(shù)據(jù)均勻分布
2、Producer:消息生產(chǎn)者。
//生產(chǎn)者即數(shù)據(jù)的發(fā)布者,該角色將消息發(fā)布到Kafka的topic中。broker接收到生產(chǎn)者發(fā)送的消息后,broker將該消息追加到當(dāng)前用于追加數(shù)據(jù)的segment文件中。生產(chǎn)者發(fā)送的消息,存儲(chǔ)到一個(gè)partition中,生產(chǎn)者也可以指定數(shù)據(jù)存儲(chǔ)的partition。
3、Consumer:消息消費(fèi)者。
//消費(fèi)者可以從broker中讀取數(shù)據(jù)。消費(fèi)者可以消費(fèi)多個(gè)topic中的數(shù)據(jù)。
4、Consumer Group:每個(gè) Consumer 都屬于一個(gè) Consumer Group,每條消息只能被 Consumer Group 中的一個(gè) Consumer 消費(fèi),但可以被多個(gè) Consumer Group 消費(fèi)。
//每個(gè)Consumer屬于一個(gè)特定的Consumer Group(可為每個(gè)Consumer指定group name,若不指定group name則屬于默認(rèn)的group)。
5、Topic:消息的類別。每條消息都屬于某個(gè) Topic,不同的 Topic 之間是相互獨(dú)立的,即 Kafka 是面向 Topic 的。
//每條發(fā)布到Kafka集群的消息都有一個(gè)類別,這個(gè)類別被稱為Topic。(物理上不同Topic的消息分開(kāi)存儲(chǔ),邏輯上一個(gè)Topic的消息雖然保存于一個(gè)或多個(gè)broker上但用戶只需指定消息的Topic即可生產(chǎn)或消費(fèi)數(shù)據(jù)而不必關(guān)心數(shù)據(jù)存于何處) 類似于數(shù)據(jù)庫(kù)的表名
6、Partition:每個(gè) Topic 分為多個(gè) Partition,Partition 是 Kafka 分配的單位。Kafka 物理上的概念,相當(dāng)于一個(gè)目錄,目錄下的日志文件構(gòu)成這個(gè) Partition。
//topic中的數(shù)據(jù)分割為一個(gè)或多個(gè)partition。每個(gè)topic至少有一個(gè)partition。每個(gè)partition中的數(shù)據(jù)使用多個(gè)segment文件存儲(chǔ)。partition中的數(shù)據(jù)是有序的,不同partition間的數(shù)據(jù)丟失了數(shù)據(jù)的順序。如果topic有多個(gè)partition,消費(fèi)數(shù)據(jù)時(shí)就不能保證數(shù)據(jù)的順序。在需要嚴(yán)格保證消息的消費(fèi)順序的場(chǎng)景下,需要將partition數(shù)目設(shè)為1。
7、Replica:Partition 的副本,保障 Partition 的高可用。
//每個(gè)topic將被分成多個(gè)partition(區(qū)),此外kafka還可以配置partitions需要備份的個(gè)數(shù)(replicas)
8、Leader:Replica 中的一個(gè)角色, Producer 和 Consumer 只跟 Leader 交互。
//每個(gè)partition有多個(gè)副本,其中有且僅有一個(gè)作為L(zhǎng)eader,Leader是當(dāng)前負(fù)責(zé)數(shù)據(jù)的讀寫(xiě)的partition。
9、Follower:Replica 中的一個(gè)角色,從 Leader 中復(fù)制數(shù)據(jù)。
//Follower跟隨Leader,所有寫(xiě)請(qǐng)求都通過(guò)Leader路由,數(shù)據(jù)變更會(huì)廣播給所有Follower,F(xiàn)ollower與Leader保持?jǐn)?shù)據(jù)同步。如果Leader失效,則從Follower中選舉出一個(gè)新的Leader。當(dāng)Follower與Leader掛掉、卡住或者同步太慢,leader會(huì)把這個(gè)follower從“in sync replicas”(ISR)列表中刪除,重新創(chuàng)建一個(gè)Follower。
基于replicated方案,那么就意味著需要對(duì)多個(gè)備份進(jìn)行調(diào)度;每個(gè)partition都有一個(gè)server為"leader";leader負(fù)責(zé)所有的讀寫(xiě)操作,如果leader失效,那么將會(huì)有其他follower來(lái)接管(成為新的leader);follower只是單調(diào)的和leader跟進(jìn),同步消息即可..由此可見(jiàn)作為leader的server承載了全部的請(qǐng)求壓力,因此從集群的整體考慮,有多少個(gè)partitions就意味著有多少個(gè)"leader",kafka會(huì)將"leader"均衡的分散在每個(gè)實(shí)例上,來(lái)確保整體的性能穩(wěn)定.
其中partition leader的位置(host:port)注冊(cè)在zookeeper中
10、Controller(調(diào)節(jié)器):Kafka 集群中的其中一個(gè)服務(wù)器,用來(lái)進(jìn)行 Leader Election(leader 選舉) 以及各種 Failover(故障轉(zhuǎn)移)。
//Controller(調(diào)節(jié)器) 節(jié)點(diǎn)都分片在 zk中記載 在哪個(gè)broker節(jié)點(diǎn)上 以及 controller 創(chuàng)建的時(shí)間 //查看方式 get /kafkagroup/controller
11、Zookeeper:Kafka 通過(guò) Zookeeper 來(lái)存儲(chǔ)集群的 Meta 信息。(問(wèn)題:kafka的哪些元數(shù)據(jù)信息在zk中,見(jiàn)后期博客)
12、Coordinator:類似 Broker 中選了一個(gè) Controller 出來(lái),消費(fèi)也要從 Broker 中選一個(gè) Coordinator,用于分配 Partition。
————————————————————————————————————————————————————————————————————————————————————————————————————————————————
參考鏈接:
kafka基本原理重要概念優(yōu)缺點(diǎn) https://blog.51cto.com/12445535/2353399
架構(gòu)成長(zhǎng)之路:Kafka設(shè)計(jì)原理看了又忘,忘了又看?一文讓你掌握 https://www.toutiao.com/i6714606866355192328/
Kafka學(xué)習(xí)之路 (一)Kafka的簡(jiǎn)介 https://www.cnblogs.com/qingyunzong/p/9004509.html
消息隊(duì)列kafka特性 https://blog.csdn.net/qq_36236890/article/details/81174504
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。