分享好友 最新资讯首页 最新资讯分类 切换频道
大数据之实时数仓建设(二)
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

最新文章
阿里伴侣配合阿里巴巴打造全方位线上推广
在当今竞争激烈的电商时代,企业的线上推广至关重要。阿里巴巴作为全球知名的电商平台,为众多企业提供了广阔的发展空间。而阿里
Python大数据分析&人工智能教程 - Scrapy工作原理详解与实操案例
Scrapy是一个开源的、用Python编写的高性能网络爬虫框架,用于抓取网站数据和提取结构性数据。它是基于Twisted异步网络框架构建
AI智能写作助手:一站式解决内容创作、文章润色与高效写作的全面工具
在信息爆炸的时代内容创作已经成为企业、媒体和个人展现自我、传递价值的不可或缺手。面对海量的信息与日益增强的内容品质需求高
你的站点抗压么?推荐一款超方便的开源压测工具
这里是 HelloGitHub 推出的《讲解开源项目》系列,本期介绍一款标星 17.7k 纯 Go 语言实现的 HTTP(S) 压测工具——vegetaVegeta
【系统架构设计】计算机网络
OSI/RM 结构模型 1977年,国际标准化组织为适应网络标准化发展的需求,制定了开放系统互联参考模型(Open System Interconnectio
全世界规模最大战争排名,第一名居然是清朝时期!
自打人类走上进化这条路,就想着法儿想要证明【一伙人就该被另一伙人支配】。古罗马角斗士时代一方有多大势力,就看他有多少人的
python tk随机内容生成器
MyRandom ran=new MyRandom();System.out.println(ran.nextString(1));System.out.println(ran.nextString(50, OnlyNum));System
ai自动写文章在线 在线写文章自动生成器
身为文案工作者,我深感写作之重要且充满挑战。如今,随着人工智能(AI)写作平台的出现,我的写作历程出现了巨大变革。在此,很
AI写系统性综述ChatGPT还远远不够未来百年能否实现
在科学研究的浩瀚海洋中,科研人员时常面临一个棘手的问题:如何有效整合和理解海量的科学文献。尽管网络的普及极大地丰富了文献
全球AI半导体技术排名:韩国强势第三,未来发展值得关注
近年来,人工智能(AI)技术的迅猛发展促进了相关硬件的创新,尤其是AI半导体的需求日益上升。根据最新的研究报告和韩国媒体的报