分享好友 最新资讯首页 最新资讯分类 切换频道
大数据之实时数仓建设(二)
2024-11-07 22:46

如果数据量大,维度多,用keyBy并不方便,建议写到外部实时数仓里,Clickhouse擅长实时查询,flink擅长实时处理。

大数据之实时数仓建设(二)

一、多维度复杂统计(使用Clickhouse

使用是clickhouse的ReplacingMergeTree,可以将同一个分区中,ID相同的数据进行merge,可以保留最新的数据,可以使用这个特点实现Flink + Clickhouse(勉强)实现数据一致性。

存在的问题:写入到clickhouse中的数据不能立即merge,需要手动optimize或后台自动合并。

解决方案:查询时在表名的后面加上final关键字,就只查最新的数据数据,但是效率变低了。

如何设计clickhouse的表

1.可以支持维度查询(大宽表) 2.按照时间段进行查询(将时间作为表的字段并且建分区表) 3.可以统计出PV、UV(去重查询) 4.支持分区(按照时间进行分区) 5.支持覆盖(ReplacingMergeTree(对查询结果准确性要求高的,表名后面加final) 6.如果生成一个唯一的ID (在Kafka中生成唯一的ID,topic+分区+偏移量) 7.相同的数据要进入到相同的分区(按照数据的时间即EventTime进行分区

1、建表

 

2、自定义Kafka反序列器生成唯一ID

MyKafkaStringDeserializationSchema

 

FlinkUtils新增createKafkaStreamV2

 

调用TestKafkaId

 

3、使用JdbcSink将数据写入clickhouse

导入clickhouse驱动

 
 

JsonToBeanFuncV2

 

二、观看直播人数统计需求

a)实时统计累计观众(实时展示,直接用flink keyBy统计) b)实时统计各个直播间在线人数(实时展示,直接用flink keyBy统计) c)查看多个维度的明细(将数据写入到clickhouse中

1、观看直播人数统计实现

实现方式一: a)将数据来一条就写入到Redis/MySQL或大屏展示(延迟低、但是效率低、对数据库压力大) b)再写一个job将各种明细数据写入到ClickHouse中(提交了2个job、数据重复计算

 

AnchorDistinctTotalAudienceFunc

 

实现方式二: 将数据攒起来批量(不是简单的增量聚合,不能使用窗口,而是使用定时器)写入到Redis/MySQL(延迟高、效率高、对数据库的压力小) 在同一个job中,将数据写入到Clickhouse中(同一个主题(类型)的数据尽量在一个job中完成,将不同的数据打上不同的标签,侧流输出,可以节省集群资源。避免数据重复读取和计算

 

AnchorDistinctTotalAudienceFunc

 

2、直播人气值计算

  • 在直播间中至少停留1分钟
  • 在30分钟之内,同一设备ID频繁进入该直播间,算一个用户的人气值

实现思路: 按照EventTime划分滑动窗口 使用processFunction注册定时器

 

3、观看直播人数统计结果保存

建表

 

写入代码在上面的方式二

二、打赏礼物需求分析

在MySQL中还有一种礼物表(维表,需要进行关联,关联维表通常的解决方案

a) 每来一条数据查一次数据库(慢、吞吐量低) b) 可以使用异步IO(相对快,消耗资源多c) 广播State(最快、适用于少量数据、数据可以变化的

礼物表:小表、数据可能会发生变化(礼物停用、新增了一个礼物

统计的具体指标: 1.各个主播的收到礼物的数量、积分值 2.打赏礼物的数量、受欢迎礼物topN(可以将数据写入到数据库中,查询时再排序) 3.做多维度的指标统计(ClickHouse

1、按照主播(直播间)统计礼物的积分(抖币

统计的具体指标:各个主播的收到礼物的数量、积分值

礼物表使用jdbcSource, 不停的读数据 行为数据使用kafkaSource

 

MySQLSource

 

GiftConnectFunction

 

2、热门商品TopN需求分析

统计具体指标:统计10分钟内,每隔1分钟统计一次各个分类、各种事件类型的热门商品(商品ID

 
 

HotGoodsTopNFunction

 

HotGoodsAggregateFunction

 

HotGoodsWindowFunction

 

ItemEventCount

最新文章
红薯AI克隆工具:一键克隆,矩阵多开,自动发布!
之前太侠分享了小红书的图文批量生成工具,《小红书图文批量排版生成工具推荐》。今天太侠分享一个小红书AI克隆工具,当属2024年
DIY从入门到放弃:硬盘该选哪种分区?
不管是固态硬盘还是机械硬盘,在安装系统的时候,我们会遇到这样一个选项,硬盘选择MBR还是GPT分区,MBR(主引导记录)与GPT(GU
提升seo自然排名(seo提升排名) (今日更新中)
  提升seo自然排名tjldxdkjyxgs,那家seo好,山东seo排名,网站排名优化哪家好,优化排名选哪家,seo上排名,烟台搜索引擎优化排名,s
8种SEO优化技巧超级蜘蛛查
创作高质量的内容时,要确保信息的原创性与实用性,避免复制粘贴他人内容。在内容中融入适当的关键词,并注重内容的结构和排版,
Airtest-Selenium实操小课:爬取新榜数据
1. 前言 最近看到群里很多小伙伴都在用Airtest-Selenium做一些web自动化的尝试,正好趁此机会,我们也出几个关于web
#### 文案生成器免费版:无需投资即可享受智能服务
在数字时代,内容创作已成为多人的日常工作之一。无论是社交媒体运营、广告文案撰写,还是网络小说创作,高效地产出优质内容都是
再看快速排序(QuickSort)
      快速排序是一个十分伟大的算法,作为再一次的学习,写一写快排以及和快排相关的问题。 1.基本的快速排序方
阿里伴侣配合阿里巴巴打造全方位线上推广
在当今竞争激烈的电商时代,企业的线上推广至关重要。阿里巴巴作为全球知名的电商平台,为众多企业提供了广阔的发展空间。而阿里
Python大数据分析&人工智能教程 - Scrapy工作原理详解与实操案例
Scrapy是一个开源的、用Python编写的高性能网络爬虫框架,用于抓取网站数据和提取结构性数据。它是基于Twisted异步网络框架构建