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

Parallel processing 流处理系统的并行性有多好?,parallel-processing,spark-streaming,apache-storm,flink-streaming,Parallel Processing,Spark Streaming,Apache Storm,Flink Streaming,考虑到我们将要计算给定时间段内多个温度传感器的平均值,此计算将使用SPE以并行方式进行。通常,此计算至少由四个UDF完成: map -> keyBy -> window -> aggregate 如果我的代码> KEYBY < /Cult>操作员负责获取每个传感器的ID,而我只有2个传感器,那么2的并行性就足够了我的应用程序(免责声明:我不想考虑窗口有多大或者元组现在适合内存)。 如果我有1000个传感器,那么增加并行性将是非常好的。假设有100个节点。 但是,如果我的并行度

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

map -> keyBy -> window -> aggregate

如果我的代码> KEYBY < /Cult>操作员负责获取每个传感器的ID,而我只有2个传感器,那么2的并行性就足够了我的应用程序(免责声明:我不想考虑窗口有多大或者元组现在适合内存)。 如果我有1000个传感器,那么增加并行性将是非常好的。假设有100个节点。 但是,如果我的并行度设置为100,并且我只处理两个传感器的元组,该怎么办呢。我会有98个节点空闲吗?Spark、Flink或Storm是否知道他们不必将数据洗牌到98个节点

我提出这个问题的动机是另一个问题

  • 我可以实现什么样的应用程序和场景,这些应用程序和场景表明当前的流处理引擎(Storm、Flink、Spark)不知道如何在内部优化并行性,以便在网络上洗牌更少的数据
  • 他们能预测数据量或种类的任何特征吗?还是引擎盖下的资源
谢谢

keyBy()
的全部要点是将具有相同密钥的项目分发给同一操作员。如果您有2个键,您的项目将被分为2个组,此流的最大并行度为2。键为
A
的项目将发送给一名操作员,键为
B
的项目将发送给另一名操作员


在Flink中,如果您只想在所有并行操作符之间分配项目的处理,那么您可以使用

嗯。这已经很好了。我想要一个使开发人员的工作更加困难的用例。假设场景中的键数量随时间而变化。有时只有两个键,有时则有200个不同的键。实现Flink应用程序以应对这些场景的不同方式有哪些。我想有不同的方法来获得好的表现。