【问题标题】:Why is keyed stream ( on a keyBy ) creating skewed downstream execution?为什么键控流(在 keyBy 上)会创建倾斜的下游执行?
【发布时间】:2017-07-13 19:30:03
【问题描述】:

我有一个案例,其中有 8 个键(在 keyBy 上)并且插槽上的分布是倾斜的。我的并行度为 3,键控操作的分布是 5,2 和 1,单个插槽上有 5 个键。有没有办法确保键控操作的分布是平衡的。 (我们没有对键控流进行分区操作)

【问题讨论】:

    标签: apache-flink flink-streaming


    【解决方案1】:

    keyBy() 假设分布均匀。一般来说,这个问题可以通过实现人工密钥来解决。

    在内部,Flink 在你的密钥上调用 obj.hashCode() 并用它(以及一些额外的逻辑)分发你的记录。您可以实现自己的 KeySelector 来包装您的拧紧钥匙并实现更好的 hashCode() 方法。

    【讨论】:

    • “螺丝”键?键中没有倾斜。 keyBy() 的输出是 8 个不同的键控流,具有 8 个绝对不同的键,它们在时隙上变得不均匀。我认为我们在 obj.hashCode() 上为分区和分组存钱,这就是问题所在,这可能是不可避免的。 obj.hashCode()%n 可以相等,即使 obj(在我的例子中是一个字符串)不同并且 n 是恒定的(并行性?)
    • 对不起,也许我没有得到你的问题。你熟悉 Flink 中关键组的概念吗?键根据您在程序中定义的最大并行度进行分组。如果此运算符的最大并行度设置为 3,它可能会解决您的问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-22
    • 2016-09-12
    • 2015-06-07
    • 2016-02-17
    相关资源
    最近更新 更多