sparkstreaming双流join

在用sparkstreaming做实时计算时,对两个数据流进行join,会因为网络延迟导致数据流批次不一致(spark中流式处理数据实际上是微批次处理,因此网络延迟会导致数据之间错开join不上)

而由于sprak对流式处理的理解实际还是批处理导致这种问题只能通过缓存到一个地方,后续进行join

 

 一般可以采用redis缓存到内存中,但如果数据量大的话会导致内存溢出,因此我们可以设置一个网络最大延迟时间作为缓存时间,时间到了对缓存的数据进行删除即可。

将orderInfo数据写入Redis

1.存什么? orderInfo的json字符串

2.用什么类型? String 如果使用的是Redis集群,则在存数据的时候是按照RedisKey进行hash存储的,如果是Hash类型的话,不同orderId的RedisKey都一样,这样数据会都存放在相同的节点上,导致数据倾斜,某个节点压力过大

3.redisKey怎么设计? "orderInfo:"+orderId

将orderDetail数据写入Redis

1.存什么? orderDetail的json字符串

2.用什么类型? Set 在不改变结果的前提下,能用幂等的框架就用幂等,为了防止重复消费

3.redisKey怎么设计? "orderDetail:"+orderId

将UserInfo数据写入Redis

1.存什么? userInfo的json字符串

2.用什么类型? String

3.redisKey怎么设计? "userInfo:"+userId

当然sparkstreaming计算实时数据时有弊端,开窗进行数据统计groupby的时候由于开窗滑动步长一般为微批次时间间隔的整数倍,会导致不完全在窗口范围中的数据统计漏掉

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值