- 在享用了這么久kafka提供的各種福利后, 咱們也來精進一下,看看kafka的各部分實現(xiàn),知其然也知一點所以然;
- 題目起得有點大,其實完全是臨時起意,希望能堅持下去;
- 本身其實不是java程序員,scala也是半吊子, 但是特別喜歡scala啊~~~
- Kafka最近的版本更新有點快, 但是這一系列文章是基于kafka 0.9.1版本;
- 這里的文章不會事無巨細,但求將主脈絡(luò)理清.
Kafka的網(wǎng)絡(luò)層模型概述
- 這個模型其實一點也不神秘,很質(zhì)樸,很清晰,也很好用,引用源碼中的一句話:
The threading model is 1 Acceptor thread that handles new connections Acceptor has N Processor threads that each have their own selector and read requests from socketsM Handler threads that handle requests and produce responses back to the processor threads for writing
-
再來張圖:
網(wǎng)絡(luò)模型.png - Acceptor 作兩件事: 創(chuàng)建一堆worker線程送滞;接受新連接, 將新的socket指派給某個 worker線程;
- Worker線程處理若干個socket,接受請求轉(zhuǎn)給各種handler處理,response再經(jīng)由worker線程發(fā)送回去.
- 總結(jié)起來就是個半同步半異步模型.
Kafka的網(wǎng)絡(luò)層模型實現(xiàn)
- 雖然kafka用scala實現(xiàn),但里面也用了大量的java類, 這部分主要是用了NIO;
- 主要實現(xiàn)文件:core/src/main/scal/kafka/network/SocketServer.scala,里面包括了SocketServer, Acceptor, Processor等;
- 數(shù)據(jù)傳輸層實現(xiàn):clients/src/main/java/org/apache/kafka/common/network,里面包括了Channel,TransportLayer,Authenticator等.
- 下一篇咱們開始進入到具體的實現(xiàn)...