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~