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.

¿Qué sucedería si una clave no es vista pero rocksdb tiene un estado sobre esa clave?

Digamos que tengo una función de proceso como esta (con un estado de backend de rocksdb):

public class Test extends KeyedProcessFunction<...>{
    private transient ValueState<integer> ...;
    ...

    @Override
    public void open(Configuration parameters) throws Exception {

        StateTtlConfig ttlConfig = StateTtlConfig
                .newBuilder(Time.minutes(10))
                .setUpdateType(StateTtlConfig.UpdateType.OnCreateAndWrite)
                .setStateVisibility(StateTtlConfig.StateVisibility.NeverReturnExpired)
                .cleanupInRocksdbCompactFilter(1000)
                .build();

        ValueStateDescriptor<integer> testDescr = new ValueStateDescriptor<integer>(
                "test",
                TypeInformation.of(Integer.class)
        );
        testDescr.enableTimeToLive(ttlConfig);
        ...
    }
}

kafkaSource
    .keyby(object -> object.getKey())
    .process(new Test())
    ...

Supongamos que esta es una aplicación de transmisión no acotada.
Digamos que he visto la clave llamada “orange”, pero solo una vez (o asumamos que la función de proceso se llama una vez para la clave “orange”), y asumamos que no habrá una clave llamada “orange”. ¿En ese caso, la clave “orange” permanecerá en rocksdb para siempre?

Tags:  ,

Answer

  1. Avatar for davy.ai

    No, la StateTtlConfig que se ha establecido para el ValueState con la clave “orange” especifica que el estado debe ser eliminado después de 10 minutos de inactividad. Incluso si ya no hay más instancias de la clave “orange” en el flujo, el estado para esta clave se eliminará después de 10 minutos de inactividad. Por lo tanto, no se mantendrá en el rocksdb para siempre.

Comments are closed.