天天看點

Kafka是如何應用NIO實作網絡通信的?(下)

newConnections

Kafka是如何應用NIO實作網絡通信的?(下)

每當Processor線程接收新連接配接請求,都會将對應SocketChannel放入該隊列。

之後調用configureNewConnections建立連接配接時,就從該隊列中取出SocketChannel,然後注冊新連接配接。

inflightResponses

  • 臨時Response隊列
  • Kafka是如何應用NIO實作網絡通信的?(下)
  • 為何是臨時?

    有些Response回調邏輯要在Response被傳回發送方後,才能執行,是以需要暫存臨時隊列。

responseQueue

每個Processor線程都會維護自己的Response隊列,

而非像網上的某些文章說Response隊列是線程共享的或是儲存在RequestChannel中的。Response隊列裡面儲存着需要被返還給發送方的所有Response對象。

工作邏輯

configureNewConnections

  • 負責處理新連接配接請求,注意每個Processor線程都維護着一個Selector類執行個體。
  • Kafka是如何應用NIO實作網絡通信的?(下)

processNewResponses

  • 負責發送Response給Request發送方,并且将Response放入臨時Response隊列
  • Kafka是如何應用NIO實作網絡通信的?(下)

poll

Kafka是如何應用NIO實作網絡通信的?(下)

processCompletedReceives

  • 接收和處理Request
  • Kafka是如何應用NIO實作網絡通信的?(下)

processCompletedSends

Kafka是如何應用NIO實作網絡通信的?(下)

processDisconnected

Kafka是如何應用NIO實作網絡通信的?(下)

closeExcessConnections

  • 關閉超限連接配接
  • Kafka是如何應用NIO實作網絡通信的?(下)