Apache Flink 如何处理倾斜数据?

2023-12-21

例如,我有一大堆单词,想统计每个单词的数量。问题是这些话是歪曲的。这意味着某些单词的频率会很高,但大多数其他单词的频率很低。在storm中,我们可以使用下面的方式来解决这个问题。首先对流进行随机分组,在每个节点中对窗口时间内本地的单词进行计数,最后更新计数到累积结果。 来自我的另一个question https://stackoverflow.com/questions/33446247/apache-flink-streaming-window-wordcount,我知道Flink只支持keyed Stream上的窗口,否则窗口操作不会是并行的。

我的问题是Flink中有没有好的方法来解决这种数据倾斜的问题?


DataStream API 目前不原生支持预聚合。原则上,可以为事件时间窗口添加类似组合器的功能。 IMO,这将是一个非常有价值的补充,但尚未完成。

但是,您可以自己实现此功能。 DataStream API 提供类似于 Storm Bolts 的低级操作员界面。该接口称为OneInputStreamOperator。此操作符类型使您可以完全控制。事实上,内置的运算符(例如Window运算符)也是基于该类的。

A OneInputStreamOperator可以这样应用:

DataStream<Tuple2<String,Integer> inStream = ...
DataStream<String> outStream = inStream
  .transform("my op", BasicTypeInfo.STRING_TYPE_INFO, new MyOISO());
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Apache Flink 如何处理倾斜数据? 的相关文章

随机推荐