我正在编写一个flink流程序,其中需要使用一些静态数据集(informationbase,ib)来丰富用户事件的数据流。
例如,假设我们有一个买家的静态数据集,我们有一个传入的clickstream事件,对于每个事件,我们要添加一个布尔标志,指示事件的执行者是否是买家。
实现这一点的理想方法是按用户id对传入流进行分区,让买家在一个数据集中设置为可用,再按用户id对数据集进行分区,然后在这个数据集中查找流中的每个事件。
既然flink不允许在流式程序中使用数据集,我该如何实现上述目标?
另一种选择是使用托管操作员状态来存储买家集,但如何保持此状态按用户id分布,以避免在单个事件查找中出现网络i/o?在内存状态后端的情况下,状态是由某个键分配的,还是在所有操作符子任务之间复制的?
在flink流媒体程序中,实现上述丰富需求的正确设计模式是什么?
1条答案
按热度按时间u5i3ibmn1#
我将按用户的id设置流的键,并使用richflatmap进行扩展。在richflatmap的open()方法中,可以加载该用户的静态买方标志,并将其缓存在布尔字段中。