公司來了位阿里P8大神,看完他的手寫“Kafka筆記”,萬分膜拜!

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

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

kafka不僅僅是個消息中間件,同時它是個流平臺,這個平臺上可以發佈和訂閱數據流(kafka的流,有一個單獨的包stream的處理),並把它們保存起來,進行處理,這個就是kafka作者的設計理念。

 

01 kafka入門

1.1 什麼是kafka

1.2 kafka中的基本概念

  • 1.2.1 消息和批次
  • 1.2.2 主題和分區
  • 1.2.3 生產者和消費者、偏移量、消費者羣組
  • 1.2.4 Broker和集羣
  • 1.2.5 保留消息

 

 

 

02 爲什麼選擇kafka

2.1 優點

2.2 常見場景

  • 2.2.1 活動跟蹤
  • 2.2.2 傳遞消息
  • 2.2.3 收集指標和日誌
  • 2.2.4 提交日誌
  • 2.2.5 流處理

 

 

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 總結

 

 

 

04 kafka的集羣

4.1 爲何需要kafka集羣

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

4.3 Broker如何加入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 演示示例

 

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 自定義分區器

 

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 獨立消費者

 

 

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 超時數據的清理機制

 

 

 

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 顯式提交偏移量

 

 

10 kafka和Spring的整合

10.1 與Spring集成

  • 10.1.1 pom文件
  • 10.1.2 統一配置
  • 10.1.3 生產者端
  • 10.1.4 消費者端

 

 

11 SpringBoot和kafka的整合

 

 

12 kafka實戰之削峯填谷

13 數據管道和流式處理(瞭解即可)

13.1 數據管道基本概念

13.2 流式處理基本概念

 

 

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

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

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時如何選擇合適的分區數?

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中的冪等是怎麼實現的?

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頁....

 

關於kafka,今天就撩騷到這兒啦

更多關於Java集合、JVM、多線程併發、spring原理、微服務、Netty 與RPC 、Kafka、日記、設計模式、Java算法、數據庫、Zookeeper、分佈式緩存、數據結構面試解析等等可以去這個Github鏈接地址:https://github.com/ThinkingHan/Java-note 閱讀,Star一下吧,感謝支持~

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章