流式数据库 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
SELECTwindow_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
FROMTUMBLE(live_stream_metrics,report_timestamp,INTERVAL '10' MINUTE)
GROUP BYwindow_start,room_id;

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

4. 创建物化视图

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

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

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

CREATE MATERIALIZED VIEW live_video_qos_10min AS
SELECTwindow_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
FROMTUMBLE(live_stream_metrics,report_timestamp,INTERVAL '10' MINUTE)
GROUP BYwindow_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
SELECTwindow_start AS report_ts,COUNT(DISTINCT user_id) AS uv
FROMTUMBLE(live_stream_metrics,report_timestamp,INTERVAL '1' MINUTE)
GROUP BYwindow_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
SELECTwindow_start AS report_ts,COUNT(DISTINCT user_id) AS uv,room_id
FROMTUMBLE(live_stream_metrics,report_timestamp,INTERVAL '1' MINUTE)
GROUP BYwindow_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.mzph.cn/news/866029.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

python访问mongoDB

pip install pymongo1.建立连接 (1)模块引用 import pymongoClientMongoClient(host10.90.9.101,port27017)(2)访问数据库 dbclient.myDBdbconn.get_database("myDB")2.集合操作 (1)插入文档 colldb.get_collection(…

docker-compose version is obsolete

如果更新了docker或者docker-desktop 启动时候发现有 version is obsolete警告 删除yml第一行的version字段 上社区原文 Technically you can still define it… But you will get the warning you observed, and it won’t be used, as docker compose v2 (the cli plugin…

关于TaOTUB1的信息总结

关于TaOTUB1的信息总结 文献标题: Reducing expression of TaOTUB1s decreases tiller number in wheat 核心内容: 背景和目的: 小麦的分蘖数量是影响产量的重要农艺性状。OTUB1在水稻中被发现能够调控分蘖数量,而在小麦中的功能尚不明确。本研究旨在通过鉴定和分…

C++视觉开发 四.手势识别

本章记录传统手势识别,在表示0-5六个数值时的识别问题。例如识别剪刀石头布,手势,以及其表示的动作。在识别时将手势中的凹陷区域称为凸缺陷,其个数作为识别的重要依据。 需要注意,在凸缺陷个数为0时,无法…

细说QT程序高分屏适配

文章目录 高分屏适配适配屏幕缩放禁用屏幕缩放开启系统配置属性获取当前屏幕信息在Qt中实现高分辨率屏幕的适配,主要涉及对界面元素、字体大小和布局进行优化,以保证应用程序在不同分辨率和设备像素比率(DPI)的显示屏上均能正确显示。下面是一些关键步骤和技巧,用于在Qt应用…

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

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

简单实现利用飞书机器人推送消息给相关人员群的方法

利用的飞书的自定义机器人,将系统中的错误信息推送给技术群的功能。 飞书文档地址:开发文档 - 飞书开放平台 自定义机器人只能在群聊中使用的机器人,在当前的群聊中通过调用webhook地址来实现消息的推送。 配置逻辑可以看飞书的官方文档&am…

WEB攻防-XSS跨站反射型存储型DOM型标签闭合输入输出JS代码解析

文章目录 XSS跨站-输入输出-原理&分类&闭合XSS跨站-分类测试-反射&存储&DOM反射型XSS存储型XSSDOM-base型XSS XSS跨站-输入输出-原理&分类&闭合 漏洞原理:接受输入数据,输出显示数据后解析执行 基础类型:反射(非持续…

CIDR地址表示法

CIDR地址表示法: 假如我们的服务器IP列表为:172.18.0.157~172.18.0.163,该如何表示呢? A. 172.18.0.157/163 B. 172.18.0.157/7 C. 172.18.0.157/24 D. 172.18.0.157/26 E. 172.18.0.0/26 F.1…

典型案例 | 基于全数字实时仿真的嵌入式DevOps解决方案

为丰富浙江省信息技术应用创新(以下简称“信创”)产业生态,在全社会各领域形成示范效应,浙江省经信厅联合省密码管理局开展2023年浙江省深化信创典型案例评选工作。 经过征集申报、专家评选、名单公示等程序,确定36个…

实现前端项目自动构建和部署(Gitee Go)

前言 相信所有的前端开发者都希望将自己的代码部署在服务器上让所有人都能访问到,但是却不知道如何进行部署。其实要是实现代码上线非常简单,我们只需要将build之后的代码上传到服务器,然后通过Nginx起一个服务指向我们build后的代码就可以了…

Cocos 7.2~7.4

这几天没更新CSDN,跑去玩Cocos了。自从知道我的粉丝百分之十之八九都是假人,更新确实没什么动力了。主要还是把这边当成一个日记本吧。 选择cocos的原因也很简单。会点js,技术栈比较接近,上手估计也快。简单记录下这几天的内容 主…

@amap/amap-jsapi-loader 实现高德地图中添加多边围栏,并可编辑,编辑后获得围栏各个点的经纬度

先上一张效果图 看看是不是大家想要的效果~ ❤️ 希望其中的小点能帮助大家,主要看怎么绘制在地图上的代码即可 1.第一步要加入项目package.json中或者直接yarn install它都可以 想必大家应该都会 "amap/amap-jsapi-loader": "0.0.7&qu…

信创产业发展迅速,信创测试需要伴随

信创产业的发展现状呈现出蓬勃的生机与活力。这一领域不仅构成了数据安全、网络安全的基石,更是新型基础设施建设的重要一环。信创产业涵盖了众多关键领域,如云计算、软件(包括操作系统、中间件、数据库及应用软件)、硬件&#xf…

如何使用云硬盘备份

云硬盘系统盘备份不能直接进行数据恢复,可以使用该备份创建系统盘。因为重装系统时,系统盘的ID会发生变化。 另外弹性云主机(windows)可以开机的时候,先选中虚拟机,按本地的F8 进入安全模式。

C语言作业笔记

1. 要找俩个数使其相加等于一个数,那么俩个数从头尾出发,先动一边,假设是尾先动,一开始俩个数相加大于sum(小于的话就动头),那么总有一时刻俩数相加小于sum,则就在那一刻停下来&…

关于5G和卫星

手机,已经串联起了我们生活中的一切环节。我们随时随地拿出手机,都能畅快地上网。 这一切是如此地理所当然,以至于我们甚至想不到这样不可思议的问题: 移动通信网络真的无处不在吗? 我们都知道,地球虽叫…

【QT】Qt智能指针QPointer、QSharedPointer、QWeakPointer、QScopedPointer

QPointer QPointer can only point to QObject instances. It will be automatically set to nullptr if the pointed to object is destroyed. It is a weak pointer specialized for QObject. QPointer只能指向QObject实例。如果指向的对象被销毁,它将自动设置为 …

毕业论文初稿写作方法与过程

毕业论文初稿写作方法与过程 毕业论文是大学生在学业结束前必须完成的一项重要任务,它不仅是对学生所学知识的综合运用,也是对学生研究能力和写作能力的检验。写好毕业论文初稿是完成高质量毕业论文的关键一步。下面将具体阐述毕业论文初稿的写作方法和过…

Redis 7.x 系列【18】事务

有道无术,术尚可求,有术无道,止于术。 本系列Redis 版本 7.2.5 源码地址:https://gitee.com/pearl-organization/study-redis-demo 文章目录 1. 概述2. 命令2.1 MULTI2.2 EXEC2.3 DISCARD2.4 WATCH2.5 UNWATCH 3. 事务中的错误4.…