作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个带有 flink kafka 消费者的流(kafka msgs 正在流式传输到一个主题上),我注意到一个我正在寻找解决的有趣行为。
当数据正在流入时,如果它在窗口“完成”之前停止,或者如果数据结束(在几个窗口之后)并且没有到达窗口的末尾,则管道的其余部分不会触发。
示例流程:
env.addSource(kafkaConsumer)
.flatMap(new TokenMapper())
.keyBy("word")
.window(TumblingEventTimeWindows.of(Time.seconds(10L)))
.reduce(new CountTokens())
.flatMap(new ConvertToString())
.addSink(producer);
private static class PeriodicWatermarks implements AssignerWithPeriodicWatermarks<String>{
private long currentMaxTimestamp;
private final long maxOutOfOrderness;
public PeriodicWatermarksAuto(long maxOutOfOrderness){
this.maxOutOfOrderness = maxOutOfOrderness;
}
@Override
public Watermark getCurrentWatermark() {
return new Watermark(currentMaxTimestamp - maxOutOfOrderness);
}
@Override
public long extractTimestamp(String t, long l) {
// this should be the event timestamp
currentMaxTimestamp = l;
logger.info("TIMESTAMP: " + l);
return l;
}
}
xxxxxxxx(8secs)------(gap)--(later more data)xxxxx
^(not processed) (until I get here)^
...xxxxxxxxxx(10secs)xxxxx(5secods)------(gap)--(later more data)xxxxx
(processed) ^(not processed) (until I get here)^
最佳答案
我会把这个留给后代,因为这个问题和我想的一样,与水印有关。时间戳器和制水器(来自assignTimestampsAndWatermarks)调用“getCurrentWatermark()”,并且由于我将基于传入实体的水印设置为固定数字(它们的时间戳 - 最大偏移量),它在看到新实体之前不会更新。
我的解决方案是某种计时器,如果在可配置的时间内没有看到数据,则最终将水印推进到下一个窗口。我将无法处理非常潜在的数据,但我认为这不会成为问题。这是 EventTime 处理的预期行为。
关于apache-kafka - 弗林克 : Window does not process data at end of stream,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46432368/
我是一名优秀的程序员,十分优秀!