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.

¿Dónde almacena Flink los temporizadores y el ttl del estado?

Estoy usando Flink con la versión 1.13.2.

Muchas de las funciones de proceso utilizan “registerProcessingTimeTimer” para limpiar el estado:

public class ProcessA ...
{
    @Override
    public void processElement(Object value, Context ctx, Collector<...> out) throws Exception
    {
        if (...)
        {
            ctx.timerService().registerProcessingTimeTimer(value.getTimestampMs() + 23232);
        }
    }

    @Override
    public void onTimer(long timestamp, OnTimerContext ctx, Collector<ValidationResult> out)
    {
        state.clear();
    }
}

Y muchas de las funciones de proceso usan “StateTtlConfig”:

public class ProcessB extends...
{
    @Override
    public void open(Configuration parameters)
    {
        StateTtlConfig ttlConfig = StateTtlConfig.newBuilder(Time.minutes(15))
            .setUpdateType(StateTtlConfig.UpdateType.OnCreateAndWrite)
            .setStateVisibility(StateTtlConfig.StateVisibility.NeverReturnExpired)
            .build();

        ValueStateDescriptor descriptor = ...
        descriptor.enableTimeToLive(ttlConfig);
    }

    @Override
    public void processElement(...) throws Exception
    {

    }
}

Y estoy usando RocksDB para la gestión del estado.

Preguntas:
– ¿Dónde se almacenarán los temporizadores creados por timerService? (¿Se almacenan en RocksDB o en la memoria de la tarea?)
– ¿Dónde se almacenará el tiempo de vida del estado creado por la configuración StateTtl?
– ¿Se guarda algo en la memoria cuando se usa timerService o StateTtl?
– Si tengo millones de claves, ¿qué método debería preferir?
– ¿La creación de millones de claves puede producir una excepción de memoria insuficiente cuando se usa timerService?
– ¿La creación de millones de claves puede producir una excepción de memoria insuficiente cuando se usa StateTtl?

Tags:  ,

Answer

  1. Avatar for davy.ai

    Los temporizadores creados por timerService se almacenarán en la memoria de tarea, no en RocksDB.
    El estado de tiempo de vida creado por StateTtlConfig se almacenará en el backend de estado de RocksDB.
    Al utilizar timerService o StateTtlConfig, algunos metadatos se almacenarán en la memoria, como la asignación de claves a temporizadores o configuraciones de TTL.
    Si tiene millones de claves, generalmente es mejor utilizar StateTtlConfig para administrar la expiración de estado en lugar de depender de los temporizadores creados por timerService.
    Si crea millones de claves y utiliza timerService, podría provocar una excepción de falta de memoria porque los temporizadores se almacenan en la memoria de tarea, que podría agotarse.
    Del mismo modo, la creación de millones de claves con StateTtlConfig podría provocar una excepción de falta de memoria porque el estado se almacena en RocksDB, que también tiene limitaciones de memoria. Es importante dimensionar y configurar correctamente su backend de estado de RocksDB.

Comments are closed.