主要任务

从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

图解

实时数仓(二十六)DWS层-流量域页面浏览各窗口汇总表 - 图1

ClickHouse 建表语句

启动ClickHouse
systemctl start clickhouse
systemctl start clickhouse-server
clickhouse-client -m
  1. drop table if exists dws_traffic_page_view_window;
  2. create table if not exists dws_traffic_page_view_window
  3. (
  4. stt DateTime,
  5. edt DateTime,
  6. home_uv_ct UInt64,
  7. good_detail_uv_ct UInt64,
  8. ts UInt64
  9. ) engine = ReplacingMergeTree(ts)
  10. partition by toYYYYMMDD(stt)
  11. order by (stt, edt);

代码编写

(1)实体类 TrafficHomeDetailPageViewBean

https://gitee.com/luan_hao/gmall-flink/blob/master/gmall-realtime/src/main/java/com/apache/gmall/bean/TrafficHomeDetailPageViewBean.java

(2)主程序

https://gitee.com/luan_hao/gmall-flink/blob/master/gmall-realtime/src/main/java/com/apache/gmall/app/dws/DwsTrafficPageViewWindow.java

测试

开启zk,kafka,f1

依次启动 BaseLogApp, DwsTrafficPageViewWindow 程序 启动脚本

实时数仓(二十六)DWS层-流量域页面浏览各窗口汇总表 - 图2

查看数据

实时数仓(二十六)DWS层-流量域页面浏览各窗口汇总表 - 图3

有如上图数据,则程序成功!