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)