1.离线数仓—行为日志采集

本文详细介绍了如何通过Flume从Kafka收集用户行为日志并存储到HDFS的过程,包括Flume的Source、Channel、Sink选型,重点解决了零点漂移问题,并提供了具体配置文件和启动运行的步骤。最后讨论了采用此方案的原因及后续的File Channel优化和HDFS小文件处理问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

用户行为日志采集

这里接着上一部分,具体说明如何实现kafka到HDFS这一步骤。

一、架构图

在这里插入图片描述
kafka到HDFS这一部分对应整体架构图中的上图部分。

二、Kafka—Flume—HDFS规划

这里说明如何实现从Kafka读取数据通过Flume传输数据到HDFS中。

1.Flume规划

hadoop102:不做处理
hadoop103:不做处理
hadoop104:Flume(作为消费者,从Kafka中读取数据)

2.Source选型

这里是从Kafka中读取数据,因此从原则上来说可以使用kafka channel中的无source有sink的类型,但是这里需要实现一个拦截器,因此必须要有source,因此这里不能使用kafka channle,这里的source选用kafka source

3.Channel选型

这里为了保障数据的安全性,采用File Channel

4.Sink选型

这里是要将数据传输到HDFS中,因此需要使用HDFS sink

5.Flume-HDFS配置规划

1.设计架构
在这里插入图片描述
消费Flume配置关键点:
在这里插入图片描述
数据流程:Kafka中topic_log里的数据通过Kafka Source传输到File Channel,然后经过HDFS sink将数据存放到HDFS中。其中source和channel中间实现一个时间拦截器,解决零点漂移问题

三、零点漂移问题

1.产生原因

在将Flume里的数据传输到HDFS里时,Flume默认会使用Linux系统时间作为输出到HDFS路径的时间,如果日志时间是23:59分,那么Flume消费kafka的数据时,可能已经是第二天了,所以必须要解决这种数据错乱的问题。

2.解决思路

在source和channel中使用拦截器,获取日志中真正的产生的时间,然后将这个时间写入到event的header头中,同时header里的key必须是timestamp,这样Flume框架会根据这个key的值自动识别为时间并在HDFS中创建对应的文件。

3.实现代码

编写TimeStampInterceptor类:

public class TimeStampInterceptor implements Interceptor {
   
   
    private ArrayList<Event> events = new ArrayList<>();
    @Override
    public void initialize
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值