天天看點

阿裡P8架構大神分享純手寫“kafka文檔”看完直呼太牛!

什麼是 Kafka

Kafka 是由 

Linkedin

 公司開發的,它是一個分布式的,支援多分區、多副本,基于 Zookeeper 的分布式消息流平台,它同時也是一款開源的基于釋出訂閱模式的消息引擎系統。

kafka的外在表現很像消息系統,允許釋出和訂閱消息流,但是它和傳統的消息系統有很大的差異:

  • 首先,kafka是個現代分布式系統,以叢集的方式運作,可以自由伸縮
  • 其次,kafka可以按照要求存儲資料,儲存多久都可以
  • 第三,流式處理将資料處理的層次提示到了新高度,消息系統隻會傳遞資料。kafka的流式處理能力可以讓我們用很少的代碼就能動态的處理派生流和資料集。是以,kafka不僅僅是個消息中間件

kafka不僅僅是個消息中間件,同時它是個流平台,這個平台上可以釋出和訂閱資料流(kafka的流,有一個單獨的包stream的處理),并把它們儲存起來,進行處理,這個就是kafka作者的設計理念。今天之是以要聊Kafka,是因為我們公司來了位阿裡P8大神,他分享了一份純手寫“Kafka筆記”,我隻能用兩個字來形容:膜拜!崇拜!需要的朋友下方自領呀

——【點此直接領取】

阿裡P8架構大神分享純手寫“kafka文檔”看完直呼太牛!
  • Kafka入門
  • 為什麼選擇Kafka
  • Kafka的安裝、管理和配置Kafka的叢集
  • 第一個Kafka程式
  • Kafka的生産者
  • Kafka的消費者
  • 深入了解Kafka
  • 可靠的資料傳遞
  • Spring和Kafka的整合
  • SpringBoot和Kafka的整合
  • Kafka實戰之削峰填谷
  • 資料管道和流式處理(了解即可)

聲明:關于這份大神純手寫的“Kafka文檔”,本文在這隻是粗略介紹(篇幅有限),但每部分的内容有詳細的解釋。且後方還有kafka從基礎-進階-高階等44問的面試題(含解析),以及最後自己純手繪的知識架構腦圖(可作為梳理參考)。

01 kafka入門

1.1 什麼是kafka

1.2 kafka中的基本概念

1.2.1 消息和批次

1.2.2 主題和分區

1.2.3 生産者和消費者、偏移量、消費者群組

1.2.4 Broker和叢集

1.2.5 保留消息

阿裡P8架構大神分享純手寫“kafka文檔”看完直呼太牛!
阿裡P8架構大神分享純手寫“kafka文檔”看完直呼太牛!

02 為什麼選擇kafka

2.1 優點

2.2 常見場景

2.2.1 活動跟蹤

2.2.2 傳遞消息

2.2.3 收集名額和日志

2.2.4 送出日志

2.2.5 流處理

阿裡P8架構大神分享純手寫“kafka文檔”看完直呼太牛!

03 kafka的安裝、管理和配置

3.1 安裝

3.1.1 預備環境

3.1.2 下載下傳和安裝kafka

3.1.3 運作

3.1.4 kafka基本的操作和管理

3.2 Broker配置

3.3 硬體配置對kafka性能的影響

3.3.1 磁盤吞吐量/磁盤容量

3.3.2 記憶體

3.3.3 網絡

3.3.4 CPU

3.3.5 總結

阿裡P8架構大神分享純手寫“kafka文檔”看完直呼太牛!
阿裡P8架構大神分享純手寫“kafka文檔”看完直呼太牛!

04 kafka的叢集

4.1 為何需要kafka叢集

4.2 如何估算kafka叢集中Broker的數量

4.3 Broker如何加入kafka叢集

阿裡P8架構大神分享純手寫“kafka文檔”看完直呼太牛!

05 第一個kafka程式

5.1 建立我們的主題

5.2 生産者發送消息

5.2.1 必選屬性(bootstrap.servers、key.serializer、value.serializer)

5.3 消費者接受消息

5.3.1 必選參數(group.id)

5.4 示範示例

阿裡P8架構大神分享純手寫“kafka文檔”看完直呼太牛!

06 kafka的生産者

6.1 生産者發送消息的基本流程

6.2 使用kafka生産者

6.2.1 三種發送方式(發送并忘記、同步發送、異步發送)

6.2.2 多線程下的生産者

6.2.3 更多發送配置(acks、buffer.mempry、max.block.ms、retries、batch.size、linger.ms、compression.type、client.id、、、順序保證)

6.3 序列化

6.3.1 自定義序列化需要考慮的問題

6.4 分區

6.4.1 自定義分區器

阿裡P8架構大神分享純手寫“kafka文檔”看完直呼太牛!

07 kafka的消費者

7.1 消費者的入門

7.1.1 消費者群組

7.1.2 消費者配置

7.2 消費者中的基礎概念

7.2.1 消費者群組

7.2.2 訂閱

7.2.3 輪詢

7.2.4 送出和偏移量

7.3 消費者中的核心概念

7.4 kafka中的消費安全

7.5 消費者送出偏移量導緻的問題

7.5.1 自動送出

7.5.2 手動送出(同步)

7.5.3 異步送出

7.5.4 同步和異步組合

7.5.5 特定送出

7.6 分區再均衡

7.7 優雅1退出

7.8 反序列化

7.9 獨立消費者

阿裡P8架構大神分享純手寫“kafka文檔”看完直呼太牛!
阿裡P8架構大神分享純手寫“kafka文檔”看完直呼太牛!

08 深入了解kafka

8.1 叢集的成員關系

8.2 什麼是控制器

8.3 複制-kafka的核心

8.3.1 replication-factor

8.3.2 副本類型

8.3.3 工作機制

8.4 處理請求的内部機制

8.4.1 生産請求

8.4.2 擷取請求

8.4.3 ISR

8.5 實體存儲機制

8.5.1 分區配置設定

8.5.2 檔案管理

8.5.3 檔案格式

8.5.4 索引

8.5.5 逾時資料的清理機制

阿裡P8架構大神分享純手寫“kafka文檔”看完直呼太牛!
阿裡P8架構大神分享純手寫“kafka文檔”看完直呼太牛!

09 可靠的資料傳遞

9.1 kafka提供的可靠性保證和架構上的權衡

9.2 複制

9.3 Broker配置對可靠性的影響

9.3.1 複制系數

9.3.2 不完全的首領選舉

9.3.3 最少同步副本

9.4 可靠系統裡的生産者

9.4.1 發送确認

9.4.2 配置生産者的重試參數

9.4.3 額外的錯誤處理

9.5 可靠系統裡的消費者

9.5.1 消費者的可靠性配置

9.5.2 顯式送出偏移量

阿裡P8架構大神分享純手寫“kafka文檔”看完直呼太牛!

10 kafka和Spring的整合

10.1 與Spring內建

10.1.1 pom檔案

10.1.2 統一配置

10.1.3 生産者端

10.1.4 消費者端

阿裡P8架構大神分享純手寫“kafka文檔”看完直呼太牛!

11 SpringBoot和kafka的整合

阿裡P8架構大神分享純手寫“kafka文檔”看完直呼太牛!

12 kafka實戰之削峰填谷

13 資料管道和流式處理(了解即可)

13.1 資料管道基本概念

13.2 流式處理基本概念

阿裡P8架構大神分享純手寫“kafka文檔”看完直呼太牛!

以上都是在說大牛的手寫“Kafka筆記”,下面來談談kafka面試

關于kafka面試這一塊,前陣子有收集一份面試真題(從基礎[17]-進階[15]-高階[12],總共44道題)

kafka面試基礎[17]

1.Kafka的用途有哪些?使用場景如何?

2.Kafka中的ISR、AR又代表什麼?ISR的伸縮又指什麼

3.Kafka中的HW、LEO、LSO、LW等分别代表什麼?

4.Kafka中是怎麼展現消息順序性的?

5.Kafka中的分區器、序列化器、攔截器是否了解?它們之間的處理順序是什麼?

6.Kafka生産者用戶端的整體結構是什麼樣子的?

7.Kafka生産者用戶端中使用了幾個線程來處理?分别是什麼?

8.Kafka的舊版Scala的消費者用戶端的設計有什麼缺陷?

9.“消費組中的消費者個數如果超過topic的分區,那麼就會有消費者消費不到資料”這句話是否正确?如果正确,那麼有沒有什麼hack的手段?

10.有哪些情形會造成重複消費?

11.哪些情景下會造成消息漏消費?

12.KafkaConsumer是非線程安全的,那麼怎麼樣實作多線程消費?

13.簡述消費者與消費組之間的關系

14.當你使用kafka-topics.sh建立(删除)了一個topic之後,Kafka背後會執行什麼邏輯?

15.topic的分區數可不可以增加?如果可以怎麼增加?如果不可以,那又是為什麼?

16.topic的分區數可不可以減少?如果可以怎麼減少?如果不可以,那又是為什麼?

17.建立topic時如何選擇合适的分區數?

kafka面試進階[15]

1.Kafka目前有哪些内部topic,它們都有什麼特征?各自的作用又是什麼?

2.優先副本是什麼?它有什麼特殊的作用?

3.Kafka有哪幾處地方有分區配置設定的概念?簡述大緻的過程及原理

4.簡述Kafka的日志目錄結構

5.Kafka中有哪些索引檔案?

6.如果我指定了一個offset,Kafka怎麼查找到對應的消息?

7.如果我指定了一個timestamp,Kafka怎麼查找到對應的消息?

8.聊一聊你對Kafka的Log Retention的了解

9.聊一聊你對Kafka的Log Compaction的了解

10.聊一聊你對Kafka底層存儲的了解

11.聊一聊Kafka的延時操作的原理

12聊一聊Kafka控制器的作用

13.Kafka的舊版Scala的消費者用戶端的設計有什麼缺陷?

14.消費再均衡的原理是什麼?(提示:消費者協調器和消費組協調器)

15.Kafka中的幂等是怎麼實作的?

kafka面試高階[12]

1.Kafka中的事務是怎麼實作的?

2.失效副本是指什麼?有哪些應對措施?

3.多副本下,各個副本中的HW和LEO的演變過程

4.Kafka在可靠性方面做了哪些改進?(HW, LeaderEpoch)

5.為什麼Kafka不支援讀寫分離?

6.Kafka中的延遲隊列怎麼實作

7.Kafka中怎麼實作死信隊列和重試隊列?

8.Kafka中怎麼做消息審計?

9.Kafka中怎麼做消息軌迹?

10.怎麼計算Lag?(注意read_uncommitted和read_committed狀态下的不同)

11.Kafka有哪些名額需要着重關注?

12.Kafka的哪些設計讓它有如此高的性能?

答案在這裡啦!!整理起來好多呀,有30頁....

阿裡P8架構大神分享純手寫“kafka文檔”看完直呼太牛!

看完了筆記,刷了面試真題,最後對整個kafka知識做個梳理總結:控制器(Controller)、生産者、配置參數、消費者、Broker端、主題與分區、檔案目錄、時間輪(TimingWheel)等

手繪了下圖所示的kafka知識大綱流程圖(xmind檔案不能上傳,導出圖檔展現)

阿裡P8架構大神分享純手寫“kafka文檔”看完直呼太牛!

編輯于 2022-07-05 11:08