我有两个流。一个是事件流,另一个是数据库更新流。我想用从DB更新流构建的信息来丰富事件流。
事件流非常庞大,并使用5个字段进行划分。这给了我很好的分布。DB流要少得多,并且使用两个字段进行分区。我目前正在使用两个公共字段连接这两个流,并使用flapMap来丰富第一个流。flatMap操作符使用ValueState来维护状态,该状态由两个公共字段自动设置关键字。
我发现事件流中的负载在两个公共字段方面倾向于倾斜。这会导致flapMap实例之间的负载平衡不均衡,少数实例的负载大约是其他实例的10倍。
我认为更好的方法是跨所有flatMap实例广播DB更新流,并根据其现有的分区方案简单地转发事件流。然而,问题是,因为没有为connect操作符指定键,所以我不能使用ValueState。
除了实现自定义逻辑来手动提取键和更新维护状态之外,我还能做什么吗?
有没有我遗漏的更简单的方法?
发布于 2016-06-10 04:28:25
您可以使用CoFlatMapFunction实现Checkpointed接口,以便为广播的DB更新设置检查点,而不是使用键值状态接口。
https://stackoverflow.com/questions/37714788
复制相似问题