概要
学完一系列前置知识(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
# 如果是监控多个文件目录 可以写为:

最低0.47元/天 解锁文章
1041

被折叠的 条评论
为什么被折叠?



