请教各位大佬,我现在有个多流join计算的场景,不知道该如何进行优化。
电商业务有3个kafka消息源,消息结构描述如下(只列举主要字段):
market_act(营销活动):
{act_id:营销活动id,start_time:活动开始时间,end_time:活动结束时间,shop_id:活动的门店}
new_member(新增会员): {member_id:新会员id,act_id:吸引会员的营销活动id,create_time:新会员生成时间}
orders(订单):{order_no:订单号,amt:订单金额,member_id:会员id,create_time:订单时间,shop_id:下单的门店}
需求:按活动统计活动期间新会员产生的订单金额
伪sql:
select act_id,count(1) as order_num,sum(amt) as order_amt
from orders t1
inner join new_member t2 on t1.member_id=t2.member_id
inner join market_act t3 on t2.act_id=t3.act_id
where t1.create_time between t3.start_time and t3.end_time ;
目前做法:
将 market_act 和 new_member 两个维表消息放到redis缓存,
flink接orders 消息,在flatmap中读取redis维表信息,判断当前订单是否属于某个有效的活动,
是则输出{act_id,order_no,amt,member_id},然后sink到db。
我感觉这种做法没有充分发挥flink流的特性,有没有办法在flink里面直接join这3个流,搭配状态,进行计算?
[email protected]