【问题标题】:How good is the parallelism of Stream Processing Systems?流处理系统的并行性有多好?
【发布时间】:2019-06-29 11:31:41
【问题描述】:

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

map -> keyBy -> window -> aggregate

如果我的keyBy 操作员负责获取每个传感器的 ID,而我只有 2 个传感器,则 2 的并行度足以满足我的应用程序(免责声明:我不想考虑窗口有多大或元组现在适合内存)。 如果我有 1000 个传感器,增加并行度会非常好。假设有 100 个节点。 但是如果我的并行度设置为 100 并且我只处理 2 个传感器的元组怎么办。我会有 98 个节点空闲吗? Spark、Flink 或 Storm 是否知道它们不必将数据 shuffle 到 98 个节点?

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

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

谢谢

【问题讨论】:

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


    【解决方案1】:

    keyBy()重点 是将具有相同密钥的项目分配给相同的操作员。如果您有 2 个键,则您的项目实际上被分成 2 组,并且此流的最大并行度为 2。键为 A 的项目将发送给一个操作员,而键为 B 的项目将发送给另一个操作员.

    在 Flink 中,如果您只想将项目的处理分配给所有并行运算符,那么您可以使用 DataStream::shuffle()

    【讨论】:

    • 是的。这已经很好了。我想要一个使开发人员的工作更加困难的用例。假设场景是否随时间改变键的数量。有时只有 2 个键,有时 200 个不同的键。有哪些不同的方式来实现 Flink 应用程序来应对这些场景。我想有不同的方法可以获得良好的性能。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-19
    • 1970-01-01
    • 2015-01-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多