Kafkaソースコード分析:サーバー側の実行中のプロセス

要約:Kafkaネットワークモジュールのサーバー側は、サーバー側でリクエストを開始、受信、処理するプロセスを紹介します。

この記事は、HuaweiCloudCommunityの「KafkaNetworkModule-ServerSide」、原作者:ミドルウェアの兄弟から共有されています。

SocketServerは、Kafkaサーバーがリクエストを処理するために使用するモジュールであり、Kafkaの起動プロセス中に作成、初期化、および開始されます。

SocketServerの起動プロセス:

  • エンドポイントの順序でアクセプターを初期化し、各エンドポイントはアクセプターに対応し、各アクセプターのプロセッサーを作成し(番号は、num.network.threads構成アイテムによって決定されます)、アクセプターを起動します。アクセプターが起動すると、アクセプターが起動します。セレクターを介して接続を監視し、新しく確立された接続がプロセッサーに引き渡されます(プロセッサーを選択するためのポーリング)

  • すべてのプロセッサを起動します

  • Acceptorが開始し、接続プロセスをリッスンします。

  • Acceptorが起動すると、serverSocketChannelが作成され、acceptorに対応するエンドポイントでリッスンし、セレクターにOP_ACCEPTを登録して、無限ループに入ります。各ループで、レディキー(つまり、以前に登録されたserverSocketChannel)セレクターを介して取得され、接続が到着したら、accept()を介して接続に対応するsocketChannelを作成し、ポーリングしてアクセプターを担当するプロセッサーから1つを選択し、選択したプロセッサーにsocketChannelを渡して処理します。つまり、接続をプロセッサに渡します。

  • Acceptorは、処理のために接続をプロセッサに渡します。これは、socketChannelをプロセッサの接続キューnewConnectionに追加することであり、プロセッサは、runメソッドで接続を継続的に取得して処理します。

  • プロセッサはnewConnectionからsocketChannelを取得した後、セレクタにOP_READを登録し、対応するKafkaChannelを作成します。

サーバー側でリクエストを受信して​​処理するプロセス:

  • プロセッサがOP_READイベントを受信して​​準備ができたら、SSLハンドシェイクとSASL検証を確認して完了してみてください(ハンドシェイクは現時点では完了していない可能性があるため、プロセッサがOP_READイベントを受信して​​準備ができたら、最初に確認してハンドシェイクが完了していることを確認します。SSL/SASL関連リファレンス(セクション9.4)

  • SSLハンドシェイクとSASL検証が完了したら、チャネルからデータを読み取り、NetworkReceiveオブジェクトを作成し、stagedReceivesにキューに入れます。

  • stagedReceivesチームの最初の要素を取り出し(削除)、completedReceivesを追加します

  • completeReceivesの要素を取り出し(削除しないで)、Requestオブジェクトを作成し、requestQueueに参加し、OP_READのイベント登録を削除し、対応するKafkaChannelをMUTEDに設定してから、MUTED_AND_RESPONSE_PENDINGに設定します。

  • KafkaRequestHandlerは、requestQueueから要素を取得(削除)し、それらをKafkaApiモジュールに渡してリクエストを処理します

  • KafkaApiはリクエストを処理した後、対応するプロセッサのresponseQueueとinflightResponsesにレスポンスを入れ、セレクターをウェイクアップします。

  • プロセッサはresponseQueueから応答を取得(削除)します。応答をクライアントに返送する必要がある場合は、応答の送信をKafkaChannelに割り当て、OP_WRITEイベントを登録します。

  • チャネルが書き込みの準備ができたら、チャネルの書き込みバッファーに送信を書き込み、送信が終了したら、OP_WRITEイベントの登録を削除し、completedSendsに送信を追加します。

  • 対応する応答をinflightResponsesから削除し、応答コールバックを実行し、KafkaChannelをMUTEDに設定してから、MUTEDからNOT_MUTEDに設定し、OP_READイベント登録を再度追加します。

[フォロー]をクリックして、HUAWEI CLOUDの新技術について初めて学びましょう〜

おすすめ

転載: juejin.im/post/6977178302414864398