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

How good is the parallelism of Stream Processing Systems?

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

map -> keyBy -> window -> aggregate

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

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

谢谢

整点keyBy()就是把相同key的items分发给同一个operator。如果您有 2 个键,则您的项目实际上被分成 2 组,并且该流的最大并行度为 2。具有键 A 的项目将被发送给一个操作员,而具有键 B 的项目将被发送给另一个运营商。

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