假设我们要计算给定时间段内多个温度传感器的平均值,这个计算将使用spe以并行方式进行。通常,此计算至少由四个自定义项完成:
map -> keyBy -> window -> aggregate
如果我的 keyBy
操作员负责获取每个传感器的id,而我只有2个传感器,2的并行度足以满足我的应用程序(免责声明:我现在不想考虑窗口或元组在内存中的大小)。如果我有1000个传感器,它将是非常好的增加平行度。假设有100个节点。但是如果我的并行度设置为100,而我只处理两个传感器的元组呢。我会有98个节点空闲吗?spark、flink或storm是否知道他们不必将数据洗牌到98个节点?
我问这个问题的动机是另一个问题。
我可以实现什么样的应用程序和场景来显示当前的流处理引擎(storm、flink、spark)不知道如何在内部优化并行性以便在网络上洗牌更少的数据?
他们能预测数据量或种类的任何特征吗?或者引擎盖下面的资源?
谢谢
1条答案
按热度按时间b09cbbtk1#
我的意思是
keyBy()
将具有相同密钥的项分发给同一操作员。如果你有2个键,你的项目实际上被分成2组,这个流的最大并行度是2。带密钥的项目A
将发送给一个操作员和带有密钥的项目B
将发送给另一个操作员。在flink中,如果您只想在所有并行操作符之间分配对项的处理,那么可以使用datastream::shuffle()。