stateSnapshots по требованию в mapWithState

Я выполняю потоковую передачу данных из Kafka (интервал между партиями 10 секунд), преобразую RDD в PairRDD, а затем сохраняю RDD в состояние с помощью mapWithState(). Ниже приведен код:

    JavaPairDStream<String, Object> transformedStream = stream
            .mapToPair(record -> new Tuple2<>(record.getKey(), record))
            .mapWithState(StateSpec.function(updateDataFuncGDM).numPartitions(32)).stateSnapshots();

transformedStream.foreachRDD(rdd -> {
        //if flag is true, put the RDD to a SQL table, and run a query to do some aggregations liek sum, avg etc
       // if flag is false, return;
        }

Теперь я продолжаю обновлять данные в состоянии, и для определенного события я изменяю флаг на true, и я помещаю эти данные в таблицу, и делаю мои вычисления.

Проблема здесь в том, что, так как я получаю "stateSnapshots" в каждом пакете, это неэффективно, а mapWithState сохраняет много данных в памяти, и по мере роста состояния это станет еще хуже. Кроме того, поскольку mapWithState проверяет данные после каждых 10 итераций, это занимает много времени, потому что данные очень большие.

Я хочу получить stateSnapshot состояния только по требованию (т.е. только в итерации foreachRDD, когда флаг имеет значение true) Но я не нашел много способов поиграться с состоянием

0 ответов

Другие вопросы по тегам