Apache flink 具有键控状态的自定义分区
我有自己的分区技术,为数据流元组生成键,这些键的范围等于集群中的节点数,例如,如果我将并行度设置为4,则生成的键将为0、1、2和3,依此类推,然后每个键都应分区到同一节点,以使用键控状态执行更多键控处理 发生了什么:我已经使用keyBy实现了我的逻辑,这样我就可以使用一个键控状态,但是它有一个很大的偏差,一些节点没有收到任何记录,而其他节点收到了多个记录。我尝试过使用自定义分区,它按照我的要求进行了物理分区,但是如果不使用keyBy,我就不能使用keyed状态Apache flink 具有键控状态的自定义分区,apache-flink,flink-streaming,Apache Flink,Flink Streaming,我有自己的分区技术,为数据流元组生成键,这些键的范围等于集群中的节点数,例如,如果我将并行度设置为4,则生成的键将为0、1、2和3,依此类推,然后每个键都应分区到同一节点,以使用键控状态执行更多键控处理 发生了什么:我已经使用keyBy实现了我的逻辑,这样我就可以使用一个键控状态,但是它有一个很大的偏差,一些节点没有收到任何记录,而其他节点收到了多个记录。我尝试过使用自定义分区,它按照我的要求进行了物理分区,但是如果不使用keyBy,我就不能使用keyed状态 是否有一种方法可以控制偏斜或强制在
是否有一种方法可以控制偏斜或强制在可用节点上并行化关键点?或者有没有办法覆盖keyBy中使用的分区技术?或者有没有一种方法可以在自定义分区中使用键控状态?据我所知,对于键空间大小(大致)等于并行性的情况,没有一种干净的解决方案。一种有效的蛮力方法是编写您自己的
KeySelector
函数,并让它计算每个分区的键,使这些键属于分配给不同工作者的键组,但要想知道如何做到这一点并不简单
关于这样做,已经有过讨论