You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@flink.apache.org by "Jiang Xin (Jira)" <ji...@apache.org> on 2023/04/20 08:51:00 UTC

[jira] [Commented] (FLINK-31373) PerRoundWrapperOperator should carry epoch information in watermark

    [ https://issues.apache.org/jira/browse/FLINK-31373?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17714492#comment-17714492 ] 

Jiang Xin commented on FLINK-31373:
-----------------------------------

[~zhangzp] I met the same issue with the following code.
{code:java}
@Test
public void testBoundedIterationWithEndInput() throws Exception {
    StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment();
    env.setParallelism(1);
    env.getConfig().enableObjectReuse();

    DataStream<Integer> inputStream = env.fromElements(1, 2, 3);

    DataStreamList outputs =
            Iterations.iterateBoundedStreamsUntilTermination(
                    DataStreamList.of(inputStream),
                    ReplayableDataStreamList.replay(inputStream),
                    IterationConfig.newBuilder().build(),
                    (variableStreams, dataStreams) -> {
                        DataStream<Integer> variables = variableStreams.get(0);
                        DataStream<Integer> result =
                                dataStreams
                                        .<Integer>get(0)
                                        .transform(
                                                "sum",
                                                BasicTypeInfo.INT_TYPE_INFO,
                                                new SumOperator());
                        return new IterationBodyResult(
                                DataStreamList.of(variables),
                                DataStreamList.of(result),
                                variables.flatMap(new TerminateOnMaxIter<>(10)));
                    });
    List<Integer> result = IteratorUtils.toList(outputs.get(0).executeAndCollect());
    result.forEach(r -> r.equals(60));
}

private static class SumOperator extends AbstractStreamOperator<Integer>
        implements OneInputStreamOperator<Integer, Integer>, BoundedOneInput {

    private int sum = 0;

    @Override
    public void processElement(StreamRecord<Integer> element) {
        sum += element.getValue();
    }

    @Override
    public void endInput() {
        output.collect(new StreamRecord<>(sum));
    }

    @Override
    public void finish() {
        output.collect(new StreamRecord<>(sum));
    }

    @Override
    public void close() {
        output.collect(new StreamRecord<>(sum));
    }
} {code}

> PerRoundWrapperOperator should carry epoch information in watermark
> -------------------------------------------------------------------
>
>                 Key: FLINK-31373
>                 URL: https://issues.apache.org/jira/browse/FLINK-31373
>             Project: Flink
>          Issue Type: Bug
>          Components: Library / Machine Learning
>    Affects Versions: ml-2.2.0
>            Reporter: Zhipeng Zhang
>            Priority: Major
>              Labels: pull-request-available
>
> Currently we use PerRoundWrapperOperator to wrap the normal flink operators such that they can be used in iterations.
> We already contained the epoch information in each record so that we know which iteration each record belongs to.
> However, there is no epoch information when the stream element is a watermark. This works in most cases, but fail to address the following use case:
>  - In DataStreamUtils#withBroadcast, we will cache the elements (including watermarks) from non-broadcast inputs until the broadcast variables are ready. When the broadcast variables are ready, once we receive a stream element we will process the cached elements first. If the received element is a watermark, the current implementation of iteration module fails (ProxyOutput#collect throws NPE) since there is no epoch  information.



--
This message was sent by Atlassian Jira
(v8.20.10#820010)