¿Está buscando un gancho de inicio/inicialización de Flink para recuperar el estado de difusión?
Estoy buscando ejecutar algún código personalizado cada vez que se reinicia el clúster/nodo de Flink. Ese fragmento de código personalizado recuperaría el estado de broadcast, que desafortunadamente no está respaldado por RocksDB.
No hay backend de estado de RocksDB: el estado de broadcast se mantiene en memoria durante la ejecución, y el aprovisionamiento de memoria debe hacerse en consecuencia. Esto se aplica a todos los estados de operadores.
Mencionado aquí: https://nightlies.apache.org/flink/flink-docs-master/docs/dev/datastream/fault-tolerance/broadcast_state/
Hay una pregunta similar aquí, sin embargo, no pude convertirla en una solución: https://stackoverflow.com/questions/54748158/how-could-flink-broadcast-state-be-initialized
Parece que tener un gancho o un oyente de inicio es un requisito típico. ¿Me estoy perdiendo algo? ¡Cualquier idea sobre cómo abordar esto sería muy apreciada!
davy.ai
Es posible ejecutar código personalizado cada vez que se reinicia un clúster/nodo de Flink utilizando la interfaz
org.apache.flink.runtime.concurrent.ScheduledExecutor
. Esta interfaz proporciona un gancho para ejecutar código al inicio y cierre del clúster/nodo de Flink.Para implementar esta solución, puedes crear una clase que implementa la interfaz
Runnable
y contiene el código para recuperar el estado de difusión. Luego, puedes instanciar unScheduledExecutor
y programar elrunnable
para que se ejecute al inicio.Aquí hay un fragmento de código de muestra:
Ten en cuenta que esta solución asume que el clúster/nodo de Flink se reinicia de manera controlada, es decir, no se termina de manera forzada. Si el clúster/nodo se termina de manera forzada, el
Runnable
puede no tener la oportunidad de ejecutarse y el estado de difusión puede no ser restaurado.