项目1用户行为采集数仓架构之第一层flume

本文介绍了项目1的用户行为采集数仓架构的第一层,使用Flume进行数据传输。通过设置Flume的taildir source和Kafka channel,避免了高IO问题。配置文件中详细解释了各项参数,包括channel容量、事务容量和批处理大小。此外,自定义拦截器用于数据清洗,确保传入Kafka的数据是符合预期的JSON格式。最后,提供了启动和停止Flume的脚本。
摘要由CSDN通过智能技术生成

第一层架构
在这里插入图片描述

第一层kafka channel直接到kafka不用sink,可以不用take事务阶段,提高传输效率

这里解释下为什么要套两层flume的两个问题,
(1)为什么不用taildir source 然后kafka channel 最后hdfs sink这样一步写入到hdfs中的方法。因为如果这样只用一个flume,这个flume要运行在生成日志文件的服务器上,然后kafka channel再传给kafka集群上,这两个集群不一定在统一服务器上,最后sink再往hdfs传的时候,又需要把数据读回生成日志文件的服务器上,再往hdfs所在集群写,IO太高,十分麻烦,不采用
(2)为什么不自己写API从kafka消费到HDFS上而是再套一层flume;自己写API不移动很好用,毕竟不如人家提供的Flume好用(可以说当时尝试了一下写API,但是写的并不是很完美,所以最后还是用的Flume)

开始配置第一层flume的配置文件

数据通道-第一层flume- logserver->kafka:

#Named
a1.sources = r1 
a1.channels = c1

#Source
a1.sources.r1.type = TAILDIR
a1.sources.r1.filegroups = f1
a1.sources.r1.filegroups.f1 = /opt/module/applog/log/app.*     ——注解1
a1.sources.r1.positionFile = /opt/module/flume-1.9.0/jobs/position/taildir_position.json  ——注解2
a1.sources.r1.batchSize = 500   ——注解3
 
#interceptor
a1.sources.r1.interceptors = i1
a1.sources.r1.interceptors.i1.type = com.atguigu.gmall.collect.interceptor.EtlInterceptor$MyBuilder

#Channel   ——注解4
a1.channels.c1.type = org.apache.flume.channel.kafka.KafkaChannel     
a1.channels.c1.kafka.bootstrap.servers = hadoop102:9092,hadoop103:9092
a1.channels.c1.kafka.topic = topic_log
a1.channels.c1.parseAsFlumeEvent = false

#Bind    
a1.sources.r1.channels = c1  

注:
注解1:此处我们用的taildir可以从多个目录拉数据,此处设计只从hadoop102中用flume拉去数据,所以只用一个f1
后面的app.*为正则表达式
注解2:因为我们taildir拥有断点续传的功能,这种功能是因为我们维持了一个记录source读取索引

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值