gpt4 book ai didi

parallel-processing - 在未加密的 Flink 流中强制执行平衡的并行性

转载 作者:行者123 更新时间:2023-12-02 19:24:05 25 4
gpt4 key购买 nike

基于我对Flink的理解,它引入了基于键(keygroups)的并行。但是,假设有人有大量未加密的流并且希望并行完成工作,那么实现这一目标的最佳方法是什么?

如果流有一些字段,人们可能会考虑任意按字段之一进行键控,但这并不能保证工作负载会得到适当的平衡。例如,因为该字段中的一个值可能出现在 90% 的消息中。因此我的问题:

如何在事先不知道流中有什么的情况下,在 Flink 中实现平衡的并行性


我能想到的一个潜在解决方案是为每条消息分配一个随机数(如果您希望并行度为 3,则为 1-3,如果您希望并行度更灵活,则为 1-1000)。但是,我想知道这是否是推荐的方法,因为它感觉不太优雅。

最佳答案

keyBy 是指定流分区的一种方法,它特别有用,因为您可以保证具有相同键的所有流元素将一起处理。这是使用 Flink 进行有状态流处理的基础。

但是,如果您不需要使用键分区状态,而是关心确保分区平衡良好,您可以使用 shuffle()rebalance() 导致随机或循环分区。查看docs更多细节。如果您想要更明确的控制,您还可以实现自定义分区程序。

顺便说一句,如果你确实想用随机数作为流的 key ,不要做类似keyBy(new Random.nextInt(n))的事情。关键选择器必须是确定性的。这是必要的,因为 key 不会随流记录一起移动——相反, key 选择器函数用于在需要时计算 key 。因此,对于随机键控,向您的事件添加另一个字段并用随机数填充它,并将其用作键。当您想使用键控状态或计时器但没有任何适合用作键的东西时,此技术很有用。

关于parallel-processing - 在未加密的 Flink 流中强制执行平衡的并行性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62620646/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com