Kafka都有哪些重要知識點(diǎn),如有遺漏歡迎補(bǔ)充
????最近梳理了一遍Kafka的重要知識點(diǎn),供有面試需求的小伙伴們使用。注意:由于本人只是一個(gè)初級Java開發(fā),因此這篇小短文僅供初級Java工程師以及應(yīng)屆生使用,大佬請直接劃走。如果某些大佬不介意的話,歡迎補(bǔ)充一些知識點(diǎn)或指正一些錯(cuò)誤,感謝感謝。
一 概述
為什么會誕生消息系統(tǒng),Kafka、Pulsar、RocketMQ、ActiveMQ和RabbitMQ的優(yōu)劣和技術(shù)選型。
在當(dāng)前的大數(shù)據(jù)架構(gòu)中(離線數(shù)倉、實(shí)時(shí)數(shù)倉以及湖倉一體化架構(gòu)),Kafka扮演什么樣的角色。
圖文演示Kafka都有哪些核心組件,Kafka的總體工作流程是什么樣的。
該如何正確理解 Kafka 的端到端的延時(shí),哪些延遲是避免不了的。
二 Broker端
Kafka如何利用磁盤的順序?qū)憴C(jī)制,實(shí)現(xiàn)單機(jī)每秒幾十萬消息寫入。
Kafka是如何利用零拷貝機(jī)制消費(fèi)數(shù)據(jù)的,零拷貝的原理是什么?
從操作系統(tǒng)底層深入講解IO中斷,Kafka消費(fèi)數(shù)據(jù)時(shí)為什么要在內(nèi)核端處理。
Kafka如何借用PageCache技術(shù)實(shí)現(xiàn)高吞吐,什么是吞吐量和處理延遲,Kafka如何做到高吞吐和低延遲。
Kafka的PageCache污染是怎么回事,PageCache該設(shè)置多大才合適。
Kafka如何利用零拷貝和頁緩存技術(shù),實(shí)現(xiàn)高性能的消費(fèi)數(shù)據(jù)。
Kafka底層的日志(log)文件的存儲機(jī)制是什么,如何存儲offset,Log文件的分段存儲機(jī)制是什么。
為什么說Kafka自身的日志格式能夠節(jié)省磁盤空間的開銷。
Kafka為什么能夠做到TB量級的數(shù)據(jù),在分布式系統(tǒng)中均勻分配。
如何基于多副本冗余機(jī)制,保證Kafka具有高可用性。
為保證Kafka數(shù)據(jù)不丟失,引入的ISR機(jī)制到達(dá)是什么意思。
基于Zookeeper構(gòu)建的Kafka無狀態(tài)自由伸縮技術(shù)的實(shí)現(xiàn)原理是什么。
基于KRaft構(gòu)建的Kafka無狀態(tài)自由伸縮技術(shù)的實(shí)現(xiàn)原理是什么。
為什么越來越多的分布式系統(tǒng),包括Kafka都在去Zookeeper。
如何讓Kafka集群,在處理數(shù)據(jù)請求的時(shí)候?qū)崿F(xiàn)負(fù)載均衡的效果。
Kafka集群如何基于Zookeeper實(shí)現(xiàn)節(jié)點(diǎn)發(fā)現(xiàn)與故障感知的。
Kafka集群如何基于KRaft實(shí)現(xiàn)節(jié)點(diǎn)發(fā)現(xiàn)與故障感知的。
Kafka的ISR機(jī)制,如何保證Leader分區(qū)副本宕機(jī)時(shí)只能選擇同步的Follower分區(qū)副本。
你真的了解Partition的幾個(gè)核心offset的含義嗎?HW、LEO是什么,如何基于LEO計(jì)算HW。
深入探究Leader和Follower的LEO的更新機(jī)制、HW的更新機(jī)制。
即使有HW機(jī)制,在切換Leader分區(qū)副本時(shí),為什么會丟失數(shù)據(jù)。
Kafka 0.11版本引入leader epoch機(jī)制,如何解決高水位機(jī)制存在的弊端。
indexFile和Timestamp文件的存儲機(jī)制是什么?如何利用二分查找法快速定位數(shù)據(jù)。
硬盤上的日志文件是基于什么樣的策略,做定期刪除騰挪空間的。
Kafka是如何自定義TCP之上的通信協(xié)議以及使用長連接通信的。
Broker是如何基于Reactor模式,進(jìn)行IO多路轉(zhuǎn)接請求處理數(shù)據(jù)的。
Kafka的Controller是什么?如何基于Zookeeper選舉Controller,Container的故障轉(zhuǎn)移是如何實(shí)現(xiàn)的。
如何基于KRaft一致性算法,實(shí)現(xiàn)Kafka的Controller選舉以及故障轉(zhuǎn)移。
在創(chuàng)建Topic時(shí),Kafka Controller是如何實(shí)現(xiàn)Leader分區(qū)副本選舉的。
在刪除Topic的時(shí)候,如何基于Controller做數(shù)據(jù)的清理工作。
Kafka Controller是如何基于Zookeeper感知Broker上線或者下線的。
Kafka Controller是如何基于KRaft感知Broker上線或者下線的。
Kafka自身的生態(tài)系統(tǒng)都有哪些內(nèi)容,KSQL或者Kafka Streaming能否替代Flink的實(shí)時(shí)計(jì)算框架地位?
如果線上Kafka的某個(gè)topic數(shù)據(jù)量很大,該如何增加分區(qū)數(shù)量,要考慮哪些因素。
對核心業(yè)務(wù)數(shù)據(jù)Topic需要動態(tài)增加副本因子,該如何操作,需要注意哪些問題。
Kafka集群的Topic分區(qū)分布分配機(jī)制是什么樣的
為保證線上數(shù)據(jù)安全,該如何監(jiān)控Leader、Follower 和 In-Sync Replica(ISR),如何配置ISR列表。
Kafka的ISR是如何伸縮,如何廣播ISR列表。
前任Leader副本恢復(fù),F(xiàn)ollower副本被踢出ISR列表會發(fā)生什么。
Kafka用到的PageCache的預(yù)讀和順序讀機(jī)制是怎么回事?
如果某臺broker機(jī)器承載了過多l(xiāng)eader分區(qū)副本,該如何處理。
Kafka的內(nèi)部通信原理是什么樣的。
Kafka如何通過緩沖池優(yōu)化JVM GC。
Kafka的批量發(fā)送消息和日志存儲模式
三 生產(chǎn)者
Kafka Producer怎么把消息發(fā)送給Broker集群的,負(fù)責(zé)IO請求的Sender線程是如何基于緩沖區(qū)發(fā)送數(shù)據(jù)的。
Kafka的生產(chǎn)者發(fā)送消息也會阻塞嗎,當(dāng)消息緩沖區(qū)滿的時(shí)候會拋出異常嗎。
Kafka可以同時(shí)接受有幾個(gè)發(fā)送到Broker的請求沒收到響應(yīng)。
Producer的緩沖區(qū)內(nèi)部數(shù)據(jù)結(jié)構(gòu)是什么樣的。
Kafka在發(fā)送消息時(shí),acks參數(shù)到底是干嘛的,acks等于0、1、-1有哪些優(yōu)勢和不足。
Kafka在發(fā)送消息時(shí),該如何設(shè)置最小同步副本的數(shù)量。
Kafka生產(chǎn)者的Sticky分區(qū)方式有哪些優(yōu)勢。
Kafka生產(chǎn)消息為什么快之PageCache。
Kafka生產(chǎn)消息為什么快之順序?qū)?/span>
RecordAccumulator的tryAppend()的工作原理是什么。
發(fā)送消息給Broker時(shí)遇到的各種異常該如何處理。
發(fā)送消息的緩沖區(qū),batch.size,linger.ms應(yīng)該如何優(yōu)化來提升發(fā)送的吞吐量。
如何根據(jù)業(yè)務(wù)場景對消息大小以及請求超時(shí),設(shè)置成一個(gè)合理的參數(shù)值。
Kafka在發(fā)送消息時(shí),針對瞬間異常的消息重試參數(shù),需要考慮哪些因素。
Kafka生產(chǎn)者自定義分區(qū)、序列化和攔截器的必要性以及注意事項(xiàng)。
四 消費(fèi)者
Kafka的Consumer是如何持續(xù)消費(fèi)的,如何從Kafka集群獲取消息的。
Kafka的消費(fèi)者重啟后繼續(xù)消費(fèi)原理。
Kafka的消費(fèi)者offset的記錄方式以及基于內(nèi)部topic的提交模式。
Kafka通過哪三個(gè)參數(shù)感知消費(fèi)者發(fā)生故障。
Kafka在消費(fèi)數(shù)據(jù)時(shí),有哪幾個(gè)參數(shù)需要注意以及該如何設(shè)置。
如果對消費(fèi)者offset相關(guān)的參數(shù),設(shè)置不好對線上系統(tǒng)產(chǎn)生哪些影響。
消費(fèi)者更新__consumer_offsets時(shí),需要更新哪些內(nèi)存結(jié)構(gòu),以及
Kafka如何做到精準(zhǔn)一次性消費(fèi)數(shù)據(jù)。
如何保證Kafka消費(fèi)數(shù)據(jù)的可靠性。
Kafka自動提交offset造成數(shù)據(jù)重復(fù)和丟失的場景有哪些?為什么要改成手動提交offset。
Kafka的Consumer Group消費(fèi)數(shù)據(jù)的優(yōu)勢。
如何實(shí)現(xiàn)Consumer Group的狀態(tài)機(jī)流轉(zhuǎn),狀態(tài)機(jī)是什么意思。
Kafka的Group Coordinator是怎么工作的,主要負(fù)責(zé)什么,消費(fèi)者選擇Coordinator的算法是如何實(shí)現(xiàn)的。
Coordinator和Consume Leader如何協(xié)作制定分區(qū)方案。
Kafka消費(fèi)者組的RangeAssignor分區(qū)分配策略是什么?
Kafka消費(fèi)者組的RoundRobin分區(qū)分配策略是什么?解決了什么問題有哪些弊端。
Kafka消費(fèi)者組的StickyAssignor分區(qū)分配策略是什么?解決了什么問題有哪些弊端。
Kafka在發(fā)生Rebalance時(shí),CooperativeStickyAssignor有哪些改良。
Kafka最新設(shè)計(jì)的rebalance分代機(jī)制有哪些作用。
配置Kafka靜態(tài)的Group 成員,避免不必要的Rebalance。
在哪些場景下會觸發(fā)Consumer Group的Rebalance
消費(fèi)者組的4個(gè)消費(fèi)者,消費(fèi)topic的3個(gè)分區(qū),再增加一個(gè)消費(fèi)者,會發(fā)生Rebalance嗎
發(fā)生Consumer的Rebalance有什么后果。
Kafka消費(fèi)者組的工作原理、Rebalance和Failover
Kafka的數(shù)據(jù)多副本、高可用性,acks、最小副本數(shù)。
當(dāng)Kafka集群線上有大量消息積壓時(shí),該如何處理。
當(dāng)線上Kafka集群有大量消息積壓時(shí),如何加快消費(fèi)速度。
使用消息隊(duì)列時(shí),如何確保消息的有序性。
該如何做到并行并且順序消費(fèi)Kafka的數(shù)據(jù)。
如何做到高并發(fā)、高吞吐的消費(fèi)Kafka中數(shù)據(jù)
Kafka在哪些場景會出現(xiàn)重復(fù)消費(fèi),該如何處理。
Kafka如何支持點(diǎn)對點(diǎn)模式和發(fā)布訂閱模式。
Kafka消費(fèi)數(shù)據(jù)為什么快之 - mmap技術(shù)。
Kafka消費(fèi)數(shù)據(jù)為什么會快之sendfile技術(shù)。
Kafka的生產(chǎn)和消費(fèi)數(shù)據(jù)為什么快。
Kafka生產(chǎn)消息為什么快之順序讀。
在使用Kafka做消息隊(duì)列的時(shí)候,為什么會丟失數(shù)據(jù)。
如何測試Kafka集群的生產(chǎn)和消費(fèi)的吞吐量。
什么是Kafka的冪等性,Kafka的事務(wù)數(shù)據(jù)一致性是什么,如何配合分布式事務(wù)實(shí)現(xiàn)消息的事務(wù)支持。
消費(fèi)服務(wù)故障場景下的重試隊(duì)列該如何實(shí)現(xiàn),如何保證消費(fèi)數(shù)據(jù)不重復(fù),不丟失。
消費(fèi)者的故障感知機(jī)制是什么,有哪些核心參數(shù)、心跳參數(shù)、會話超時(shí)以及監(jiān)控消費(fèi)過慢機(jī)制是什么。
五 KRaft
Raft算法的Leader選舉、Failover過程,投票分裂、日志復(fù)制、修復(fù)不一致的日志以及如何保證數(shù)據(jù)安全性。
Kafka集群的控制節(jié)點(diǎn)由Zookeeper管理到KRaft管理。
KRaft 集群的元數(shù)據(jù)更新機(jī)制是什么。
KRaft 的元數(shù)據(jù)復(fù)制過程是什么樣的。
KRaft 的Leader副本選舉以及 Failover 過程。
KRaft 集群的元數(shù)據(jù)快照(Snapshot)機(jī)制是什么。
KRaft 的快照如何確保Kafka元數(shù)據(jù)不丟失。
六 延遲隊(duì)列
如何基于Kafka實(shí)現(xiàn)延時(shí)隊(duì)列。
如何基于Kafka的多層時(shí)間輪實(shí)現(xiàn)延遲隊(duì)列。
盤點(diǎn)一下在Broker內(nèi)部有哪些不同場景下會有延時(shí)任務(wù)。
Kafka如何基于時(shí)間輪,實(shí)現(xiàn)分區(qū)副本的數(shù)據(jù)同步。
Kafka的時(shí)間輪復(fù)用和多層時(shí)間輪,相比Netty的時(shí)間輪有哪些優(yōu)勢。
基于多層時(shí)間輪實(shí)現(xiàn)Kafka延遲功能,如何解決時(shí)間輪的空轉(zhuǎn)問題。
七 規(guī)劃設(shè)計(jì)線上Kafka集群
如何設(shè)計(jì)規(guī)劃億級線上Kafka集群的Broker端參數(shù)、生產(chǎn)者參數(shù)和消費(fèi)者參數(shù)。
每日幾十億的消息數(shù)量,會對Kafka集群造成多大的壓力。
如何規(guī)劃Kafka集群的機(jī)器數(shù)量、硬盤大小、CPU、內(nèi)存以及網(wǎng)卡配置。
到底該不該使用SSD硬盤,普通的SAS硬盤能應(yīng)付嗎?
如何設(shè)置操作系統(tǒng)的內(nèi)核參數(shù)、JVM以及GC參數(shù)、線上機(jī)器的經(jīng)典配置。
測試驗(yàn)證Kafka集群的生產(chǎn)者和吞吐量。
如何優(yōu)化線上Kafka系統(tǒng),要做哪些重點(diǎn)內(nèi)容的監(jiān)控。
如何優(yōu)化和監(jiān)控線上Kafka系統(tǒng)的Broker端壓力。
Kafka集群如何做異地災(zāi)備,需要做災(zāi)備嗎,如果做災(zāi)備有哪些工具可以使用。
Kafka全鏈路數(shù)據(jù)丟失風(fēng)險(xiǎn)分析,如何跟蹤線上Kafka集群莫名其妙的丟數(shù)據(jù)問題。
八 其他相關(guān)問題
Kafka的消息過期時(shí)間(TTL)該如何實(shí)現(xiàn)。
Kafka有沒有優(yōu)先隊(duì)列,該如何實(shí)現(xiàn)優(yōu)先級隊(duì)列。
針對鏈路的故障場景,該如何實(shí)現(xiàn)類似于Pulsar的死信隊(duì)列。
下游系統(tǒng)在計(jì)算錯(cuò)誤時(shí),該如何進(jìn)行 消息回溯,消息回溯要主要哪些事項(xiàng)。
該如何監(jiān)控消息軌跡,有沒有必要對Kafka數(shù)據(jù)做質(zhì)量監(jiān)控,主要監(jiān)控哪些內(nèi)容,有什么手段。
ZAB(Zookeeper Atomic Broadcast)的工作原理是什么?
Zookeeper集群Leader選舉過程是什么。
Zookeeper的Leader節(jié)點(diǎn)故障后,如何選出新的Leader。
Zookeeper幫助Kafka管理了哪些內(nèi)容,為什么說Kafka的Broker節(jié)點(diǎn)是無狀態(tài)的。