目录
1.flume数据传输怎么监控?
2.source、channel、sink常用的类型
source
-
netcat tcp source【监听端口数据】常用属性:
type: netcat
bind: 监听哪个主机
port: 监听哪个端口 -
exec source【监听单个追加文件】常用属性:
type: exec
command: tail -F 文件路径
batchSize: 定义每批次采集多少数据, 必须<=事务容量大小
exec source的缺点:exec的tail -F命令只会显示文件的最后N行,如果flume在集采的过程中宕机,在宕机的过程中向文件中写入了大量的数据,后续Flume启动之后,因为只会采集最后N行的数据,所以可能出现数据丢失 -
Spooling Directory Source【监听目录下新增文件】
Spooling Directory Source的缺点:
1、只能监听目录下新增文件,如果某一个文件已经采集完成,后续再向该文件中写入新内容,flume不会进行采集
2、不能断点续传
Spooling Directory Source常用属性:
type:spooldir
spoolDir: 监听的目录
includePattern: 通过正则表达式监听符合要求的文件
batchSize:定义每批次采集多少数据, 必须<=事务容量大小 -
Taildir Source【监听目录下新增文件以及追加文件】
Taildir Source优点:
1、监听目录下新增文件以及追加文件
2、能够断点续传
Taildir Source常用属性:
type: TAILDIR
filegroups: 定义文件组的名称,多个文件组名称通过空格分隔
filegroups. : 定义对应的文件组监听的目录、文件
positionFile: 记录上一次采集到了文件的哪个位置的文件
batchSize:定义每批次采集多少数据, 必须<=事务容量大小 -
avro source[一般flume传递数据给flume的时候使用]常用属性:
type: avro
bind: 监听哪个主机
port: 监听哪个端口 -
kafka source 常用属性:
type:org.apache.flume.channel.kafka.KafkaChannel
kafka.bootstrap.servers:指定kafka集群
kafka.topic:指定数据保存到那个topic
kafka.consumer.group.id: 指定消费者组的名称
kafka.consumer.auto.offset.reset:指定消费者组第一次消费时从哪里开始消费topic中的数据
channel
-
memory channel 常用属性:
type: memory
capacity: channel的容量大小
transactionCapacity: 事务容量大小,必须<=capacity -
kafka channel 常用属性:
type:org.apache.flume.channel.kafka.KafkaChannel
kafka.bootstrap.servers:指定kafka集群
kafka.topic:指定数据保存到那个topic
parseAsFlumeEvent:指定source采集的数据是否以event的形式写入kafka[false表示只写body里面的数据]
kafka.consumer.group.id:指定消费者组的名称
kafka.consumer.auto.offset.reset:指定消费者组第一次消费时从哪里开始消费topic中的数据
sink
- HDFS sink[将数据保存到HDFS] 常用属性:
type: hdfs
hdfs.path: 指定数据保存到HDFS哪个路径
hdfs.filePrefix: 指定文件的前缀
hdfs.rollInterval: 指定间隔多久滚动生成一个新文件,后续数据项文件中写入不会再向老文件中写
hdfs.rollSize: 指定文件多大之后滚动生成一个新文件,后续数据项文件中写入不会再向老文件中写,在工作中设置的时候要比128M稍微小一点
hdfs.rollCount: 指定向文件中写入多少个Event之后滚动生成一个新文件,后续数据项文件中写入不会再向老文件中写,在工作中一般设置为0禁用
hdfs.batchSize: 定义sink每个批次从channel拉取多少数据,必须<=事务容量大小
hdfs.codeC: 定义数据保存到HDFS的时候使用哪种压缩[gzip, bzip2, lzo, lzop, snappy]
hdfs.fileType: 定义数据保存到HDFS的是以哪种文件格式保存[SequenceFile:二进制文件, DataStream:文本文件, CompressedStream:压缩文件]
hdfs.round: 指定是否按照指定的时间间隔生成文件夹
hdfs.roundValue: 指定时间间隔的值
hdfs.roundUnit: 指定时间单位
hdfs.userLocalTimeStamp: 是否使用本地时间戳 - Logger Sink【数据保存在日志中,方便打印】:
type: logger - avro sink[发送数据到其他的flume]常用属性:
type: avro
hostname: 数据发送到哪个主机
port: 数据发送到哪个端口
batch-size: 定义sink每个批次从channel拉取多少数据,必须<=事务容量大小 - File Roll Sink【数据保存到本地磁盘】常用属性:
type: file_roll
sink.directory: 数据保存的路径
sink.batchSize: 定义sink每个批次从channel拉取多少数据,必须<=事务容量大小
3.拦截器,channel选择器,sink 组,sink处理器
4.source channel sink常用参数,如何调优
5.事务机制与传输流程
事务主要包含两部分
-
Put 事务流程
doPut:将批数据先写入临时缓冲区 putList
doCommit:检查 channel 内存队列是否足够合并
doRollback:channel 内存队列空间不足,回滚数据 -
Take 事务流程
doTake:将数据取到临时缓冲区 takeList,并将数据发送到 HDFS
doCommit:如果数据全部发送成功,则清除临时缓冲区 takeList
doRollback:数据发送过程中如果出现异常,rollback 将临时缓冲区 takeList 中的数据归还给 channel 内存队列 -
传输流程
6.flume采集数据会丢失吗?
source到channel可以用事务,channel到sink可以用事务,那么只有channel才可能丢失数据,当channel为内存的时候。