es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿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!

Tags:  ,

Answer

  1. Avatar for 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 un ScheduledExecutor y programar el runnable para que se ejecute al inicio.

    Aquí hay un fragmento de código de muestra:

    import org.apache.flink.runtime.concurrent.ScheduledExecutor;
    
    public class BroadcastStateRecovery implements Runnable {
    
        // Aquí va el código para recuperar el estado de difusión
    
        @Override
        public void run() {
            // Programar la recuperación del estado de difusión al inicio
            recoverBroadcastState();
        }
    }
    
    ScheduledExecutor scheduledExecutor = ...; // Instanciar un ScheduledExecutor
    BroadcastStateRecovery recovery = new BroadcastStateRecovery();
    scheduledExecutor.scheduleOnStart(recovery);
    

    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.

Comments are closed.