目前整个过程的核心是flink
批处理选择用pyflink
流处理选择用java+flink
当然之所以这么选择,是跟我的技术栈有关。因为本人之前一直从事离线数仓的工作,批处理一直选择的脚本语言包括python,perl,甚至是kettle脚本。遇到实时数据处理,通常是springboot下面的 消息订阅机制(activemq,rabbitmq,kafka)来处理。虽然也能应付实时的要求,但是数据量上来后明显感觉力不从心。另外维护两套引擎,维护工作实在是麻烦。直接看到flink的出现,感觉etl流批可以一体化了。
架构:
ODS:操作数据层,保存原始数据,对非结构化的数据进行结构化处理,轻度清洗,几乎不删除原始数据。
该层的数据主要来自业务数据库的 binlog 日志、埋点日志和应用程序日志。
对于 binlog 日志直接通过flink sdc 上报到Kafka 中。
除了存储在 Kafka 中,同时也会对业务数据库的 binlog 日志通过 Flink 写入 HDFS、Kudu 等存储引擎。
另外,对于埋点日志和应用程序日志,需要计算实时PV,UV的通过flume读入到kafka, 需要测算运营订单转化率,模块使用率,点击率等功能优化的,则通过flume落地到hdfs。
DWD:实时明