核心概念
理解 Kafka 数据流
Kafka 是分布式流平台,用于高吞吐量消息传递。在 ETL 过程中,Kafka 作为数据消息队列或流处理来源。
维度表设计
维度表包含业务实体详细信息,如产品名称、客户信息、时间维度等。每个维度表有唯一主键标识记录。
核心代码实现
TableObject 样例类
case class TableObject(database: String, tableName: String, typeInfo: String, dataInfo: String) extends Serializable
AreaInfo 维度数据
case class AreaInfo(id: String, name: String, pid: String, sname: String, level: String, citycode: String, yzcode: String, mername: String, Lng: String, Lat: String, pinyin: String)
DataInfo 业务数据
case class DataInfo(modifiedTime: String, orderNo: String, isPay: String, orderId: String, tradeSrc: String, payTime: String, productMoney: String, totalMoney: String, dataFlag: String, userId: String, areaId: String, createTime: String, payMethod: String, isRefund: String, tradeType: String, status: String)
HBase 连接与写入
ConnHBase
创建 HBase 连接,配置 ZooKeeper 集群地址
SinkHBase
实现 RichSinkFunction,将数据写入 HBase,包含 insertArea、insertTradeOrders、deleteArea 等方法
Kafka 数据源
SourceKafka
创建 FlinkKafkaConsumer,配置 bootstrap.servers、序列化器、消费者组等
主程序流程
KafkaToHBase
- 创建执行环境
- 获取 Kafka 数据源
- 解析 JSON 数据
- 根据数据库和表名分发处理
- 写入 HBase 对应表
维度表更新方式
- 全量更新:每次获取新数据时覆盖写入
- 增量更新:根据时间戳或版本号更新已有记录,确保数据一致性