Todos los productos
Search
Centro de documentos

Realtime Compute for Apache Flink:Funciones de tabla

Última actualización: Sep 03, 2026

Este tema describe las funciones de tabla, que incluyen almacenamiento remoto, poda de columnas, pushdown de predicados y compresión de registros.

Descripción general

  • remote storage: Para garantizar una baja latencia, los datos más recientes se conservan en discos locales. Los datos antiguos se migran de forma asíncrona al almacenamiento remoto para reducir los costos de almacenamiento local.

  • column pruning: Durante una consulta, solo se leen las columnas necesarias y se omiten las irrelevantes, lo que reduce la cantidad de datos leídos.

  • predicate pushdown: El servidor utiliza estadísticas de columnas para omitir bloques de datos que no coinciden con los filtros. Esto reduce la E/S de red y la sobrecarga de deserialización.

  • log compression: Esta función utiliza el mecanismo de compresión nativo de Arrow para reducir significativamente los costos de transferencia de red y almacenamiento.

Almacenamiento remoto

El almacenamiento remoto hace referencia a un sistema de almacenamiento externo más rentable y confiable, como Amazon S3, Hadoop Distributed File System (HDFS) o Alibaba Cloud OSS. De forma predeterminada, Fluss utiliza Alibaba Cloud OSS como su almacenamiento remoto.

  • Fluss utiliza el almacenamiento remoto para la organización de datos en niveles y la tolerancia a fallos.

  • En las tablas de registros, el almacenamiento remoto guarda segmentos de registro organizados por niveles.

  • En las tablas de clave primaria, el almacenamiento remoto guarda instantáneas y segmentos de datos del registro de cambios.

Mecanismo de registro remoto

Fluss es un sistema de almacenamiento de flujos donde los datos normalmente se consumen mediante lectura desde el final. Para garantizar una baja latencia, los datos más recientes se mantienen en discos locales. Fluss migra de forma asíncrona los datos antiguos al almacenamiento remoto para reducir los costos de almacenamiento local.

Configuración a nivel de tabla

Después de copiar los segmentos de registro al almacenamiento remoto, Fluss suele eliminar las copias locales para ahorrar espacio. Sin embargo, para mejorar el rendimiento de lectura, puede optar por conservar localmente un número específico de segmentos de registro recientes.

Parámetro

Tipo

Predeterminado

Descripción

table.log.tiered.local-segments

Integer

2

Especifica el número de segmentos de registro que se deben conservar localmente.

Configuración a nivel de clúster

Las siguientes opciones de configuración controlan el comportamiento de organización de registros en niveles:

Parámetro

Tipo

Predeterminado

Descripción

remote.log.task-interval-duration

Duration

1 minute

Intervalo de ejecución para las tareas de gestión de registros remotos, que incluyen operaciones de copia, limpieza y eliminación. Establecer este valor en 0 segundos deshabilita la función de registro remoto.

remote.log.index-file-cache-size

Memory size

1 GB

Tamaño total de la caché local para almacenar archivos de índice remotos.

remote.log-manager.thread-pool-size

Integer

4

Tamaño del pool de hilos para programar tareas de registro remoto.

remote.log.data-transfer-thread-num

Integer

4

Número de hilos para cargar y descargar archivos de registro remoto, incluidos archivos de datos, índices y metadatos.

log.segment.file-size

Memory size

1 GB

Controla el tamaño de cada archivo de segmento de registro. La retención y limpieza de registros operan a nivel de archivo, por lo que archivos más grandes resultan en menos archivos totales.

Esta opción, junto con la opción table.log.tiered.local-segments a nivel de tabla, determina el uso total del espacio en disco local. El valor predeterminado para esta opción es 1 GB.

Instantáneas remotas para tablas de clave primaria

  • Fluss distribuye los datos de una tabla de clave primaria en buckets. Cada bucket mantiene solo una réplica local y no tiene réplica seguidora.

  • Para evitar la pérdida de datos por fallos en el disco local, Fluss crea periódicamente instantáneas y las carga en el almacenamiento remoto.

  • Una instantánea contiene una copia de los datos y un desplazamiento de registro, que indica la posición del siguiente cambio que se debe leer después de crear la instantánea.

  • Si un nodo falla, Fluss puede descargar la instantánea del almacenamiento remoto y reproducir el registro de cambios subsiguiente para recuperar los datos en otro nodo.

  • La consistencia entre la instantánea y el desplazamiento de registro permite a los clientes cambiar sin problemas de una lectura completa (desde una instantánea) a una suscripción incremental (desde el registro de cambios), lo que evita la duplicación o pérdida de datos.

Configuración de instantáneas a nivel de clúster

Parámetro

Tipo

Predeterminado

Descripción

kv.snapshot.interval

Duration

10 minutes

Intervalo de creación de instantáneas para tablas de clave primaria.

kv.snapshot.scheduler-thread-num

Integer

1

Número de hilos para programar todas las tareas de instantáneas en el nodo local.

kv.snapshot.transfer-thread-num

Integer

4

Número de hilos para cargar y descargar archivos de instantáneas.

kv.snapshot.num-retained

Integer

1

Número máximo de instantáneas completadas que se deben conservar. Se recomienda establecer un valor alto para evitar eliminar una instantánea mientras un cliente la está leyendo.

Poda de columnas

La poda de columnas es una optimización que reduce la cantidad de datos leídos al leer únicamente las columnas requeridas y omitir las irrelevantes durante una consulta. Fluss admite la poda de columnas para lecturas de flujo, lo que lo convierte en uno de los pocos sistemas en la industria con esta capacidad para escenarios de procesamiento de flujos en tiempo real.

  • Fluss admite la poda de columnas tanto para tablas de registros como para los registros de cambios de tablas de clave primaria. Esta función reduce la E/S de almacenamiento, disminuye el tráfico de red y reduce la carga de análisis sintáctico en el cliente, lo que mejora significativamente el rendimiento de las consultas.

  • Tanto para el procesamiento por lotes como para el procesamiento de flujos, el sistema siempre procesa solo los campos necesarios, lo que maximiza la utilización de recursos.

Cuando un motor de cómputo, como Flink, ejecuta una consulta, analiza las columnas requeridas e indica a Fluss que devuelva solo esas columnas.

SELECT id, name FROM log_table WHERE timestamp > '2023-01-01'

Esta consulta lee únicamente las columnas id, name y timestamp. Fluss no lee otras columnas de la tabla, como address y status, desde el almacenamiento, lo que evita lecturas innecesarias.

Pushdown de predicados

El pushdown de predicados es una optimización del lado del servidor que se aplica únicamente a tablas de registros. El servidor evalúa los predicados de filtro con base en las estadísticas de columna (min, max y nullCount) de cada RecordBatch. Luego omite lotes completos que no pueden contener filas coincidentes, lo que reduce la E/S de red y la sobrecarga de deserialización.

Estadísticas de columna

Fluss recopila estadísticas de columna a nivel de RecordBatch cuando se escriben los datos. Estas estadísticas incluyen el mínimo (min), el máximo (max) y el conteo de nulos (nullCount) para cada columna. Fluss almacena estas estadísticas dentro del RecordBatch de Arrow, lo que permite al servidor evaluar predicados de filtro durante las lecturas.

Configuración

Utilice el parámetro table.statistics.columns para especificar las columnas para la recopilación de estadísticas. Se recomienda especificar explícitamente los nombres de las columnas. Alternativamente, puede establecer el valor en * para recopilar estadísticas de todos los tipos de columna compatibles.

Habilitar al crear una tabla

CREATE TABLE log_table (
  order_id BIGINT,
  item_id BIGINT,
  amount INT,
  address STRING
) WITH (
  'table.statistics.columns' = 'order_id,amount'
);

Habilitar para una tabla existente

ALTER TABLE log_table SET ('table.statistics.columns' = 'order_id,amount');
Importante

Esta función se aplica únicamente a los datos escritos después de habilitar la recopilación de estadísticas. No afecta a los datos históricos.

Tipos compatibles

Las estadísticas de columna son compatibles con los siguientes tipos de datos: BOOLEAN, TINYINT, SMALLINT, INT, BIGINT, FLOAT, DOUBLE, DECIMAL, STRING, CHAR, DATE, TIME, TIMESTAMP y TIMESTAMP_LTZ.

Los siguientes tipos de datos no admiten estadísticas y se excluyen automáticamente de la configuración: BYTES, BINARY, ARRAY, MAP y ROW.

Requisitos previos

  • El formato de registro debe ser Arrow (table.log.format = 'arrow'). Esto está habilitado de forma predeterminada.

  • Debe habilitar explícitamente las estadísticas de columna mediante la opción table.statistics.columns.

  • Esta función se aplica únicamente a tablas de registros.

Funcionamiento

Al leer datos, el servidor evalúa las estadísticas de columna y los predicados de filtro para cada RecordBatch. Si las estadísticas indican que un lote no puede contener ninguna fila coincidente, el servidor omite ese lote y no lo envía al cliente. El cliente de Flink vuelve a aplicar los filtros a los datos recibidos como medida de seguridad, lo que garantiza que la semántica de la consulta permanezca inalterada.

Compresión de registros

Fluss utiliza el mecanismo de compresión nativo de Arrow. Los datos comprimidos siguen cumpliendo con el estándar de formato Arrow. Fluss comprime cada columna de forma independiente, lo que permite que funcione la poda de columnas y no afecta el rendimiento de las consultas.

Proceso de compresión

  • Para tablas de registros, el escritor en el lado del cliente comprime los datos y los escribe en el almacenamiento en un formato comprimido. Al leer los datos, el escáner de registros los descomprime.

  • Para los registros de cambios de tablas de clave primaria, el servidor genera y comprime el registro.

Beneficios de la compresión

La compresión reduce significativamente los costos de transferencia de red y almacenamiento. Las pruebas de rendimiento muestran que ZSTD en el nivel de compresión 3 puede lograr una relación de compresión de aproximadamente 5:1 (por ejemplo, comprimir 5 GB de datos a 1 GB). La reducción en la sobrecarga de red también aumenta el rendimiento de lectura y escritura.

Configuración

Parámetro

Predeterminado

Descripción

table.log.arrow.compression.type

ZSTD

Algoritmo de compresión. Valores válidos:

  • NONE

  • LZ4_FRAME

  • ZSTD

table.log.arrow.compression.zstd.level

3

Nivel de compresión ZSTD.

Los valores válidos oscilan entre 1 y 22.

Ejemplo de configuración

-- Set the compression algorithm to ZSTD and the compression level to 2
CREATE TABLE log_table (
  order_id BIGINT,
  item_id BIGINT,
  amount INT,
  address STRING
) WITH (
  'table.log.arrow.compression.type' = 'ZSTD',
  'table.log.arrow.compression.zstd.level' = '2'
);
Importante
  • La configuración de compresión se aplica únicamente a tablas donde table.log.format='arrow'.

  • Si table.log.format está establecido en 'indexed', Fluss ignora la configuración de compresión.