Red de conocimiento informático - Conocimiento informático - Cómo calcular el tamaño del clúster de Flink: Calculadora de contraportada

Cómo calcular el tamaño del clúster de Flink: Calculadora de contraportada

La charla de Robert Metger "Keep It Going: Cómo operar Apache Flink de manera confiable y eficiente" en Flink Forward 2017 en Berlín fue muy popular, y uno de los temas involucró cómo estimar el tamaño de un clúster de Flink. Un asistente a Flink Forward encontró esto. El enfoque computacional es tan útil que convertimos su charla en esta publicación de blog.

Una pregunta frecuente en la comunidad de Flink es, por supuesto, la respuesta más precisa al pasar del desarrollo al modo en línea. es estimar según sea necesario, pero este blog plantea una serie de preguntas para que pueda calcular algunos puntos de referencia primero. Considere las métricas de referencia para los recursos que su aplicación necesita para ejecutarse.

Las métricas clave son:

p>

Finalmente, considere sus acuerdos de nivel de servicio (SLAS), como el tiempo de inactividad, la latencia y el rendimiento máximo. Estas métricas afectarán directamente sus cálculos de capacidad.

A continuación, observe el tamaño de su capacidad disponible. recursos según su presupuesto. Por ejemplo:

En función de estos factores, ahora puede estimar las líneas base de recursos para procesos normales. Además, la recuperación de excepciones y los puntos de control requieren algunos recursos adicionales. proceso de establecimiento de líneas de base de recursos mediante la implementación de trabajos virtuales en el clúster. Los números utilizados en el cálculo no son precisos y no están bien pensados. Más adelante señalaré algunos puntos que se ignoraron en el cálculo. En este estudio de caso, implementaré una aplicación de transmisión Flink típica y tomaré los datos del tema Kafka como fuente de datos. Este flujo de datos luego se transformará utilizando la operación de ventana de agregación por clave. Cuando ingresan datos, la operación de la ventana realizará una agregación de ventana de 5 minutos. Establezca que se deslice una vez por minuto.

Esto significa que la aplicación de transmisión realiza una agregación en promedio en el tema de Kafka cada minuto durante los últimos 5. minutos.

El rendimiento es de 1 millón de mensajes por segundo

Para comprender el tamaño del estado de la operación de la ventana, necesita saber la cantidad de claves diferentes. es el número de ID de usuario, que es aprox. Hay 50 millones de ID de usuario diferentes

Ahora, resumamos las métricas clave de este trabajo:

- Hardware:

- Implementación independiente de Kafka.

En total, hay ****** 5 máquinas ejecutando este trabajo y se ejecuta un TaskManager en cada máquina. Kafka se implementa de forma independiente en otras máquinas.

Cada máquina tiene 16 núcleos de CPU. Para simplificar, aquí no se considera el uso de CPU y memoria. De manera realista, debe considerar el uso de la memoria en función de la lógica de su aplicación y el uso del backend con estado. Este ejemplo utiliza el backend de estado de RocksDB. (Es muy potente y tiene requisitos de memoria relativamente bajos).

La forma más sencilla de comprender los requisitos de recursos de una implementación completa de trabajo en ejecución es centrarse en máquinas individuales y operaciones de TaskManager. Puede extrapolar los requisitos de recursos de todo el clúster a partir de los números calculados para una sola máquina.

De forma predeterminada (todas las operaciones son paralelas y no hay restricciones de programación especiales), todas las operaciones se ejecutan en cada máquina.

En este ejemplo, la fuente de Kafka, la operación de ventana y el receptor de Kafka se ejecutan en cada máquina.

keyBy es una operación independiente, por lo que los requisitos de recursos son más fáciles de calcular. De hecho, keyBy es una API que conecta fuentes Kafak y operaciones de ventanas.

Ahora analizaré los requisitos de recursos de red de estas operaciones.

Para calcular la cantidad de datos recibidos por una fuente de Kafka, primero debe calcular la entrada agregada a Kafka. La fuente recibe 1 millón de mensajes por segundo, cada mensaje tiene un tamaño de 2 KB.

Divida 2 GB/s entre 5 máquinas y obtendrá esto:

La fuente de TaskManager en cada máquina del clúster recibe 400 MB/s de datos.

A continuación, debe asegurarse de que todos los eventos de la misma clave caigan en determinadas máquinas. Aquí, los datos que lee de Kafka pueden volver a particionarse.

El proceso de reproducción aleatoria enviará todos los datos con la misma clave a la misma máquina, por lo que esto dividirá los datos de 400 MB/s en flujos de datos divididos por ID de usuario.

En promedio, enviarás 80 MB/s de datos a cada máquina.

La siguiente pregunta es cuántos datos envía la operación de ventana a Kafka Sink, el resultado es 67MB/s, veamos cuál es el resultado.

La operación de ventana mantiene un agregado de 4 números (largos) para cada clave. Esta operación envía el valor agregado actual cada minuto.

Luego multiplica por el número de claves (500000000 dividido por el número de máquinas)

Luego calcula el tamaño por segundo:

Esto significa que cada TaskManager promedia por segundo Envía 67 MB de datos de usuario desde la operación de ventana. Dado que el receptor Kafka se ejecuta en cada TaskManager, no hay más operaciones de partición. Esta es la cantidad de datos que se envían desde Flink a Kafka.

Los datos para las operaciones de ventana se envían cada minuto. De hecho, la velocidad de envío de datos de esta operación no es de 67 MB/s, pero el ancho de banda máximo se alcanza en unos segundos dentro de un minuto.

Ahora, resumamos:

Hasta ahora, solo hemos contado los datos de usuario procesados ​​por Flink. También debe considerar el uso del disco, como el estado del almacenamiento y los puntos de control.

Para calcular el costo del disco, debe observar el cálculo de la ventana para comprender cómo se accede al estado. Kafka Source también necesita mantener algún estado, pero es insignificante en comparación con el estado de las operaciones de ventana.

Para comprender el tamaño del estado de las operaciones de ventana, veamos el problema desde otro ángulo. Flink calculará una ventana de tiempo de 5 minutos y la deslizará cada minuto. Flink implementa ventanas corredizas reteniendo 5 ventanas. Como se mencionó anteriormente, cuando se usa Windows, cada ventana debe mantener 40 bytes de estado y las ventanas se agregan con anticipación. Para cada evento entrante, primero debe obtener el valor agregado actual, luego actualizar el valor agregado y luego volver a escribir el nuevo valor.

Esto significa:

Las velocidades de lectura y escritura del disco (en cada máquina) son de 40 MB/s. Como se mencionó anteriormente, el disco se monta a través de la red. Por lo tanto, este valor debe sumarse al valor anterior.

Ahora, los recursos totales necesarios para **** son los siguientes:

El cálculo anterior solo tiene en cuenta la entrada de ESTADO que se activa cuando el evento alcanza la operación de ventana. Además, necesita puntos de control y tolerancia a fallos. Porque, si la máquina u otro dispositivo se bloquea, es necesario restaurar la ventana y continuar con el procesamiento.

Como se mencionó anteriormente, los puntos de control se realizan cada 1 minuto y cada punto de control copia el estado completo del trabajo en el sistema de archivos (montado en red).

Ahora, calculemos rápidamente el tamaño del estado para cada máquina:

A continuación, calculemos el valor por segundo:

Similar a las operaciones de ventana, los puntos de control se ejecutan cada minuto. . Intentará enviar datos al almacenamiento externo a toda velocidad. (A partir de Flink 1.3, RocksDB admite puntos de control incrementales para reducir la transmisión de red requerida para cada punto de control).

Las actualizaciones de cálculo son las siguientes:

Esto significa que el tráfico de red para todo el clúster es:

400 son 80 MB de lecturas y escrituras con estado multiplicadas por 5 máquinas , 2335 es el valor total dentro y fuera de Kafka.

La capacidad de red disponible en todo el hardware es la siguiente:

Descargo de responsabilidad: los cálculos anteriores no incluyen gastos de protocolos como TCP, Ethernet y RPC (Flink, Kafka, HDFS , etc.). Sin embargo, los cálculos anteriores todavía tienen una importancia orientativa sobre cómo calcular los recursos laborales.

Según mi análisis, el clúster de 5 nodos de este ejemplo necesita manejar 760 MB/s de datos dentro y fuera de cada máquina en condiciones operativas típicas, y cada máquina puede manejar 1250 MB/s. Esto deja el 40% de la capacidad de la red reservada para manejar los problemas complejos que acabo de mencionar, como la sobrecarga del protocolo de red, la reproducción de eventos, el desequilibrio debido a la carga de datos, etc.

Por supuesto, no existe una respuesta estándar sobre si un margen del 40% es apropiado. Pero este algoritmo puede ofrecerle un buen comienzo.

¿Cómo determinar el tamaño de Apache Flink? Agrupación en clústeres: computación hacia atrás

¿Cómo dimensionar su clúster Apache Flink?