flume是分布式的日志收集系统,把收集来的数据传送到目的地去。
flume里面有个核心概念,叫做agent。agent是一个java进程,运行在日志收集节点。
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、自定义。在整个数据传输过程中,流动的是event。事务保证是在event级别。
flume可以支持多级flume的agent,支持扇入(fan-in)、扇出(fan-out)。即支持将多个agent串联起来。
- 书写配置文件example
//设置source名称,可多个
agent1.sources = source1
//设置channel名称,可多个
agent1.channels = channel1
//设置sink名称,可多个
agent1.sinks = sink1
source设置:
//Spooling Directory是监控指定文件夹中新文件的变化,一旦新文件出现,就解析该文件内容,然后写入到channle。写入完成后,标记该文件已完成或者删除该文件。
agent1.sources.source1.type = spooldir
//监控目录
agent1.sources.source1.spoolDir = /opt/temp/flume_source_test
//当文件处理成功之后,在将原文件名加后缀,表示已处理完成
agent1.sources.source1.fileSuffix = _finish
//关联channel
agent1.sources.source1.channels = channel1
//是否要添加一个标题存储绝对路径的文件名
agent1.sources.source1.fileHeader = false
sink设置(文件):
//存储在本地文件系统事件
agent1.sinks.sink1.type = file_roll
//存储目录
agent1.sinks.sink1.sink.directory = /opt/temp/flume_sink_test
//关联channel
agent1.sinks.sink1.channel = channel1
sink设置(异步Hbase):
//异步hbase
login_agent.sinks.hbase_sink.type = asynchbase
//表名
login_agent.sinks.hbase_sink.table = ana_user_login
//列族名
login_agent.sinks.hbase_sink.columnFamily = login
//hbase zookeeper设置
login_agent.sinks.hbase_sink.zookeeperQuorum = cdh4tm:2181
//序列化类全路径
login_agent.sinks.hbase_sink.serializer = vlife.aaron.flume.serializer.LoginKafkaSerializer
//编写文件数量
login_agent.sinks.hbase_sink.batchSize = 500
channel设置(内存形式):
//事件存储在内存
agent1.channels.channel1.type = memory
//事件存储在通道的最大数量
agent1.channels.channel1.capacity = 100
channe设置(文件形式):
//事件存储到文件中
agent1.channels.channel1.type=file
//检查文件存储的目录
agent1.channels.channel1.checkpointDir=/root/hmbbs_tmp/123
//存储日志文件目录
agent1.channels.channel1.dataDirs=/root/hmbbs_tmp/
- 执行命令bin/flume-ng agent -n agent1 -c conf -f conf/example -Dflume.root.logger=DEBUG,console