выяснилось, когда мы использовали ReducingState RecordStore.add (r), производительность колеблется, как показано,
без ReducingState: график стабильной производительности
с ReducingState: график колебания производительности
Общая производительность (падение более чем на 100%!): без Reducingstate.add VS с ReducingState.add
Может бытьлегко воспроизводить с помощью простого приложения, без контрольной точки, просто сохраняйте запись, также с помощью простой функции «суммирования» (фактически, с пустой функцией вы увидите тот же результат).Любая идея будет оценена.Что за невероятно очевидная проблема.
В основном, приложение просто хранит записи в состоянии, и мы измеряем, сколько записей в секунду в "JsonTranslator", что показано на графике.Разница между ними - всего одна строка, комментарий / не-комментарий "recStore.add (r)".
Понимание состояния повлияет на производительность, но так ли это работает?
DataStream<String> stream = env.addSource(new GeneratorSource(loop);
DataStream<JSONObject> convert = stream.map(new JsonTranslator(statsdUrl))
.keyBy(new KeySelector<JSONObject, AggregationKey>() {... ...})
.process(new ProcessAggregation(aggrDuration, statsdUrl))
.map(new PassthruFunction(statsdUrl));
public class ProcessAggregation extends ProcessFunction<JSONObject, JSONObject> {
private ReducingState<JSONObject> recStore;
public void processElement(JSONObject r, Context ctx, Collector<JSONObject> out) {
recStore.add(r); //this line make the difference
}