Todos los productos
Search
Centro de documentos

Realtime Compute for Apache Flink:Informe técnico de rendimiento (benchmark Nexmark)

Última actualización: Sep 03, 2026

Este informe técnico describe cómo utilizar la herramienta de benchmark Nexmark para evaluar el rendimiento del procesamiento de flujos en Realtime Compute for Apache Flink.

Resumen de rendimiento

Nexmark es un benchmark de rendimiento estándar en la industria para motores de procesamiento de flujos. Incluye 19 consultas estándar que cubren escenarios típicos como filtrado, agregación, joins y ventanas. Este documento utiliza la herramienta de pruebas Nexmark para llevar a cabo una evaluación completa del rendimiento de Realtime Compute for Apache Flink con una configuración de 8 CU y una línea base de 100 millones de registros de entrada por consulta. Los resultados muestran que:

  • Las consultas simples, como q0, q1 y q2, alcanzan un RPS de entre 4 y 6.5 millones de registros por segundo.

  • Las consultas complejas de agregación y ventanas, como q4, q5 y q16, logran un RPS de entre 150,000 y 630,000 registros por segundo.

En términos generales, Realtime Compute for Apache Flink ofrece un rendimiento en Nexmark 3.24 veces superior al de Flink open source.

Herramienta de pruebas

Nexmark es una suite estándar de pruebas de benchmark para motores de procesamiento de flujos. El modelo de prueba es el siguiente:

  • Tabla de origen Nexmark: genera datos de prueba (eventos Person, Auction y Bid) a un TPS especificado.

  • Transformaciones: 19 consultas estándar de Nexmark que abarcan escenarios típicos como filtrado, transformación, agregación, joins y ventanas.

  • Tabla de destino Blackhole: los datos se escriben en un destino blackhole para eliminar la interferencia de rendimiento del almacenamiento externo, lo que permite que la evaluación se centre en la capacidad de procesamiento del propio motor Flink.

La herramienta de pruebas Nexmark utilizada en este documento se implementó con base en la OpenAPI de Realtime Compute for Apache Flink. Automatiza todo el flujo de trabajo, incluida la creación de jobs, el despliegue, el monitoreo y la recopilación de resultados. No es necesario escribir SQL manualmente ni crear jobs en la consola.

Entorno de pruebas

Los jobs de Flink en esta prueba utilizaron las siguientes configuraciones de optimización:

Parámetro

Valor

Descripción

table.exec.mini-batch.enabled

true

Habilita la agregación Mini-Batch.

table.exec.mini-batch.allow-latency

2s

Intervalo de almacenamiento en búfer de Mini-Batch.

table.optimizer.distinct-agg.split.enabled

true

Habilita la optimización de división para la agregación Distinct.

execution.checkpointing.interval

3min

Intervalo de checkpoint.

Requisitos previos

  • Tener instalado Java Development Kit (JDK) 1.8.x o posterior.

  • Haber activado Realtime Compute for Apache Flink y creado un workspace. Para obtener más información, consulte Activate Realtime Compute for Apache Flink.

  • Haber obtenido el AccessKey ID y el AccessKey Secret de su cuenta de Alibaba Cloud.

Procedimiento

Paso 1: Descargar la herramienta de pruebas

Descargue y extraiga el paquete de la herramienta de pruebas Nexmark nexmark-flink.tar.gz.

La estructura de directorios después de la extracción es la siguiente:

nexmark-flink/
├── run_nexmark.sh          # Test entry script
├── nexmark_env.sh          # Environment variable configuration file (requires editing)
├── bin/                    # Runtime scripts
├── conf/                   # Flink job configurations
├── lib/                    # JAR files (to be uploaded to the console)
└── queries-vvp/            # Nexmark Query SQL files

Paso 2: Cargar el JAR de Nexmark

  1. Inicie sesión en la Realtime Compute for Apache Flink console.

  2. Haga clic en el project space deseado. En la barra de navegación izquierda, seleccione Artifacts > Upload Artifact.

  3. Seleccione y cargue el archivo nexmark-flink-0.2-SNAPSHOT.jar. El archivo se encuentra en el directorio nexmark-flink/lib de la herramienta de pruebas.

  4. Una vez completada la carga, haga clic en el nombre del archivo para copiar su dirección de OSS. Necesitará esta dirección para un paso de configuración posterior. El formato de la ruta del archivo varía según el tipo de almacenamiento:

    • Almacenamiento en bucket de OSS: oss://<OSS Bucket name>/artifacts/namespaces/<project space name>/<file name>

      Ejemplo: oss://oss-test/artifacts/namespaces/flink-default/nexmark-flink-0.2-SNAPSHOT.jar
    • Almacenamiento totalmente administrado: oss://flink-fullymanaged-<workspace ID>/artifacts/namespaces/<project space name>/<file name>

      Ejemplo: oss://flink-fullymanaged-e6a123456789/artifacts/namespaces/flink-default/nexmark-flink-0.2-SNAPSHOT.jar

    Para consultar el tipo de almacenamiento de su workspace, vaya a la consola de administración de Realtime Compute for Apache Flink, busque el workspace correspondiente y haga clic en Actions en la columna Details.

Paso 3: Configurar los parámetros de ejecución

Edite el archivo nexmark-flink/nexmark_env.sh y establezca los siguientes parámetros.

Parámetro

Descripción

Ejemplo

END_POINT

El endpoint de Realtime Compute for Apache Flink. Seleccione el endpoint correspondiente a su región. Para obtener más información, consulte Endpoints.

ververica.cn-hangzhou.aliyuncs.com

AK

El AccessKey ID de su cuenta de Alibaba Cloud.

-

SK

El AccessKey Secret de su cuenta de Alibaba Cloud.

-

WORK_SPACE

El ID de su workspace.

e6a123456789

NAMESPACE

El nombre de su project space.

flink-default

NEXMARK_JAR

La dirección de OSS del archivo JAR que cargó en el Paso 2.

oss://flink-fullymanaged-e6a123456789/artifacts/namespaces/flink-default/nexmark-flink-0.2-SNAPSHOT.jar

FLINK_VERSION

La versión del motor Flink que se va a probar.

vvr-11.5-jdk11-flink-1.20

QUERIES

Especifique las consultas que desea ejecutar. Separe varias consultas con comas; por ejemplo, q0 o q1,q2,q3. Para ejecutar todas las consultas, establezca el valor en all.

all

Nota

Ejecutar todas las consultas consume mucho tiempo. Cada consulta debe pasar por etapas como la creación del job, la generación de datos y la ejecución de cálculos. Se recomienda ejecutar primero una sola consulta (por ejemplo, establecer QUERIES en q0) para comprobar que la configuración del entorno y los parámetros son correctos antes de realizar una prueba a gran escala.

Paso 4: Ejecutar la prueba

  1. En el directorio nexmark-flink, ejecute el siguiente comando.

    ./run_nexmark.sh
  2. La herramienta de pruebas crea y ejecuta automáticamente los jobs de Nexmark mediante OpenAPI.

  3. Al finalizar la prueba, se muestra la duración de cada consulta en milisegundos. El siguiente ejemplo muestra una salida de muestra:

    INFO  com.github.nexmark.flink.vvp.Nexmark - q0 13078
    ============================================================================
    ✓ Benchmark execution completed successfully
    ============================================================================

Resultados de rendimiento

La siguiente tabla compara el rendimiento en Nexmark entre Flink open source (1.20.4) y Realtime Compute for Apache Flink (vvr-11.5-jdk11-flink-1.20) con una configuración de 8 CU. Cada consulta procesa una entrada de 100 millones de registros. RPS = Número de registros de entrada ÷ Duración.

Nota

Los siguientes datos de prueba se recopilaron en un entorno de hardware específico y con versiones específicas del motor. El rendimiento real puede variar debido a actualizaciones de hardware y del motor. Estos resultados son solo de referencia.

Consulta

Flink open source en ECS

Versión: 1.20.4

Realtime Compute for Apache Flink

Versión: vvr-11.5-jdk11-flink-1.20

Duración (ms)

RPS

Duración (ms)

RPS

RPS vs. open source (×)

q0

58848

1,699,293

23450

4,264,392

2.51

q1

57045

1,753,002

22824

4,381,353

2.50

q2

51890

1,927,154

15224

6,568,576

3.41

q3

84986

1,176,664

21558

4,638,649

3.94

q4

553426

180,693

157117

636,468

3.52

q5

365636

273,496

357547

279,684

1.02

q7

1257452

79,526

333837

299,547

3.77

q8

79788

1,253,321

29939

3,340,125

2.67

q9

2324518

43,020

266563

375,146

8.72

q10

189985

526,357

51202

1,953,049

3.71

q11

408384

244,868

145983

685,011

2.80

q12

121554

822,680

36991

2,703,360

3.29

q14

68903

1,451,316

20012

4,997,002

3.44

q15

183709

544,339

42734

2,340,057

4.30

q16

917597

108,980

337293

296,478

2.72

q17

102847

972,318

27076

3,693,308

3.80

q18

574949

173,928

96335

1,038,044

5.97

q19

586287

170,565

95121

1,051,293

6.16

q20

1340638

74,591

231482

431,999

5.79

q21

127089

786,850

39693

2,519,336

3.20

q22

94830

1,054,519

31228

3,202,254

3.04

Total

2383209

49,695,131

9550361

15,317,480

3.24

Procedimiento de prueba para Flink open source

Para reproducir los resultados en Flink open source sobre ECS, siga este procedimiento.

Preparación del entorno

Cree un clúster de Flink mediante EMR en ECS con la siguiente configuración:

  • Versión de EMR: EMR-5.21.0

  • Especificación de hardware: tres instancias ecs.g6a.xlarge (4 vCPU / 16 GiB), incluido un nodo maestro y dos nodos core.

  • Habilite los servicios Hadoop y HDFS.

  • Configure el inicio de sesión sin contraseña entre todos los nodos. Por ejemplo, cargue su archivo de clave privada (como key.pem) en el nodo maestro. Luego, agregue la siguiente configuración al archivo ~/.ssh/config del nodo maestro. Reemplace las direcciones IP y la ruta del archivo con sus valores reales.

    Host 192.168.0.0
        HostName 192.168.0.0
        User root
        IdentityFile /path/to/key.pem
        StrictHostKeyChecking no
    Host 192.168.0.1
        HostName 192.168.0.1
        User root
        IdentityFile /path/to/key.pem
        StrictHostKeyChecking no
    Host 192.168.0.2
        HostName 192.168.0.2
        User root
        IdentityFile /path/to/key.pem
        StrictHostKeyChecking no
    Use ssh para comprobar que el inicio de sesión sin contraseña entre los nodos funciona correctamente. Si ocurre un error de "bad permissions", ejecute chmod 600 /path/to/key.pem para corregir los permisos.

Preparación del software

  1. Descargue el paquete de Flink deseado (Apache Flink Downloads) y el paquete de pruebas Nexmark (nexmark-flink.tgz). Cargue los paquetes en el nodo maestro y extráigalos.

    tar -zxvf flink-1.20.4-bin-scala_2.12.tgz
    tar -zxvf nexmark-flink.tgz
    mv flink-1.20.4 flink
    mv nexmark-flink nexmark
  1. Copie los archivos JAR del directorio nexmark/lib a flink/lib. Estos JAR contienen el generador de datos de Nexmark.

    cp nexmark/lib/* flink/lib/
  1. Establezca las variables de entorno. Edite ~/.bashrc, agregue la siguiente configuración y luego ejecute source ~/.bashrc para que los cambios surtan efecto.

    Configure las rutas según su entorno real.
    export JAVA_HOME=/etc/alternatives/java_sdk_11
    export PATH=$JAVA_HOME/bin:$PATHexport FLINK_HOME=/mnt/disk1/flink
    export HADOOP_CLASSPATH=$(/opt/apps/HADOOP-COMMON/hadoop-common-current/bin/hadoop classpath)
  1. Configure los workers de Flink. Esta prueba utiliza ocho TaskManagers, distribuidos de la siguiente manera: dos en el nodo maestro y tres en cada nodo core.

    Edite flink/conf/workers y asegúrese de reemplazar la dirección IP con el valor real.

    192.168.0.0
    192.168.0.0
    192.168.0.1
    192.168.0.1
    192.168.0.1
    192.168.0.2
    192.168.0.2
    192.168.0.2
  1. Reemplace flink/conf/config.yaml por nexmark/conf/config.yaml y actualice los siguientes elementos de configuración:

    • jobmanager.rpc.address: la dirección IP del nodo maestro, por ejemplo, 192.168.0.0.

    • state.checkpoints.dir: la ruta de HDFS, por ejemplo, hdfs:///checkpoints

    • taskmanager.memory.process.size: 4G

  1. Edite nexmark/conf/nexmark.yaml y establezca nexmark.metric.reporter.host en la dirección IP del nodo maestro.

  2. Distribuya los directorios flink y nexmark, así como las configuraciones de variables de entorno, a cada nodo core.

    Reemplace las direcciones IP con sus valores reales.
    scp -r flink 192.168.0.1:/mnt/disk1/
    scp -r flink 192.168.0.2:/mnt/disk1/
    scp -r nexmark 192.168.0.1:/mnt/disk1/
    scp -r nexmark 192.168.0.2:/mnt/disk1/
    scp ~/.bashrc 192.168.0.1:~/
    scp ~/.bashrc 192.168.0.2:~/

    Una vez completada la distribución, ejecute source ~/.bashrc en cada nodo core para que las variables de entorno surtan efecto.

  1. En el nodo maestro, inicie el clúster de Flink.

    flink/bin/start-cluster.sh
  1. Inicialice el entorno de pruebas de Nexmark. Este script configura el Metric Reporter necesario en cada nodo.

    nexmark/bin/setup_cluster.sh

Establecer límites de recursos

Después de iniciar el clúster de Flink, debe usar cgroups para limitar el uso de CPU de cada proceso TaskManager al 75%. Esto evita que los TaskManagers pierdan la conexión debido a tiempos de espera de heartbeat causados por contención de recursos.

Ejecute los siguientes comandos en todos los nodos donde se ejecuten TaskManagers, incluido el nodo maestro:

yum install -y libcgroup libcgroup-tools
cgcreate -t root:root -a root:root -g cpu,memory:mygroup
echo 100000 > /sys/fs/cgroup/cpu/mygroup/cpu.cfs_period_us
echo 300000 > /sys/fs/cgroup/cpu/mygroup/cpu.cfs_quota_us
echo $((12 * 1024 * 1024 * 1024)) > /sys/fs/cgroup/memory/mygroup/memory.limit_in_bytes
jps | grep TaskManagerRunner | awk '{print $1}' | xargs cgclassify -g cpu,memory:mygroup

Aquí, cpu.cfs_quota_us / cpu.cfs_period_us = 300000 / 100000 = 3, lo que significa que el cgroup puede usar un máximo de 3 núcleos de CPU (75% de 4 vCPU).

Nota

En el entorno totalmente administrado de Realtime Compute for Apache Flink, no es necesario establecer manualmente un límite de uso de recursos. El servicio aprovecha por completo los recursos de cómputo adquiridos.

Ejecutar Nexmark

En el nodo maestro, ejecute el siguiente comando y espere a que finalice para ver los resultados:

nexmark/bin/run_query.sh q0,q1,q2,q3,q4,q5,q7,q8,q9,q10,q11,q12,q14,q15,q16,q17,q18,q19,q20,q21,q22