gpt4 book ai didi

duplicates - Flink keyedstream 生成具有相同键和窗口时间戳的重复结果

转载 作者:行者123 更新时间:2023-12-01 12:04:11 29 4
gpt4 key购买 nike

这是我的 Flink 工作流程:

DataStream<FlinkEvent> events = env.addSource( consumer ).flatMap(...).assignTimestampsAndWatermarks( new EventTsExtractor() );
DataStream<SessionStatEvent> sessionEvents = events.keyBy(
new KeySelector<FlinkEvent, Tuple2<String, String> >()
{
@Override
public Tuple2<String, String> getKey( FlinkEvent value ) throws Exception {
return(Tuple2.of( value.getF0(), value.getSessionID ) );
}
} )
.window( TumblingEventTimeWindows.of( Time.minutes( 2 ) ) )
.allowedLateness( Time.seconds( 10 ) )
.aggregate( new SessionStatAggregator(), new SessionStatProcessor() );
/* ... */
sessionEvents.addSink( esSinkBuilder.build() );

第一次遇到

java.lang.Exception: org.apache.flink.streaming.runtime.tasks.ExceptionInChainedOperatorException: Could not forward element to next operator

flatMap 运算符中,任务不断重启。我通过相同的键和窗口时间戳观察到许多具有不同值的重复结果。

Q1:我猜重复是因为下游运算符(operator)在作业重启后重复消费消息。我说得对吗?解决了 ExceptionInChainedOperatorException 问题后,我重新提交了作业。我再次在第一个时间窗口中观察到重复项。在那之后,这项工作似乎很顺利(每个键在一个时间窗口内产生一个结果)。

Q2:副本从何而来?

最佳答案

... there should be one result per key for one window

这不(完全)正确。由于 allowedLateness,任何迟到事件(在允许迟到的时间段内)都将导致相关窗口的延迟(或换句话说,额外)触发。使用默认的 EventTimeTrigger(您似乎正在使用它),每个迟到的事件都会触发一个额外的窗口,并且将发出一个更新的窗口结果。

关于duplicates - Flink keyedstream 生成具有相同键和窗口时间戳的重复结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59504079/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com