RisingWave Demo:直播流量指标分析

文摘   科技   2024-07-04 15:53   中国香港  

直播因其能与观众进行实时互动的独特优势,成为目前最为流行的娱乐形式之一。想要优化直播效果,有许多指标需要跟踪。最常见的指标比如:人流量、评论数量、直播卡顿时长等等。

本教程将分享如何使用 RisingWave 监控直播流量指标。我们为本教程设置了一个演示集群,以便大家可以轻松尝试。

1开始之前

  • 确保您的环境中安装了 Docker[1]Docker Compose[2]。请注意,Docker Compose 包含在 Windows 和 macOS 的 Docker Desktop 中。如果您使用 Docker Desktop,请确保在启动演示集群之前已经运行。

  • 确保 PostgreSQL[3]交互式终端 psql 已安装在您的环境中。有关详细说明,请参阅下载 PostgreSQL[4]

2启动演示集群

在演示集群中,我们打包了 RisingWave 和一个工作负载生成器。一旦集群启动,工作负载生成器将开始生成随机流量并将它们发送到 Kafka。

首先,将 RisingWave[5]仓库克隆到环境中。

git clone https://github.com/risingwavelabs/risingwave.git

导航到 integration_tests/livestream 目录,并从 docker compose 文件启动演示集群。

cd risingwave/integration_tests/livestream
docker compose up -d

命令未找到?

Compose V2 中的默认命令行句法以 docker compose 开头。详见 Docker 文档[6]
如果您使用的是 Compose V1,请改用 docker-compose

必要的 RisingWave 组件将被启动,包括 Frontend 节点、Compute 节点、Meta 节点和 MinIO。工作负载生成器将开始生成随机数据并将它们发送到 Kafka topic。在这个演示集群中,物化视图的数据将存储在 MinIO 实例中。

连接到 RisingWave 以管理数据流并执行数据分析。

psql -h localhost -p 4566 -d dev -U root

3将 RisingWave 连接到数据

我们已经使用演示集群在 Kafka 中设置了数据流(以 JSON 格式),我们可以使用以下 SQL 语句连接到这些流。数据包含了直播流量指标的信息以及每个流的独特观众数量。

CREATE MATERIALIZED VIEW live_video_qos_10min AS
SELECT
    window_start AS report_ts,
    room_id,
    SUM(video_total_freeze_duration) AS video_total_freeze_duration,
    AVG(video_lost_pps) AS video_lost_pps,
    AVG(video_rtt) AS video_rtt
FROM
    TUMBLE(
        live_stream_metrics,
        report_timestamp,
        INTERVAL '10' MINUTE
    )
GROUP BY
    window_start,
    room_id;

RisingWave 已连接到流,但尚未开始消费数据。要处理数据,我们需要定义物化视图。创建物化视图后,RisingWave 将从指定的偏移量开始消费数据。

4创建物化视图

在本教程中,我们将创建不同的物化视图,用于跟踪直播流量性能和观众数量。

设置直播流量性能的物化视图

第一个物化视图将总结每个流每 10 分钟的流量性能。为了创建它,我们将使用 tumble 函数将每个事件映射到一个 10 分钟的窗口,并根据每个房间聚合以计算流卡顿的时长、每秒平均丢包数和平均往返时间。

CREATE MATERIALIZED VIEW live_video_qos_10min AS
SELECT
    window_start AS report_ts,
    room_id,
    SUM(video_total_freeze_duration) AS video_total_freeze_duration,
    AVG(video_lost_pps) AS video_lost_pps,
    AVG(video_rtt) AS video_rtt
FROM
    TUMBLE(
        live_stream_metrics,
        report_timestamp,
        INTERVAL '10' MINUTE
    )
GROUP BY
    window_start,
    room_id;

我们可以使用以下 SQL 语句查询结果。

SELECT * FROM live_video_qos_10min ORDER BY room_id, report_ts;

这里是一个示例结果。

report_tsroom_idvideo_total_freeze_durationvideo_lost_ppsvideo_rtt
2022-10-19 11:30:00+00:00399878395015284.64286196.21429
2022-10-19 11:40:00+00:00399878395036354.66667196.53333
2022-10-19 11:50:00+00:0039987839506034.09091175.18182
2022-10-19 11:30:00+00:0065850832714314.32143201.35714
2022-10-19 11:40:00+00:0065850832736195.23333191.86667

设置观众数量的物化视图

接下来,我们将设置两个物化视图来跟踪观众数量。

第一个物化视图将每分钟跟踪整个直播网站的独特观众数量。我们将使用 tumble 函数将每个事件映射到一个一分钟的窗口,并计算每个时间窗口内的不同观众数量。

-- 实时总 UV 数据看板。
CREATE MATERIALIZED VIEW total_user_visit_1min AS
SELECT
    window_start AS report_ts,
    COUNT(DISTINCT user_id) AS uv
FROM
    TUMBLE(
        live_stream_metrics,
        report_timestamp,
        INTERVAL '1' MINUTE
    )
GROUP BY
    window_start;

我们可以使用以下 SQL 语句查询结果。

SELECT * FROM total_user_visit_1min ORDER BY report_ts;

这里是一个示例结果。

report_tsuv
2022-10-19 11:35:00+00:002
2022-10-19 11:36:00+00:002
2022-10-19 11:37:00+00:002
2022-10-19 11:38:00+00:002
2022-10-19 11:39:00+00:002

第二个物化视图将每分钟跟踪每个主播的独特观众数量。我们将使用 tumble函数将每个事件映射到一个一分钟的窗口,然后按 room_id 分组,计算每个主播的独特观众数量。

CREATE MATERIALIZED VIEW room_user_visit_1min AS
SELECT
    window_start AS report_ts,
    COUNT(DISTINCT user_id) AS uv,
    room_id
FROM
    TUMBLE(
        live_stream_metrics,
        report_timestamp,
        INTERVAL '1' MINUTE
    )
GROUP BY
    window_start,
    room_id;

我们可以使用以下 SQL 语句查询结果。

SELECT * FROM room_user_visit_1min ORDER BY room_id, report_ts;

这里是一个示例结果。

report_tsuvroom_id
2022-10-19 11:35:00+00:0013998783950
2022-10-19 11:36:00+00:0013998783950
2022-10-19 11:37:00+00:0013998783950
2022-10-19 11:38:00+00:0013998783950
2022-10-19 11:39:00+00:0013998783950

完成后,运行以下命令以断开 RisingWave 的连接。

\q

可选:要删除容器和生成的数据,请使用以下命令。

docker compose down -v

5总结

在本教程中,我们学到了:

  • 如何分析直播流量指标。
  • 如何设置实时数据看板以跟踪独特观众数量。
这些数据指标不仅能帮助主播实时调整直播策略,还能帮助平台深入洞察用户行为进而优化产品,极大地改善用户体验。
本 Demo 只是抛砖引玉,欢迎大家充分利用 RisingWave 的强大功能挖掘其在直播领域的更多应用。

参考资料

   [1]

Docker: https://docs.docker.com/get-docker/

   [2]

Docker Compose: https://docs.docker.com/compose/install/

   [3]

PostgreSQL: https://www.postgresql.org/docs/current/app-psql.html

   [4]

下载 PostgreSQL: https://www.postgresql.org/download/

   [5]

RisingWave: https://github.com/risingwavelabs/risingwave




   [6]

Docker 文档: https://docs.docker.com/compose/migrate/#what-are-the-differences-between-compose-v1-and-compose-v2



关于 RisingWave 

RisingWave 是一款基于 Apache 2.0 协议开源的分布式流数据库,致力于为用户提供极致简单、高效的流数据处理与管理能力。RisingWave 采用存算分离架构,实现了高效的复杂查询、瞬时动态扩缩容以及快速故障恢复,并助力用户极大地简化流计算架构,轻松搭建稳定且高效的流计算应用。
RisingWave 始终聆听来自社区的声音,并积极回应用户的反馈。目前,RisingWave 已汇聚了 150+ 名开源贡献者和 3000+ 名社区成员。全球范围内,已有上百个 RisingWave 集群在生产环境中部署。

往期推荐

技术内幕

如何上手 RisingWave 👉 新手入门教程

RisingWave 中文用户文档上线,阅读更高效!

深入探索 RisingWave 中的高可用性与容错机制

深入理解 RisingWave 流处理引擎(三):触发机制

深入理解 RisingWave 流处理引擎(二):计算模型

深入理解 RisingWave 流处理引擎(一):总览

用户案例
视源股份(CVTE)IT 流计算应用历程
尘锋 SCRM 如何使用 RisingWave 实时打宽
RisingWave 在超百亿管理规模对冲基金公司中的应用
金融科技公司 Kaito 使用 RisingWave 实现实时智能化
龙腾出行如何通过 RisingWave 实现实时数据分析
RisingWave 助力乾象投资打造实时监控平台

RisingWave中文开源社区
RisingWave 是一款开源分布式 SQL 流数据库,致力于大幅降低流计算使用门槛与复杂度。RisingWave 已为全球超百家企业构建新一代流处理与分析平台。
 最新文章