Análisis del código fuente de Kafka: el proceso en ejecución del lado del servidor

​​​​​​​​Resumen: El lado del servidor del módulo de red de Kafka presenta el proceso de inicio, recepción y procesamiento de solicitudes en el lado del servidor.

Este artículo se comparte desde Huawei Cloud Community "Kafka Network Module - Server Side" , el autor original: hermano de middleware.

SocketServer es un módulo utilizado por el servidor Kafka para procesar solicitudes. Se crea, inicializa e inicia durante el proceso de inicio de Kafka.

Proceso de inicio de SocketServer:

  • Inicialice el aceptador en el orden de los puntos finales, cada punto final corresponde a un aceptador, cree un procesador para cada aceptador (el número está determinado por el elemento de configuración num.network.threads) e inicie el aceptador. monitorear la conexión a través del selector, y la conexión recién establecida se entrega al Procesador (sondeo para seleccionar el Procesador)

  • iniciar todos los procesadores

  • El aceptador comienza y escucha el proceso de conexión:

  • Después de que se inicie el aceptador, creará un serverSocketChannel, escuchará en el punto final correspondiente al aceptador y registrará OP_ACCEPT en el selector, y luego ingresará a un bucle infinito.En cada bucle, la clave lista (es decir, el serverSocketChannel previamente registrado) se obtiene a través del selector, lo que indica que hay Cuando llega la conexión, cree un socketChannel correspondiente a la conexión a través de accept(), luego sondee para seleccionar uno de los procesadores responsables del aceptador y entregue el socketChannel al procesador seleccionado para su procesamiento , es decir, entregar la conexión al procesador.

  • El aceptador entrega la conexión al procesador para su procesamiento, que consiste en agregar el socketChannel a la cola de conexión del procesador newConnection, y el procesador lo obtendrá y procesará continuamente en el método de ejecución.

  • Una vez que el Procesador obtiene el socketChannel de newConnection, registra OP_READ en el selector y crea el KafkaChannel correspondiente.

El proceso de recepción y procesamiento de solicitudes en el lado del servidor:

  • Después de que el Procesador reciba el evento OP_READ y esté listo, verifique e intente completar el protocolo de enlace SSL y la verificación de SASL (es posible que el protocolo de enlace no se complete en este momento, por lo que después de que el Procesador reciba el evento OP_READ y esté listo, primero debe verificar y asegúrese de que se haya completado el protocolo de enlace, SSL/SASL Referencia relacionada (Sección 9.4)

  • Después de que se completen el protocolo de enlace SSL y la verificación SASL, lea los datos del canal, construya un objeto NetworkReceive y colóquelo en la cola en stagedReceives

  • Saque el primer elemento del equipo stagedReceives (elimine) y agregue completedReceives

  • Extraiga (no elimine) los elementos en completedReceives, construya un objeto Request, únase a requestQueue, elimine el registro de eventos para OP_READ, configure el KafkaChannel correspondiente en MUTED y luego configúrelo en MUTED_AND_RESPONSE_PENDING

  • KafkaRequestHandler toma elementos (elimina) de requestQueue y los entrega al módulo KafkaApi para procesar la solicitud

  • Después de que KafkaApi procesa la solicitud, coloca la respuesta en responseQueue e inflightResponses del procesador correspondiente y activa su selector.

  • El procesador toma la respuesta (la elimina) de la cola de respuesta. Si la respuesta debe enviarse de vuelta al cliente, asigna el envío de la respuesta a KafkaChannel y registra el evento OP_WRITE.

  • Cuando el canal esté listo para escribir, escriba el envío en el búfer de escritura del canal, cuando finalice el envío, elimine el registro del evento OP_WRITE y agregue el envío a los envíos completados.

  • Elimine la respuesta correspondiente de inflightResponses, ejecute la devolución de llamada de respuesta, configure KafkaChannel en MUTED, luego de MUTED a NOT_MUTED, y vuelva a agregar el registro del evento OP_READ

Haga clic en Seguir para conocer las nuevas tecnologías de HUAWEI CLOUD por primera vez~

Supongo que te gusta

Origin juejin.im/post/6977178302414864398
Recomendado
Clasificación