具有键状状态的自定义分区

问题描述 投票:0回答:1

我有自己的分区技术,可为DataStream元组生成键,这些键的范围等于集群中节点的数量,例如,如果将并行度设置为4,则生成的键将为0、1,2和3,等等,然后应将每个密钥分区到同一节点,以使用键控状态进行更多的键控处理。

发生了什么:我已经使用keyBy实现了我的逻辑,所以我可以使用键控状态,但是它存在很大的偏斜,有些节点未收到任何记录,而其他节点则收到了多个记录。我尝试使用自定义分区,它根据需要进行了物理分区,但是如果不使用keyBy,我将无法使用键控状态。

是否有一种方法可以控制偏斜度或强制在可用节点上并行化键?或是否有办法覆盖keyBy中使用的分区技术?或是否可以通过自定义分区使用键控状态?

apache-flink flink-streaming
1个回答
0
投票

据我所知,对于像这样的键空间大小(大约)等于并行度的情况,还没有一个干净的解决方案。一种行之有效的方法是编写自己的KeySelector函数,并让它为每个分区计算密钥,以使这些密钥属于分配给不同工作人员的密钥组,但要弄清楚该怎么做。这并不简单。

已经有关于执行此操作的讨论on the user mailing list

© www.soinside.com 2019 - 2024. All rights reserved.