主要任务
从Kafka 页面日志主题读取数据,统计当日的首页和商品详情页独立访客数。
思路分析
1**)读取Kafka **页面主题数据
2**)转换数据结构**
将流中数据由String 转换为JSONObject。
3**)过滤数据**
仅保留page_id 为home 或good_detail 的数据,因为本程序统计的度量仅与这两个页面有关,其它数据无用。
4**)设置水位线**
5**)按照mid 分组**
6**)统计首页和商品详情页独立访客数,转换数据结构**
运用Flink 状态编程,为每个mid 维护首页和商品详情页末次访问日期。如果page_id 为 home,当状态中存储的日期为 null 或不是当日时,将homeUvCt(首页独立访客数) 置为1,并将状态中的日期更新为当日。否则置为0,不做操作。商品详情页独立访客的统计同理。当homeUvCt 和detailUvCt 至少有一个不为0 时,将统计结果和相关维度信息封装到定义的实体类中,发送到下游,否则舍弃数据。
7**)开窗**
8**)聚合**
9)将数据写出到ClickHouse
图解
ClickHouse 建表语句
启动ClickHousesystemctl start clickhouse
systemctl start clickhouse-server
clickhouse-client -m
drop table if exists dws_traffic_page_view_window;
create table if not exists dws_traffic_page_view_window
(
stt DateTime,
edt DateTime,
home_uv_ct UInt64,
good_detail_uv_ct UInt64,
ts UInt64
) engine = ReplacingMergeTree(ts)
partition by toYYYYMMDD(stt)
order by (stt, edt);
代码编写
(1)实体类 TrafficHomeDetailPageViewBean
(2)主程序
测试
开启zk,kafka,f1
依次启动 BaseLogApp, DwsTrafficPageViewWindow 程序 启动脚本查看数据
有如上图数据,则程序成功!