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

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

本教程将分享如何使用 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

RisingWave 是一款开源的分布式流处理数据库,旨在帮助用户降低实时应用的开发成本。RisingWave 采用存算分离架构,提供 Postgres-style 使用体验,具备比 Flink 高出 10 倍的性能以及更低的成本。

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

🧑‍💻想要了解和探索 RisingWave,欢迎浏览我们的官网:risingwave.com/

🔧快速上手 RisingWave,欢迎体验入门教程:github.com/risingwave

💻深入理解使用 RisingWave,欢迎阅读用户文档:zh-cn.risingwave.com/docs

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/771159.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

# Kafka_深入探秘者(9):kafka 集群管理

Kafka_深入探秘者(9):kafka 集群管理 一、kafka 集群概述 1、kafka 集群概述: 集群是一种计算机系统,它通过一组松散集成的计算机软件和/或硬件连接起来高度紧密地协作完成计算工作。在某种意义上,他们可…

Webpack: 并行构建

概述 受限于 Node.js 的单线程架构,原生 Webpack 对所有资源文件做的所有解析、转译、合并操作本质上都是在同一个线程内串行执行,CPU 利用率极低,因此,理所当然地,社区出现了一些以多进程方式运行 Webpack&#xff0…

SQL Server详细使用教程(包含启动SQL server服务、建立数据库、建表的详细操作) 非常适合初学者

文章目录 目录 前言 一、启动SQL server服务的三种方法 1.不启动SQL server服务的影响 2.方法一:利用cmd启动SQL server服务 3.方法二:利用SQL Server配置管理器启动SQL server服务 4.方法三:在服务管理器中启动SQL server服务 二、建立数据库…

数据结构 —— 图的遍历

数据结构 —— 图的遍历 BFS(广度遍历)一道美团题DFS(深度遍历) 我们今天来看图的遍历,其实都是之前在二叉树中提过的方法,深度和广度遍历。 在这之前,我们先用一个邻接矩阵来表示一个图&#…

【Python新手入门指南】pip安装失败、下载慢、pip换源

文章目录 前言一、换源的基本命令是什么?二、如何从官方来换源总结 前言 对于Python新手而言,使用pip安装包就会成为一个问题,因为国内下载慢,甚至可能下载不成功,课程要安装库,但是连库都安装不成功&…

20240705 每日AI必读资讯

📚Retool 刚刚发布了最新2024上半年《人工智能现状报告》 - 收集了约750名技术人员的意见 - 包括开发者、数据团队和各行业的领导者,了解如何利用人工智能产生真正的影响。 🔗 2024上半年《人工智能现状报告》Retool刚刚发布了最新-CSDN b…

瑞数信息:智能防护新时代,看AI如何筑起网络防线

AI时代,网络安全危与机并行。 尤其是近年来大火的大模型,对于网络安全行业的影响与其他行业有所不同,一方面,AI能够通过大幅降低了安全攻击的门槛,网络威胁的复杂性和多样性不断增加,如自动化攻击、零日漏…

记录问题:解决vscode找不到Python自定义模块,报错No module named ‘xxx‘

1. 背景 我非要用vscode,不用pycharm,哼! 2. 问题 由于 import xx 自定义的模块, python run 的时候会报错 No module named ‘xxx‘ 报错信息: Traceback (most recent call last):File "d:\work\sf_financ…

原创作品 —(金融行业)年金系统交互和视觉设计

金融行业软件交互设计要点:“简化操作流程,确保流畅易用,同时注重交易环境的安全可靠,通过个性化体验提升用户满意度,并及时收集反馈以持续优化。” 2.UI设计要点:“注重视觉效果与用户体验的平衡&#xff…

创新与技术管理国际研讨会(ISITM 2024)

随着全球科技日新月异的进步,创新与技术管理在国际舞台上的地位愈发重要。在这样的背景下,创新与技术管理国际研讨会(ISITM 2024)应运而生,将于2024年12月6日至8日在中国长沙隆重举行。本次会议将聚焦创新与技术管理等…

【Linux开发实战指南】基于TCP、进程数据结构与SQL数据库:构建在线云词典系统(含注册、登录、查询、历史记录管理功能及源码分享)

目录 项目演示: 1. 主界面 技术讲解: TCP连接 进程的并发 链表 SQLite3 IO对文件的读写 功能实现 实现逻辑 我遇到的问题: 服务器端代码思路解析 必要条件 步骤详解 客户端代码思路解析 步骤详解 服务器源码如下:…

论文学习——基于区域多向信息融合的动态多目标优化引导预测策略

论文题目:Guided prediction strategy based on regional multi-directional information fusion for dynamic multi-objective optimization 基于区域多向信息融合的动态多目标优化引导预测策略(Jinyu Feng a, Debao Chen b,c,d,∗, Feng Zou b,c, Fan…

【Git-驯化】一文学会git配置用户信息,git config用法细节

【Git-驯化】一文学会git配置用户信息,git config用法细节 本次修炼方法请往下查看 🌈 欢迎莅临我的个人主页 👈这里是我工作、学习、实践 IT领域、真诚分享 踩坑集合,智慧小天地! 🎇 免费获取相关内容文档…

深度解码:需求跟踪的艺术与实战应用

文章目录 引言一、需求跟踪的定义二、需求跟踪矩阵2.1 需求跟踪矩阵包含的内容2.2 跟踪矩阵层级2.3 需求属性2.4 参考表格 三、需求跟踪的收益3.1 确保商业价值最大化3.2 满足客户期望3.3 范围管理3.4 决策支持3.5 提高效率和效果3.6 文档化和沟通3.7 变更管理3.8 测量和改进 四…

ll命令在ubuntu下不能使用的解决方案

ll命令在ubuntu下不能使用的解决方案 问题: ll命令在ubuntu下不能使用, 在Ubuntu终端里执行ll,提示:command not found 解决方案: 打开当前用户目录下的.bashrc文件 找到下面的内容,将前面的“#”去掉 #alias llls -alF 然…

S272钡铼技术4G无线RTU支持多路DIN输入和模拟量转换至4G网络

钡铼第四代RTU S272是一款先进的工业级4G远程遥测终端,为各种远程工业数据采集和控制系统提供了高效解决方案。结合了现代通信技术和多功能的输入输出接口,S272不仅支持多路数字量和模拟量输入,还具备灵活的扩展性和强大的控制功能&#xff0…

数据库表导出到excel:前置知识1 ALL_TAB_COLS

ALL_TAB_COLS 当前用户可访问的表、视图和群集的列的相关信息 其中几个字段: OWNER:表,视图及群集的Owner   TABLE_NAME: 表,视图及聚簇的名称   COLUMN_NAME: 字段名   DATA_TYPE :字段的数据类型…

君子签区块链+AI,驱动组织实现高效合同管理、精准风险控制

在传统合同签署的过程中,企业、组织、机构都面临着合同签署与管理的诸多问题和挑战:合同种类繁多、数量庞大导致起草效率低下;管理流程繁琐、权限分散使得审批周期冗长且效率低下;合同签订版本难以精准复核,风险防控更…

7.基于SpringBoot的SSMP整合案例-表现层开发

目录 1.基于Restfu1进行表现层接口开发 1.1创建功能类 1.2基于Restful制作表现层接口 2.接收参数 2使用Apifox测试表现层接口功能 保存接口: 分页接口: 3.表现层一致性处理 3.1先创建一个工具类,用作后端返回格式统一类:…

如何利用小程序容器技术搭建小程序生态?

小程序,作为现代移动互联网生态中的重要基础设施,正以其独特的创新性和便捷性展现出勃勃生机。截至2021年,全网小程序的数量已经突破了700万,其中微信小程序的开发者达到了300万之多。这一数字不仅代表了小程序在技术层面的成熟度…