Gestione el crecimiento del almacenamiento en tablas de Apache Paimon mediante el control de la retención de instantáneas, la caducidad automática de datos con particiones temporales y la eliminación de archivos huérfanos generados por trabajos con errores.
Solo Realtime Compute for Apache Flink con Ververica Runtime (VVR) 8.0.5 o posterior admite tablas de Apache Paimon.
Funcionamiento
Las tablas de Apache Paimon acumulan tres categorías de almacenamiento que requieren una limpieza periódica:
Instantáneas: Cada operación de escritura crea una nueva instantánea. Sin reglas de caducidad, las instantáneas se acumulan indefinidamente, lo que incrementa los costos de almacenamiento y el tiempo necesario para leer los metadatos de la tabla.
Particiones: En las tablas con particiones por fecha u hora, las particiones históricas que ya no son necesarias siguen ocupando espacio de almacenamiento a menos que configure su caducidad automática.
Archivos huérfanos: Cuando un trabajo falla o se reinicia de forma inesperada, pueden quedar archivos temporales sin confirmar en el directorio de la tabla. Estos archivos no se rastrean en ninguna instantánea y no se pueden eliminar mediante la caducidad normal de instantáneas.
Cada categoría requiere un enfoque de limpieza diferente, que se describe en las siguientes secciones.
Caducidad de instantáneas
Funcionamiento de la caducidad de instantáneas
Tres parámetros controlan cuándo caducan las instantáneas:
|
Parámetro |
Tipo |
Valor predeterminado |
Descripción |
|
|
Entero |
10 |
Número mínimo de instantáneas que se conservan |
|
|
Entero |
2,147,483,647 |
Número máximo de instantáneas que se conservan |
|
|
Duración |
|
Antigüedad máxima de la instantánea retenida más antigua |
La caducidad se activa cuando se cumple alguna de las siguientes condiciones:
El recuento de instantáneas supera
snapshot.num-retained.miny la instantánea más antigua tiene una antigüedad mayor quesnapshot.time-retainedEl recuento de instantáneas supera
snapshot.num-retained.max
El siguiente ejemplo muestra cómo interactúan estas reglas con snapshot.num-retained.min = 2 y snapshot.time-retained = 1h:
|
Nueva instantánea |
Todas las instantáneas tras la caducidad |
Motivo |
|
(snapshot-1, 10:00) |
(snapshot-1, 10:00) |
Solo hay 1 instantánea: recuento ≤ mín., sin caducidad |
|
(snapshot-2, 10:20) |
(snapshot-1, 10:00) (snapshot-2, 10:20) |
Hay 2 instantáneas: recuento = mín., sin caducidad |
|
(snapshot-3, 10:40) |
(snapshot-1, 10:00) (snapshot-2, 10:20) (snapshot-3, 10:40) |
Hay 3 instantáneas > mín., pero snapshot-1 solo tiene 40 min de antigüedad: aún no caduca |
|
(snapshot-4, 11:20) |
(snapshot-3, 10:40) (snapshot-4, 11:20) |
snapshot-1 ahora tiene 1 h 20 min de antigüedad: recuento > mín. Y antigüedad > time-retained, por lo que snapshot-1 y snapshot-2 caducan |
Las instantáneas se utilizan para restaurar datos históricos. Eliminar una instantánea demasiado pronto puede provocar dos tipos de fallos:
Fallos en consultas por lotes durante la lectura. Una consulta por lotes de larga duración lee una instantánea tomada al inicio de la consulta. Si esa instantánea caduca antes de que finalice la consulta, esta falla con un error
File xxx not found, Possible causes.Fallo al reiniciar trabajos de streaming. Cuando un trabajo de streaming se reinicia, continúa desde la última instantánea registrada. Si esa instantánea ha caducado, el trabajo no puede reiniciarse.
Establezca snapshot.time-retained como mínimo con la duración de su consulta por lotes más larga o de la ventana de reinicio del trabajo de streaming. Para trabajos de streaming con configuraciones de retención ajustadas, utilice Consumer Id para evitar que caduque la instantánea de la que depende un consumidor.
Configuración de parámetros de retención de instantáneas
Para modificar la retención de instantáneas, ejecute una instrucción ALTER TABLE o use sugerencias SQL en un borrador para la escritura de datos. Para obtener pasos detallados, consulte la sección "Modificar el esquema de una tabla de Apache Paimon" en Manage Apache Paimon catalogs.
Caducidad de particiones
En las tablas con particiones por tiempo, configure la caducidad de particiones para eliminar automáticamente las particiones históricas y liberar espacio de almacenamiento.
Los archivos de datos de una partición se eliminan por completo solo después de que caducan las instantáneas que contienen los eventos de caducidad de partición relacionados.
Funcionamiento de la caducidad de particiones
Tres parámetros controlan la caducidad de las particiones:
|
Parámetro |
Descripción |
Observaciones |
|
|
Periodo de validez de una partición |
Formato de duración; por ejemplo, |
|
|
Patrón para convertir un valor de partición en una cadena de tiempo |
Haga referencia a cada columna de clave de partición con el prefijo |
|
|
Patrón para convertir una cadena de tiempo en una marca de tiempo |
El valor predeterminado es |
Una partición se elimina cuando la diferencia entre la hora actual del sistema y la marca de tiempo convertida a partir del valor de la partición supera el valor de partition.expiration-time.
Conversión de valores de partición a marcas de tiempo
El sistema convierte los valores de partición a marcas de tiempo mediante un proceso de dos pasos:
partition.timestamp-patternconvierte un valor de partición en una cadena de tiempo, donde se hace referencia a cada columna de clave de partición como$<column-name>.partition.timestamp-formatterconvierte la cadena de tiempo en una marca de tiempo.
Ejemplos:
Clave de partición única dt con valores como dt=20240308:
'partition.timestamp-pattern' = '$dt',
'partition.timestamp-formatter' = 'yyyyMMdd'
Tres claves de partición year, month, day con valores como year=2023,month=04,day=21:
'partition.timestamp-pattern' = '$year-$month-$day'
-- No formatter needed: the default pattern yyyy-MM-dd matches the resulting string 2023-04-21
Cuatro claves de partición year, month, day, hour con valores como year=2023,month=04,day=21,hour=17:
'partition.timestamp-pattern' = '$year-$month-$day $hour:00:00'
-- No formatter needed: the default pattern yyyy-MM-dd HH:mm:ss matches the resulting string 2023-04-21 17:00:00
Configuración de parámetros de caducidad de particiones
Para configurar la caducidad de particiones, ejecute una instrucción ALTER TABLE o use sugerencias SQL en un borrador para la escritura de datos. Para obtener pasos detallados, consulte la sección "Modificar el esquema de una tabla de Apache Paimon" en Manage Apache Paimon catalogs.
Eliminación de archivos huérfanos
Cuando un trabajo falla o se reinicia de forma inesperada, pueden quedar archivos temporales sin confirmar en el directorio de la tabla. Estos archivos huérfanos no están asociados a ninguna instantánea y no se eliminan mediante la caducidad de instantáneas. Utilice el procedimiento del sistema remove_orphan_files para eliminarlos.
De forma predeterminada, solo se eliminan los archivos huérfanos con más de un día de antigüedad. Especifique una marca de tiempo opcional para eliminar los archivos huérfanos creados antes de un momento específico.
Eliminación de archivos huérfanos
Inicie sesión en la consola de Realtime Compute for Apache Flink y cree un script. Para obtener más información, consulte Create a script.
-
En el editor de scripts, introduzca la siguiente instrucción SQL. Reemplace los marcadores de posición con sus valores reales.
Marcador de posición
Descripción
<catalog-name>Nombre del catálogo de Apache Paimon
<database-name>Nombre de la base de datos donde reside la tabla
<table-name>Nombre de la tabla de Apache Paimon
CALL `<catalog-name>`.sys.remove_orphan_files('<database-name>.<table-name>');Para eliminar archivos huérfanos creados antes de una hora específica, agregue una marca de tiempo como segundo argumento:
CALL `mycat`.sys.remove_orphan_files('mydb.mytbl', '2023-10-31 12:00:00');Este ejemplo elimina los archivos huérfanos en
mycat.mydb.mytblque se crearon a más tardar a las 12:00:00 del 31 de octubre de 2023. Seleccione la instrucción SQL que introdujo y luego haga clic en Run en la esquina superior izquierda del editor de scripts. Una vez completada la operación, la pestaña Results muestra el número total de archivos eliminados.
Siguientes pasos
Para conocer los métodos comunes de optimización para tablas de clave principal de Apache Paimon, consulte Performance optimization.
Si un trabajo de streaming falla con el error
File xxx not found, Possible causesal leer desde una tabla de Apache Paimon, es posible que la instantánea de la que depende el trabajo haya caducado. Para consultar los pasos de solución de problemas, vea la sección "¿Qué hago si aparece el mensaje de error 'File xxx not found, Possible causes' al leer despliegues desde una tabla de Apache Paimon?" en FAQ about upstream and downstream storage.