为什么在 mapWithState 中相同的元素都被打印

Why are all elements printed although they are the same in mapWithState

我正在向 JavaPairDStream 发送同一个对象 3 次。我正在更新它的状态,但它已保存 3 次。打印 JavaPairDStream 证实了这一点。

Function3<InputMessageKey, Optional<InputMessage>, State<InputMessage>, Tuple2<InputMessageKey, InputMessage>> mappingFunction = new Function3<InputMessageKey, Optional<InputMessage>, State<InputMessage>, Tuple2<InputMessageKey, InputMessage>>() {
        @Override
        public Tuple2<InputMessageKey, InputMessage> call(InputMessageKey key, Optional<InputMessage> value, State<InputMessage> state) {
            InputMessage inputMessage = value.get();
            Tuple2<InputMessageKey, InputMessage> output = new Tuple2<>(key, inputMessage);
            state.update(inputMessage);
            return output;
        }
    };

打印流:

(com.input.InputMessageKey@220593a0,com.input.InputMessage@781bfd72)
(com.input.InputMessageKey@220593a0,com.input.InputMessage@781bfd72)
(com.input.InputMessageKey@220593a0,com.input.InputMessage@781bfd72)

三次都没有保存。您将返回在函数末尾创建的 Tuple2 对象,这就是打印出来的内容。如果您想查看已保存的内部状态,请在图表中使用 JavaMapWithStateDStream.stateSnapshots 而不是迭代 mapWithState.

的输出