我正在写一个Flink流程序,其中我需要使用一些静态数据集(信息库,IB)来丰富用户事件的DataStream。
例如,假设我们有一个买家的静态数据集,我们有一个传入的事件点击流,对于每个事件,我们想要添加一个布尔标志来指示事件的实施者是否是买家。
实现这一点的理想方法是按用户id划分传入的流,让买家集在DataSet中可用,并再次按用户id划分,然后在该DataSet中查找流中的每个事件。
由于Flink不允许在流媒体程序中使用DataSets,我如何实现以上功能?
另一种选择是使用Managed Operator State来存储买家集合,但是我如何才能保持此状态按用户id分布,以避免在单个事件查找中出现网络i/o?在内存状态后端的情况下,状态是保持按某个键分布,还是跨所有运算符子任务复制?
在Flink流程序中实现上述丰富需求的正确设计模式是什么?
发布于 2018-04-06 23:15:04
我将通过user_id对流进行键控,并使用RichFlatMap来进行丰富。在RichFlatMap的open()方法中,您可以加载该用户的静态买方标志,并将其缓存在布尔型字段中。
https://stackoverflow.com/questions/49645285
复制相似问题