flink 计算直播间当前在线人数和在线时长

文章讨论了如何通过监听用户的心跳数据,在直播中精确计算观看时长,避免因开始和结束时间点的误差导致的数据不准确。作者描述了使用SQL查询和时间窗口技术来追踪用户进出直播间的实时情况。
摘要由CSDN通过智能技术生成

1. 场景

老师开直播, 看当前在线的人数, 并计算每个人的观看直播的总时长来计算是否完课。

用户在直播间每隔2s上报心跳。 中间用户离开不算观看时长。

2.实现逻辑:

  • 通过row_number 根据员工账号和直播id分组, 计算每次心跳的上一条记录和本条记录的时间差, 如果大于2s, 本次心跳就是一次观看的开始。   用户,直播id, 开始时间, 结束时间空写进mysql。 结束时间为空表示人在直播间呢。
  • 通过2s 间隔 的session 窗口,当有超2s没上报心跳,表示用户离开直播间,窗口关闭,得到用户, 直播id ,开始时间, 结束时间, 以前三列为主键写mysql
  • 最终得到了用户看一场直播的每一次进出的开始 结束时间。 没结束时间表示在直播间。

3. 问题

   以点的时间作为一次进入的开始时间和结束时间是有误差的。

   打开始的点之前,用户已经进来了, 把开始点作为进入时间, 晚了。

   打结束的点时,用户也没立刻离开, 把结束时间作为离开时间,早了。

  

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值