2016-06-08 185 views
0

我有两个流。一个是事件流,另一个是数据库更新流。我想用从数据库更新流构建的信息丰富事件流。流负载平衡

事件流非常庞大,使用5个字段进行分区。这给了我很好的分配。数据库流比较少烦人,并使用两个字段进行分区。我目前使用两个公共字段连接两个流,并使用flapMap来丰富第一个流。 flatMap运算符使用ValueState维护状态,该状态由两个公共字段自动键入。

我发现事件流中的负载在两个常见字段中倾向于倾斜。这会导致跨越flapMap实例的负载均衡不均匀,并且少数实例的负载比其他实例大10倍左右。

我想更好的方法是在所有flatMap实例中广播数据库更新流,并根据其现有的分区方案转发事件流。然而,问题在于,因为没有为连接运算符指定键,所以无法使用ValueState。

除了实现自定义逻辑来手动提取密钥并更新维护状态之外,还有什么我可以做的吗?

有没有更简单的方法,我失踪了?

回答

0

您可以使用Checkpointed接口与CoFlatMapFunction检查广播的数据库更新,而不是使用键值状态接口。