二:kafka生產者

一:簡介

  1.相比較消費者、協調者、控制器、日誌存儲而言,生成者的功能相對較簡單,因大部分的工作都交給Broker來處理,生產者需要關注的是消息提交失敗、消費者反饋的失敗的處理上面;

  2.生產消息的流程:消息放入隊列中、由消息發送線程拉取消息、批量發送給Brokers;

  3.生產程序KafkaProducer;

  4.消息收集器,RecordAccumulator,負責緩存生產者客戶端產生的消息;

  5.發送線程:負責讀取RecordAccumulator的批量消息,通過網絡發送給Brokers;

二:

   1.同步方式,異步方式

     同步方式的缺點是需要等待,因爲Brokers的主備副本需要同步完成,纔會返回成功;

     異步可以傳遞迴調方法來處理,使用異步一定要有手段能感知錯誤;

   2.消息發送的方式

     消息沒有key的時候,採用輪詢的方式;有key的時候,散列後發放,這樣儘可能保證分區的數據均勻;

     消息發往哪個分區,是由生產者客戶端決定的;

  3.分區的結構

    分區編號,主副本,副本集,同步副本集;

  4.RecordAccumulator和batch.size、linger,大小和時間;

  5.發送線程的工作,合併分區的消息、提交給網絡連接對象;

三:客戶端網絡連接對象

  1.NetworkClient管理客戶端和服務端的通信,包括連接簡歷、發送請求、讀取響應;

2.發送請求:請求隊列、上條處理後,下條發送;

3.輪詢、調用響應函數,執行回調函數;

4.採用java NIO來處理和不同節點的交互;

   SocketChannel 客戶端網絡連接通道,底層字節數據的讀寫都在通道上;

   Buffer,和通道一起用,寫入緩衝區,從緩衝區中讀;

   Selector選擇器,這是比較常用的,從select、epoll到 NIO、netty等都在用,目的是爲了提高效率;

    SelectionKey,關聯選擇器和通道;

5.客戶端具體步驟

選擇器的 connect()方法會 創 建客戶端到指定遠程服務器的網絡連接,選擇器監聽到客戶端的讀寫事件,會根據SelectionKey獲取相應的通道,利用緩衝區讀寫;

選擇器上調用輪詢方法,不斷的註冊事件、執行事件處理、取消事件,客戶端發送請求,接收結果;

6.服務端的步驟

Broker的服務端也是使用NIO的網絡服務,它啓動一個接收線程Acceptor和多個處理器Processor,將連接部分和請求部分使用不同的線程來處理,這樣請求的處理不會阻塞不斷到來的連接;

a)處理器Processor接收從客戶端發送的對象,包裝成Request,放入請求通道的請求隊列;

b)服務端通過處理器中的選擇器Selector的輪詢,獲得客戶端的請求,並交於KafkaApis去處理;

c)Apis處理完成後,會創建響應對象,並放入請求通道的響應隊列;

 

 

發佈了46 篇原創文章 · 獲贊 5 · 訪問量 1萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章