电商数仓5.0 用户行为数据流传递流程以及实现

概要

学完一系列前置知识(hadoop/spark/kafka/zookeeper/maxwell/flume),这周开始着手项目,将知识点串联并实践起来。
这周开一个文章系列 分解尚硅谷 大数据项目 电商数仓5.0版本。
这篇文章将实现一下流程:
在这里插入图片描述

整体架构流程

由于该项目数据是模拟出来的,当我们使用jar包模拟出用户行为数据时,是生成在linux服务器指定路径下的app.*日志文件,但是我们最终想在hdfs文件系统上使用该数据,那么其中就需要使用一些工具将数据传给hdfs。
在这里插入图片描述

从该流程图可以看到,获得日志文件后,需要使用flume1将数据传给kafka集群,然后通过flume2传递给hdfs。
flume内部是由 source channel sink三个组件组成。但是使用flume传递数据存在一个问题,即数据漂移,什么是数据飘移?例如一个日志文件创建时间是2020-06-01 23:59:59,在通过flume1传递到kafka的过程中花费了几秒钟,当flume2从kafka拿到数据时,因为flume里数据单元是event,在event的header里保存的时间戳是数据传进来给source那一时间的,就可能存在误差,比如这里flume2拿到数据的时候生成的时间戳变成了2020-06-02 00:00:02 哪怕偏差只有几秒中 对数据保存的影响是非常大的。
PS:为什么需要时间戳,以及时间戳是如何生成的,是因为如果我们想通过flume传递数据给hdfs,并且hdfs保存数据的path,使用数据创建的时间做文件目录,就需要flume开启时间戳,flume创建时间戳就是当数据从外部传递给上游(source)那一时间。

日志数据–>flume1–>kafka集群

明白了流程和需要注意的点,接下来开始实现!
第一步:实现本地日志数据通过flume1传给Kafka集群 设定topic为:topic_log

# define servelet tools of flume
# 定义 flume1 的组件 这里我们选择 kafkachannel 就可以直接将source的数据传给kafka 不需要再设定sink了
a1.sources = r1
a1.channels = c1

# config source
# 配置source 这里选用的source是taildir类型 可以实现断点续传 / 监控多个本地文件目录
a1.sources.r1.type = TAILDIR
# 如果是监控多个文件目录 可以写为:
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值