超全的Kafka知識(shí)點(diǎn)總結(jié)(建議收藏!)
前段時(shí)間寫了Kafka快速入門系列1-8,但苦于知識(shí)點(diǎn)非常繁瑣,對(duì)于很多初級(jí)選手來(lái)說(shuō)并不友好,因此博主又根據(jù)所學(xué),整理了一份關(guān)于
Kafka知識(shí)點(diǎn)總結(jié)
,希望對(duì)大家的學(xué)習(xí)有所幫助(?ω?)
碼字不易,先贊后看!
文章目錄
1. 什么是Kafka
2. Kafka的使用場(chǎng)景
3. Kafka優(yōu)缺點(diǎn)
4. Kafka架構(gòu)(流程)
5. Kafka架構(gòu)(API)
6.Topic內(nèi)部有哪些組成?
7.分區(qū)和消費(fèi)組內(nèi)的消費(fèi)者之間的關(guān)系有哪些情況?
8. 分區(qū)數(shù)、消費(fèi)者與讀取效率之間的關(guān)系
9. 副本數(shù)與broker之間的關(guān)系
10. 什么是主/從副本
11. 主/從復(fù)本的作用是什么
12. Isr是什么
13. 生產(chǎn)者生產(chǎn)數(shù)據(jù)到kafka集群,數(shù)據(jù)到分區(qū)的方式
14. Consumer消費(fèi)數(shù)據(jù)的流程
15. Kafka中的數(shù)據(jù)刪除機(jī)制是什么?
16. Kafka如何保證數(shù)據(jù)不丟失
17. Kafka高性能的原因有哪里
18. Kafka高效查詢數(shù)據(jù)的有哪些原因
19. 如何從Kafka得到準(zhǔn)確的信息(不是重讀數(shù)據(jù))?
20. Kafka的設(shè)計(jì)是什么樣的呢?
21. 數(shù)據(jù)傳輸?shù)氖挛锒x有哪三種?
22. Kafka判斷一個(gè)節(jié)點(diǎn)是否還活著有哪些條件?
23. Kafka 與傳統(tǒng)消息系統(tǒng)之間有哪些區(qū)別?
24. Kafka創(chuàng)建Topic時(shí)將分區(qū)放置到不同的Broker的策略是什么?
25. Kafka新建的分區(qū)會(huì)在哪個(gè)目錄下創(chuàng)建
26. partition的數(shù)據(jù)如何保存到硬盤
27. kafka的ack機(jī)制
28. Kafka的消費(fèi)者如何消費(fèi)數(shù)據(jù)
29. 如何使kafka集群內(nèi)的數(shù)據(jù)是有序的?
30. Zookeeper匯總保留了哪些數(shù)據(jù)?
31. kafka consumer 什么情況會(huì)觸發(fā)再平衡reblance?
32、描述下kafka consumer 再平衡步驟?
33. 手動(dòng)提交offset有什么好處??
34. 為什么kafka中的數(shù)據(jù)需要定期刪除或合并?
1. 什么是Kafka
kafka是一個(gè)分布式,分區(qū)的,多副本的,多訂閱者的消息發(fā)布訂閱系統(tǒng)。
2. Kafka的使用場(chǎng)景
應(yīng)用耦合、異步處理、限流削峰、消息驅(qū)動(dòng)的系統(tǒng)。
3. Kafka優(yōu)缺點(diǎn)
優(yōu)點(diǎn):
可靠性強(qiáng)(分布式-分區(qū)-副本)、擴(kuò)展性強(qiáng)(可伸縮)、性能高(數(shù)據(jù)讀寫)、耐用性強(qiáng)(數(shù)據(jù)持久化)、時(shí)效性強(qiáng)。
缺點(diǎn):
由于是批量發(fā)送,數(shù)據(jù)并非真正的實(shí)時(shí)。
僅支持統(tǒng)一分區(qū)內(nèi)消息有序,無(wú)法實(shí)現(xiàn)全局消息有序;
有可能消息重復(fù)消費(fèi);
依賴zookeeper進(jìn)行元數(shù)據(jù)管理。
4. Kafka架構(gòu)(流程)
生產(chǎn)者、kafka集群、消費(fèi)者、zookeeper
5. Kafka架構(gòu)(API)
生產(chǎn)者、消費(fèi)者、StreamAPI、ConnectAPI
6.Topic內(nèi)部有哪些組成?
每個(gè)Topic包含一個(gè)或者多個(gè)Partition,一個(gè)partition當(dāng)中存在多個(gè)segment文件段,每個(gè)segment分為兩部分,.log文件和.index文件。
7.分區(qū)和消費(fèi)組內(nèi)的消費(fèi)者之間的關(guān)系有哪些情況?
Partition = 消費(fèi)任務(wù)的并發(fā)度=剛剛好,每個(gè)任務(wù)讀取一個(gè)partition數(shù)據(jù)
Partition > 消費(fèi)任務(wù)的并發(fā)度=有部分消費(fèi)任務(wù)讀取多個(gè)分區(qū)的數(shù)據(jù)
Partition < 消費(fèi)任務(wù)的并發(fā)度=有部分消費(fèi)任務(wù)空閑(可以創(chuàng)建多于分區(qū)的消費(fèi)者數(shù)量)
8. 分區(qū)數(shù)、消費(fèi)者與讀取效率之間的關(guān)系
分區(qū)數(shù)越多,同一時(shí)間可以有越多的消費(fèi)者來(lái)進(jìn)行消費(fèi),消費(fèi)數(shù)據(jù)的速度就會(huì)越快,提高消費(fèi)的性能
9. 副本數(shù)與broker之間的關(guān)系
數(shù)據(jù)副本(包含本身)數(shù)一般情況下小于等于broker的個(gè)數(shù)
10. 什么是主/從副本
被復(fù)制的分區(qū)叫做主副本(Leader),復(fù)制出來(lái)的叫做從副本(Follower)
11. 主/從復(fù)本的作用是什么
主副本負(fù)責(zé)數(shù)據(jù)的讀寫。
從副本只做數(shù)據(jù)備份,不做數(shù)據(jù)讀寫。
12. Isr是什么
ISR是一組與leaders完全同步的消息副本(包括leaders本身)。
13. 生產(chǎn)者生產(chǎn)數(shù)據(jù)到kafka集群,數(shù)據(jù)到分區(qū)的方式
a)沒有指定分區(qū)編號(hào),沒有指定key時(shí)采用輪詢方式存儲(chǔ)數(shù)據(jù)
b)沒有指定分區(qū)編號(hào),指定key時(shí),數(shù)據(jù)分發(fā)策略為對(duì)key求取hash值,這個(gè)值與分區(qū)數(shù)量取余,余數(shù)就是分區(qū)編號(hào)。
c)指定分區(qū)編號(hào),所有數(shù)據(jù)輸入到指定的分區(qū)內(nèi)
d)自定義分區(qū)
14. Consumer消費(fèi)數(shù)據(jù)的流程
1、首先Consumer連接指定的Topic partition所在leader broker,使用折半/二分查找,先確定數(shù)據(jù)所在的segment。
2、確定在哪個(gè)segment后,使用確定的segment內(nèi)的index文件找到數(shù)據(jù)具體的位置采用pull方式從kafkalogs中獲取消息。
15. Kafka中的數(shù)據(jù)刪除機(jī)制是什么?
1、時(shí)間:默認(rèn)存儲(chǔ)168小時(shí)(一周)
2、數(shù)據(jù)的大小:默認(rèn) -1 (不刪除),可以自行設(shè)置。
16. Kafka如何保證數(shù)據(jù)不丟失
從大體上來(lái)看的話,Kafka中主要的角色有數(shù)據(jù)生產(chǎn)者(Producer),Kafka集群中負(fù)責(zé)存儲(chǔ)數(shù)據(jù)的Broker,數(shù)據(jù)消費(fèi)者(Consumer),因此這個(gè)問題需要從三個(gè)角度來(lái)進(jìn)行回答!
1、生產(chǎn)者如何保證數(shù)據(jù)不丟失?? 通過ack 機(jī)制確保數(shù)據(jù)不丟失。
2、kafka集群如何保證數(shù)據(jù)不丟失?? 通過數(shù)據(jù)副本保證數(shù)據(jù)不丟失。
3、消費(fèi)者如何保證數(shù)據(jù)不丟失?? 通過維護(hù)數(shù)據(jù)的offset 保證數(shù)據(jù)不丟失。
17. Kafka高性能的原因有哪里
順序讀寫、分區(qū)、批量發(fā)送、數(shù)據(jù)壓縮
18. Kafka高效查詢數(shù)據(jù)的有哪些原因
1、Kafka把topic中一個(gè)parition大文件分成多個(gè)小文件段,通過多個(gè)小文件段,就容易定期清除或刪除已經(jīng)消費(fèi)完文件,減少磁盤占用。
2、通過索引信息可以快速定位message和確定response的最大大小。
3、通過index元數(shù)據(jù)全部映射到memory,可以避免segment file的IO磁盤操作。
4、通過索引文件稀疏存儲(chǔ),可以大幅降低index文件元數(shù)據(jù)占用空間大小。
19. 如何從Kafka得到準(zhǔn)確的信息(不是重讀數(shù)據(jù))?
在數(shù)據(jù)生產(chǎn)過程中避免重復(fù)。
在數(shù)據(jù)消耗期間避免重復(fù)。
20. Kafka的設(shè)計(jì)是什么樣的呢?
Kafka將消息以topic為單位進(jìn)行歸納。將向Kafka topic發(fā)布消息的程序成為producers。將預(yù)訂topics并消費(fèi)消息的程序成為consumer。 Kafka以集群的方式運(yùn)行,可以由一個(gè)或多個(gè)服務(wù)組成,每個(gè)服務(wù)叫做一個(gè)broker。producers通過網(wǎng)絡(luò)將消息發(fā)送到Kafka集群,集群向消費(fèi)者提供消息。
21. 數(shù)據(jù)傳輸?shù)氖挛锒x有哪三種?
1、最多一次:消息不會(huì)被重復(fù)發(fā)送,最多被傳輸一次,但也有可能一次不傳輸,可能會(huì)造成數(shù)據(jù)丟失。
2、最少一次: 消息不會(huì)被漏發(fā)送,最少被傳輸一次,但也有可能被重復(fù)傳輸。可能會(huì)造成數(shù)據(jù)的重復(fù)消費(fèi)。
3、精確的一次(Exactly once):不會(huì)漏傳輸也不會(huì)重復(fù)傳輸,每個(gè)消息都傳輸被一次而且僅僅被傳輸一次,這是大家所期望的。
22. Kafka判斷一個(gè)節(jié)點(diǎn)是否還活著有哪些條件?
1、節(jié)點(diǎn)必須可以維護(hù)和ZooKeeper的連接,Zookeeper通過心跳機(jī)制檢查每個(gè)節(jié)點(diǎn)的連接
2、如果節(jié)點(diǎn)是個(gè)follower,他必須能及時(shí)的同步leader的寫操作,延時(shí)不能太久
23. Kafka 與傳統(tǒng)消息系統(tǒng)之間有哪些區(qū)別?
1、Kafka 持久化日志:這些日志可以被重復(fù)讀取和無(wú)限期保留
2、Kafka 是一個(gè)分布式系統(tǒng):它以集群的方式運(yùn)行,可以靈活伸縮,在內(nèi)部通過復(fù)制數(shù)據(jù)提升容錯(cuò)能力和高可用性
3、Kafka 支持實(shí)時(shí)的流式處理
24. Kafka創(chuàng)建Topic時(shí)將分區(qū)放置到不同的Broker的策略是什么?
前提:副本因子不能大于 Broker 的個(gè)數(shù);
第一個(gè)分區(qū)(編號(hào)為0)的第一個(gè)副本放置位置是隨機(jī)從 brokerList 選擇的;
其他分區(qū)的第一個(gè)副本放置位置相對(duì)于第0個(gè)分區(qū)依次往后移。
例如:有5個(gè) Broker,5個(gè)分區(qū),假設(shè)第一個(gè)分區(qū)放在第四個(gè) Broker 上,那么第二個(gè)分區(qū)將會(huì)放在第五個(gè) Broker 上;第三個(gè)分區(qū)將會(huì)放在第一個(gè) Broker 上;第四個(gè)分區(qū)將會(huì)放在第二個(gè) Broker 上,第五個(gè)分區(qū)將會(huì)放在第三個(gè) Broker 上;
25. Kafka新建的分區(qū)會(huì)在哪個(gè)目錄下創(chuàng)建
若 log.dirs 參數(shù)只配置了一個(gè)目錄,那么分配到各個(gè) Broker 上的分區(qū)將在這個(gè)目錄下創(chuàng)建文件夾用于存放數(shù)據(jù)。
若 log.dirs 參數(shù)配置了多個(gè)目錄,那么 Kafka 會(huì)在含有分區(qū)目錄總數(shù)最少的文件夾中創(chuàng)建新的分區(qū)目錄,分區(qū)目錄名為 Topic名+分區(qū)ID。注意(不是磁盤使用量最少的目錄)
26. partition的數(shù)據(jù)如何保存到硬盤
topic中的多個(gè)partition以文件夾的形式保存到broker,每個(gè)分區(qū)序號(hào)從0遞增, 且消息有序 Partition文件下有多個(gè)segment(xxx.index,xxx.log) segment 文件里的 大小和配置文件大小一致可以根據(jù)要求修改 默認(rèn)為1g 如果大小大于1g時(shí),會(huì)滾動(dòng)一個(gè)新的segment并且以上一個(gè)segment最后一條消息的偏移量命名。
27. kafka的ack機(jī)制
request.required.acks有三個(gè)值 0 1 -1
0:生產(chǎn)者不會(huì)等待broker的ack,這個(gè)延遲最低但是存儲(chǔ)的保證最弱當(dāng)server掛掉的時(shí)候就會(huì)丟數(shù)據(jù)
1:服務(wù)端會(huì)等待ack值 leader副本確認(rèn)接收到消息后發(fā)送ack但是如果leader掛掉后它不確保是否復(fù)制完成新leader也會(huì)導(dǎo)致數(shù)據(jù)丟失
-1:同樣在1的基礎(chǔ)上 服務(wù)端會(huì)等所有的follower的副本受到數(shù)據(jù)后才會(huì)受到leader發(fā)出的ack,這樣數(shù)據(jù)不會(huì)丟失
28. Kafka的消費(fèi)者如何消費(fèi)數(shù)據(jù)
消費(fèi)者每次消費(fèi)數(shù)據(jù)的時(shí)候,消費(fèi)者都會(huì)記錄消費(fèi)的物理偏移量(offset)的位置 等到下次消費(fèi)時(shí),他會(huì)接著上次位置繼續(xù)消費(fèi)。同時(shí)也可以按照指定的offset進(jìn)行重新消費(fèi)。
29. 如何使kafka集群內(nèi)的數(shù)據(jù)是有序的?
只創(chuàng)建一個(gè)分區(qū)。(但是實(shí)際這樣會(huì)存在性能問題,具體業(yè)務(wù)具體分析后確認(rèn)。)
30. Zookeeper匯總保留了哪些數(shù)據(jù)?
1、消費(fèi)者提交的偏移量。
2、leader檢測(cè)、分布式同步、配置管理、識(shí)別新節(jié)點(diǎn)何時(shí)離開或連接、集群、節(jié)點(diǎn)實(shí)時(shí)狀態(tài)
3、分區(qū)和消費(fèi)者的所有者關(guān)
4、broker id
31. kafka consumer 什么情況會(huì)觸發(fā)再平衡reblance?
1、一旦消費(fèi)者加入或退出消費(fèi)組,導(dǎo)致消費(fèi)組成員列表發(fā)生變化,消費(fèi)組中的所有消費(fèi)者都要執(zhí)行再平衡。
2、訂閱主題分區(qū)發(fā)生變化,所有消費(fèi)者也都要再平衡。
32、描述下kafka consumer 再平衡步驟?
1、關(guān)閉數(shù)據(jù)拉取線程,清空隊(duì)列和消息流,提交偏移量;
2、釋放分區(qū)所有權(quán),刪除zk中分區(qū)和消費(fèi)者的所有者關(guān)系;
3、將所有分區(qū)重新分配給每個(gè)消費(fèi)者,每個(gè)消費(fèi)者都會(huì)分到不同分區(qū);
4、將分區(qū)對(duì)應(yīng)的消費(fèi)者所有關(guān)系寫入ZK,記錄分區(qū)的所有權(quán)信息;
5、重啟消費(fèi)者拉取線程管理器,管理每個(gè)分區(qū)的拉取線程。
33. 手動(dòng)提交offset有什么好處??
使更新offset更及時(shí),避免因offset更新不及時(shí)導(dǎo)致重復(fù)消費(fèi)數(shù)據(jù)的問題。
34. 為什么kafka中的數(shù)據(jù)需要定期刪除或合并?
Kafka只用于做數(shù)據(jù)的臨時(shí)存儲(chǔ)、臨時(shí)緩沖,不是永久存儲(chǔ)(永久性存儲(chǔ)使用HDFS)。
本次的分享內(nèi)容到這里就結(jié)束了,關(guān)于上面的內(nèi)容部分用
紅色
注明的在這里解釋一下。黑色的是最最基礎(chǔ),必須要求掌握的,
紅色
標(biāo)記的部分是知識(shí)拓展,大家在理解層面上知曉即可…如果本篇對(duì)你有幫助,不要忘了加關(guān)注喲|??ω?` )
Kafka ZooKeeper
版權(quán)聲明:本文內(nèi)容由網(wǎng)絡(luò)用戶投稿,版權(quán)歸原作者所有,本站不擁有其著作權(quán),亦不承擔(dān)相應(yīng)法律責(zé)任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實(shí)的內(nèi)容,請(qǐng)聯(lián)系我們jiasou666@gmail.com 處理,核實(shí)后本網(wǎng)站將在24小時(shí)內(nèi)刪除侵權(quán)內(nèi)容。