流处理系统的并行性有多好?

时间:2019-06-29 11:31:41

标签: parallel-processing spark-streaming apache-storm flink-streaming

考虑到我们将计算给定时间段内多个温度传感器的平均值,并且此计算将使用SPE以并行方式进行。通常,此计算至少由四个UDF完成:

map -> keyBy -> window -> aggregate

如果我的keyBy运算符负责获取每个传感器的ID,而我只有2个传感器,则2的并行度足以满足我的应用程序的要求(免责声明:我不想考虑该传感器有多大)窗口或元组暂时适合内存中)。 如果我有1000个传感器,增加并行度将非常好。假设有100个节点。 但是,如果将我的并行度设置为100并且仅处理2个传感器的元组,该怎么办?我将有98个空闲节点吗? Spark,Flink或Storm知道他们不必将数据随机整理到98个节点吗?

我问这个问题的动机是另一个问题。

  • 我可以实现什么样的应用程序和方案,从而表明当前的流处理引擎(Storm,Flink,Spark)不知道如何在内部优化并行性以在网络上减少随机数据?
  • 他们可以预测数据量或种类的任何特征吗?或引擎盖下的资源?

谢谢

1 个答案:

答案 0 :(得分:1)

keyBy()整点是将具有相同密钥的项目分发给同一运算符。如果您有2个键,则将您的项按字面意义分成两组,并且此流的最大并行度为2。具有键A的项将发送给一个运算符,而具有键B的项将被发送给发送给其他运营商。

在Flink中,如果您只想在所有并行运算符之间分配项目处理,则可以使用DataStream::shuffle()