likes
comments
collection
share

流式数据库 RisingWave「Demo」:直播指标实时分析

作者站长头像
站长
· 阅读数 23

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

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

1. 开始之前

  • 确保您的环境中安装了 Docker 和 Docker Compose。请注意,Docker Compose 包含在 Windows 和 macOS 的 Docker Desktop 中。如果您使用 Docker Desktop,请确保在启动演示集群之前已经运行。
  • 确保 PostgreSQL 交互式终端 psql 已安装在您的环境中。有关详细说明,请参阅下载 PostgreSQL

2. 启动演示集群

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

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

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 文档。 如果您使用的是 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. 创建物化视图

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

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

第一个物化视图将总结每个流每 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

4.2 设置观众数量的物化视图

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

第一个物化视图将每分钟跟踪整个直播网站的独特观众数量。我们将使用 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 的强大功能挖掘其在直播领域的更多应用。

6. 关于 RisingWave

👨‍🔬加入 RW 社区,欢迎关注公众号:RisingWave 中文开源社区

转载自:https://juejin.cn/post/7387348384494420020
评论
请登录