2015-07-21 79 views
1

当我运行由我自己修改的wordcount样本时,我遇到了Flink 0.9.0 Release的一些问题。我发现计数窗口表现出与官方文档不同的本地窗口。而且我还在https://issues.apache.org/jira/browse/FLINK-1657中发现了一个固定的错误。这是正确的答案?任何帮助,将不胜感激!感谢很多计数窗口是本地或全球Flink 0.9.0版本

+0

你能分享一个你的输入,预期输出和实际输出的例子吗? –

+0

输入是四个字符串,我每5s发送SourceFunction中的每个字符串。该示例的核心代码是dataStream.flatMap(new WordCount.Tokenizer())。window(Count.of(8))。every(Count.of(4))。groupBy(0).sum(1).flatten ()。打印()。输出显示每个管道(env.setParallelism(4))都会严格地处理每个字符串。所以我认为也许计数窗口是本地 – zhangshengxiong

回答

3

现在,规范的答案是时间是全球的(因为时间总是全球化的),所有其他的窗口都是本地的或者没有明确定义的。

我们意识到了这个问题,目前正在为下一个版本修改API。您可以在这里阅读设计文档:https://cwiki.apache.org/confluence/display/FLINK/Streams+and+Operations+on+Streamshttps://cwiki.apache.org/confluence/display/FLINK/Time+and+Order+in+Streams

随着这些变化,我们试图弄清楚哪些窗口是并行处理的,什么是全局/局部的。

+0

谢谢,这可以帮助我很多 – zhangshengxiong

1

你需要组,通过将窗口前:

dataStream.flatMap(new WordCount.Tokenizer()).groupBy(0).window(Count.of(8)).every(Count.of(4)).sum(1).‌​flatten().print() 

数窗口是在本地组装(据我所知)。目前,Flink不提供任何订购保证,因此,本地建筑计数窗口可提供最佳性能。

+0

谢谢,你是对的!我做了很多关于窗口语义的测试,发现计数窗口是局部的,而时间窗口是全局的。你能给我一个规范的答案吗 – zhangshengxiong