歡迎你們關注 github.com/hsfxuebao/j… ,但願對你們有所幫助,要是以爲能夠的話麻煩給點一下Star哈java
《01 Kafka源碼深度剖析-前言》git
《02 Kafka源碼深度剖析-源碼閱讀環境搭建》github
《03 Kafka源碼深度剖析-源碼分析思路》編程
《04 Kafka源碼深度剖析-從一個demo開始》markdown
《05 Kafka源碼深度剖析-Producer核心流程介紹》網絡
《06 Kafka源碼深度剖析-Producer初始化》數據結構
《07 生產者源碼之Producer端元數據管理》架構
《08 Kafka源碼深度剖析-Producer核心流程初探》併發
《09 Kafka源碼深度剖析-KafkaProducer加載元數據》框架
《10 Kafka源碼深度剖析-選擇合適的分區》
《11 Kafka源碼深度剖析-RecordAccumulator封裝消息流程初探》
《12 Kafka源碼深度剖析-提升性能設計的數據結構CopyOnWriteMap》
《13 Kafka源碼深度剖析-把數據寫入對應批次(分段加鎖)》
《14 Kafka源碼深度剖析-內存池設計》
《15 Kafka源碼深度剖析-sender線程發送消息流程初探》
《16 Kafka源碼深度剖析-batch發送的條件》
《17 Kafka源碼深度剖析-篩選能夠發送消息的Broker》
《18 Kafka源碼深度剖析-Kafka網絡設計》
《19 Kafka源碼深度剖析-網絡沒有創建KafkaProducer會發送消息嗎》
《20 Kafka源碼深度剖析-KafkaProducer終於與Broker創建上鍊接了》
《21 Kafka源碼深度剖析-KafkaProducer終於發送請求了》
《22 Kafka源碼深度剖析-KafkaProducer處理粘包問題的完美方案》
《23 Kafka源碼深度剖析-KafkaProducer處理拆包問題的教科書代碼》
《24 Kafka源碼深度剖析-KafkaProducer是如何處理暫存狀態的響應消息的》
《25 Kafka源碼深度剖析-KafkaProducer最終如何處理響應》
《26 Kafka源碼深度剖析-響應被處理了之後內存是如何處理的?》
《27 Kafka源碼深度剖析-消息有異常是如何處理的?》
《28 Kafka源碼深度剖析-消息發送超時了是如何處理的?》
《29 Kafka源碼深度剖析-請求長時間沒響應如何處理》
《30 Kafka源碼深度剖析-生產者源碼精華總結》
超高併發的網絡架構設計:
(1)Kafka的網絡部分的設計絕對是一個亮點,Kafka本身基於NIO封裝了一套本身的網絡框架,支持一個客戶端與多個Broker創建鏈接。
(2)處理拆包和粘包的的思路和代碼,絕對是教科書級別的,你們能夠把代碼複製粘貼下來直接用到本身的線上的項目去。
(3)RecordAccumulator封裝消息的batchs,使用的本身封裝的數據結構CopyOnWriteMap,採用讀寫分離的思想,用來面對高併發的場景(讀多,寫少) 提高整個流程的性能。
(4)同時封裝消息的時候設計的內存緩衝池,這極大的減小了GC的次數。咱們java的項目,最怕最怕的就是GCjava項目60%的問題都是GC引發的。
(5)若是你們還記得RecordAccumulator封裝批次時候的代碼的話,裏面封裝批次的時候代碼採用的是分段加鎖的思想,極大的提升了性能,看得出來做者確實編程功底很深厚。能夠不用加鎖的地方,就不加鎖,只在必須加鎖的地方加鎖。儘量的去提高代碼的性能,或者說是減小鎖的使用的。由於一旦咱們在代碼裏面使用了鎖之後:1. 死鎖2. 鎖爭用
(6)其實我我的感受Kafka的異常體系也是設計得比較清晰的,在覈心流程捕獲異常,底層拋異常。若是編程經驗少一些的同窗能夠學習借鑑一下。
(7) 生產者去發送數據的時候提供了兩個方案:1. 同步發送:性能會差2. 異步發送:裏面結合回調函數,很大的提高了kafka的性能。若是咱們本身去設計一個系統,這樣設計思路也是值得你們去學習的。