Kafka 源碼解析之 Producer必掌握知識(六)

歡迎你們關注 github.com/hsfxuebao/j… ,但願對你們有所幫助,要是以爲能夠的話麻煩給點一下Star哈java

1.kafka中producer源碼目錄

《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源碼深度剖析-生產者源碼精華總結》

超高併發的網絡架構設計:

2.總結:

(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的性能。若是咱們本身去設計一個系統,這樣設計思路也是值得你們去學習的。

kafka源碼註釋分析

參考:www.bilibili.com/video/BV1ka…

相關文章
相關標籤/搜索