**1.flume 是分布式的日志收集系统,把收集来的数据传送到目的地去。
2。flume里面有个核心概念,叫做agent。agent是一个java进程,运行在日志收集节点。
3。agent里面包含3个组件:source, channel, sink**
*3.1 source组件是专用于(收集日志),可以处理各种类型各种格式的日志数据,包括 avro, thrift, exec, jms, spooling directory, netcat, sequence generator, syslog, http, legacy, 自定义等。
Source组件把数据收集来以后,临时存放在channel中
3.2 Channel组件是在agent中专用于临时存储数据的,可以存放在memory, jdbc,file,自定义。
channel中的数据只有在sink发送成功后才会被删除。
3.3 sink组件是用于把数据发送到目的的组件,目的地包括: hdfs, logger, avro, thrift, ipc, file, null, hbase, solr,自定义。*
**4。 在整个数据传输过程中,流动的是event。事物保证是在event级别。
5。flume 可以支持多级flume的agent, 支持善如(fan- in), 扇出(fan-out)**.
扇入:是指直接调用该模块的上级模块的个数。扇入大表示模块的复用成都高。
扇出: 是指该模块直接调用的下级模块的个数。扇出大表示模块的复杂程度高,需要控制和
协调过多的下级模块; 但是扇出过小(例如总是1)也不好。扇出过大一般是因为缺乏中间层次,
应该适当增加中间层次的模块。扇出太小可以把下级模块进一步分解成若干个子功能模块,或者
合并到它的上级模块中。
设计良好的软件结构: 通过顶层的扇出比较大,中间的扇入小,底层模块则有大扇入。
6。书写配置文件的example:
agent1 表示代理名称
agent1.sources = source1
agent1.sinks = sink1
agent1.channels = channel1
Spooling Directory 是监控指定文件夹中新文件的变化,一旦以文件出现,就解析文件内容,然后写入到channel,写入完成后,标记该文件已完成或者删除该文件。
配置source1
agent1.sources.source1.type=spooldir
agent1.sources.source1.spoolDir = /home/light/flumeTest
agent1.sources.source1.channel=channel1
agent1.source.source1.fileHeader=false
agent1.sources.source1.interceptors=il
agent1.sources.source1.interceptors.il.type=timestamp
配置sink1
agent1.sinks.sink1.type=hdfs
agent1.sinks.sink1.hdfs.path=hdfs://hadoop0:9000/flumeTest
agent1.sinks.sink1.hdfs.fileType=DataStream
agent1.sinks.sink1.hdfs.writeFormat=TEXT
agent1.sinks.sink1.hdfs.rollInterval=10
agent1.sinks.sink1.channel=channel1
agent1.sinks.sink1.hdfs.filePrefix=%Y-%m-%d
配置channel1
agent1.channels.channel1.type=file
agent1.channels.channel1.checkpointFir=/home/zkpk/flume_tmp/123
agent1.channels.channel1.dataDirs=/home/zkpk/flume_tmp/