考虑到我们将计算给定时间段内多个温度传感器的平均值,并且此计算将使用SPE以并行方式进行。通常,此计算至少由四个UDF完成:
map -> keyBy -> window -> aggregate
如果我的keyBy
运算符负责获取每个传感器的ID,而我只有2个传感器,则2的并行度足以满足我的应用程序的要求(免责声明:我不想考虑该传感器有多大)窗口或元组暂时适合内存中)。
如果我有1000个传感器,增加并行度将非常好。假设有100个节点。
但是,如果将我的并行度设置为100并且仅处理2个传感器的元组,该怎么办?我将有98个空闲节点吗? Spark,Flink或Storm知道他们不必将数据随机整理到98个节点吗?
我问这个问题的动机是另一个问题。
谢谢
答案 0 :(得分:1)
keyBy()
的整点是将具有相同密钥的项目分发给同一运算符。如果您有2个键,则将您的项按字面意义分成两组,并且此流的最大并行度为2。具有键A
的项将发送给一个运算符,而具有键B
的项将被发送给发送给其他运营商。
在Flink中,如果您只想在所有并行运算符之间分配项目处理,则可以使用DataStream::shuffle()。