GeminiStateBackend es un motor de almacenamiento clave-valor diseñado para el procesamiento de flujos y constituye el backend de estado predeterminado de Realtime Compute for Apache Flink. Este tema describe las ventajas del almacenamiento de backend de estado empresarial GeminiStateBackend y compara su rendimiento con el de RocksDBStateBackend.
Descripción general
La computación con estado representa un escenario complejo y desafiante en el procesamiento de flujos. El acceso a datos en este contexto presenta las siguientes características:
Existe una gran cantidad de accesos aleatorios y se realizan pocas consultas por rango.
El tráfico de datos y los puntos de acceso cambian constantemente. En consecuencia, distintos subprocesos paralelos del mismo operador utilizan diferentes modos de acceso a los datos.
GeminiStateBackend ofrece las siguientes ventajas:
-
Utiliza una nueva arquitectura y un diseño de estructura de datos para mejorar el rendimiento general del procesamiento de datos.
La arquitectura general de GeminiStateBackend se basa en la estructura de datos de árbol de fusión estructurado por registros (LSM tree). GeminiStateBackend proporciona tres capacidades: adaptación a cambios en el volumen de datos y las características de acceso, almacenamiento en niveles para datos frecuentes y poco frecuentes, y alternancia entre arquitecturas con caché y sin caché. También admite la estructura de almacenamiento hash que permite el acceso aleatorio. La comparación de rendimiento mediante Nexmark muestra que GeminiStateBackend ofrece un mejor rendimiento que RocksDBStateBackend. En aproximadamente la mitad de los casos de uso de GeminiStateBackend, el rendimiento supera en más del 70% al de los casos de uso de RocksDBStateBackend.
-
Admite la separación de computación y almacenamiento para eliminar la dependencia de los datos de estado respecto a los discos locales.
El espacio en discos locales es limitado. Por lo tanto, un despliegue con una gran cantidad de datos de estado suele enfrentar problemas de insuficiencia de espacio. En la mayoría de los casos, si un despliegue basado en RocksDBStateBackend tiene este problema, es necesario aumentar el paralelismo de los subprocesos o utilizar otros métodos para incrementar los recursos. GeminiStateBackend admite la separación de computación y almacenamiento, lo que permite que el almacenamiento de estado sea independiente de los discos locales. Esto evita fallos de despliegue causados por un exceso de datos de estado locales. Para obtener más información sobre la configuración relacionada con la separación de computación y almacenamiento, consulte Parameters for compute-storage separation.
-
Admite la separación adaptativa de claves y valores para mejorar significativamente el rendimiento de los despliegues que implican JOIN de flujo doble o JOIN de múltiples flujos.
El JOIN de flujo doble o de múltiples flujos es uno de los escenarios más complejos en el procesamiento de flujos y un caso típico donde el almacenamiento de estado encuentra cuellos de botella. GeminiStateBackend proporciona la función de separación de claves y valores para adaptarse a escenarios donde la tasa de éxito de las operaciones JOIN es baja o la longitud de los valores de los datos de estado es grande. Esto mejora significativamente el rendimiento de los despliegues que involucran estas operaciones. La función de separación de claves y valores admite ajustes adaptativos sin necesidad de configuraciones ni optimizaciones manuales. Las pruebas realizadas durante el festival de compras Double 11 de Alibaba Group demuestran que, tras habilitar esta función, el rendimiento de los despliegues puede aumentar entre un 50% y un 70% (o más), y la utilización de recursos de computación puede incrementarse en promedio un 50%. En escenarios típicos, la utilización de recursos de computación puede aumentar entre un 100% y un 200%. Para obtener más información sobre la configuración relacionada con la separación de claves y valores, consulte Parameters for key-value separation.
-
Utiliza savepoints ligeros, lo que acelera significativamente la creación de checkpoints y savepoints en despliegues que contienen una gran cantidad de datos de estado.
GeminiStateBackend admite savepoints de despliegue con una granularidad más fina y desacopla la función de checkpoint del mecanismo de compactación del LSM tree. Esto acelera y estabiliza la creación de checkpoints y savepoints. Asimismo, admite la función Native Incremental Savepoint. Esta función se utiliza junto con los savepoints nativos de Realtime Compute for Apache Flink para ofrecer un rendimiento similar al de los checkpoints, lo que mejora la disponibilidad de los savepoints.
-
Admite el ajuste adaptativo de parámetros, lo que evita la carga de trabajo asociada al ajuste manual.
En las tareas de procesamiento de flujos, cada operador tiene distintos modos de acceso al estado. En la mayoría de los casos, se requieren diferentes combinaciones de parámetros para lograr el rendimiento óptimo del almacenamiento de estado. Las configuraciones de estos parámetros involucran tecnologías subyacentes complejas, por lo que el ajuste manual implica altos costos de aprendizaje y comprensión. Para resolver este problema, GeminiStateBackend incorpora tecnología de ajuste adaptativo de parámetros. Durante la ejecución de un despliegue, las configuraciones se ajustan automáticamente según el modo actual de acceso a los datos y el tráfico para lograr un rendimiento óptimo en diversos escenarios. Las validaciones durante el festival de compras Double 11 de Alibaba Group indican que esta tecnología reduce el ajuste manual de parámetros en más de un 95% y aumenta el rendimiento por núcleo individual entre un 10% y un 40%. Para obtener más información sobre la configuración del ajuste adaptativo de parámetros, consulte Parameters for adaptive parameter tuning.
Comparación de rendimiento mediante Nexmark
En este ejemplo, se utilizan los casos de uso relacionados con cuellos de botella de estado y recursos de hardware de Nexmark para comparar el rendimiento entre RocksDBStateBackend y GeminiStateBackend.
El enlace de Nexmark corresponde a un sitio web de terceros. Al visitarlo, es posible que experimente retrasos o que no pueda acceder al sitio.
Los resultados muestran que GeminiStateBackend optimiza significativamente el rendimiento general (rendimiento por núcleo) de los despliegues. La siguiente tabla presenta dicha comparación.
|
Nombre del caso |
TPS/Núcleo de GeminiStateBackend |
TPS/Núcleo de RocksDBStateBackend |
Mejora de rendimiento con GeminiStateBackend |
|
q4 |
83.63 K/s |
53.26 K/s |
57.02% |
|
q5 |
84.52 K/s |
57.86 K/s |
46.08% |
|
q8 |
468.96 K/s |
361.37 K/s |
29.77% |
|
q9 |
59.42 K/s |
26.56 K/s |
123.72% |
|
q11 |
93.08 K/s |
48.82 K/s |
90.66% |
|
q18 |
150.93 K/s |
87.37 K/s |
72.75% |
|
q19 |
143.46 K/s |
58.5 K/s |
145.23% |
|
q20 |
75.69 K/s |
22.44 K/s |
237.30% |
Referencias
Para obtener más información sobre cómo crear, consultar o eliminar el estado de un despliegue, o restaurar un despliegue desde un estado específico, consulte Status set management.
Para obtener más información sobre las diferencias en la eficiencia de migración y el rendimiento de los despliegues durante la migración de datos de estado entre RocksDBStateBackend y GeminiStateBackend, consulte Overview.
Para obtener más información sobre el impacto de las modificaciones en las sentencias SQL de un despliegue en la compatibilidad entre el despliegue y los datos de estado, consulte SQL modifications and impact on compatibility.
Para obtener más información sobre las pruebas de rendimiento de Nexmark en Realtime Compute for Apache Flink, consulte Performance white paper (Nexmark performance testing).
Para obtener respuestas a preguntas frecuentes sobre checkpoints o savepoints en Realtime Compute for Apache Flink, consulte FAQ about checkpoints or savepoints of a deployment.