官网介绍:http://flume.apache.org/FlumeUserGuide.html
Apache flume是一个分布式的,可靠的,高可用的系统,能够有效地收集、汇总和移动大量的从许多不同的来源日志数据,并集中式存储数据。
1)它是FlumeOG的重构版本,apache来开发管理。
2)它变的很简单, Master、zookeeper、collector和WebUI没有了
3)简化成了
1、source (avro:很简单使用;exec:使用shell命令; Http Post source;Spool Directory Source; JMS Source等)
2、sink (hdfs、file、kafka)
3、channel(Memory、disk)
系统要求:
- Java Runtime Environment - Java 1.6 or later (Java 1.7 Recommended)
- Memory - Sufficient memory for configurations used by sources, channels or sinks
- Disk Space - Sufficient disk space for configurations used by channels or sinks
- Directory Permissions - Read/Write permissions for directories used by agent
数据流模型
数据获取:
1)RPC
1、在flume中 ,Avro客户端使用AVRO RPC机制可以发送一个给定的文件 Avro 源:
2、$ bin/flume-ng avro-client -H localhost -p 31515 -F /usr/logs/log.10
3、上面的命令将发送的/ usr/logs/log.10的内容到 flume源监听端
2)Executing commands
1、还有一个exec执行一个给定的命令获得输出的源。一个单一的输出,即“line”。回车('\ R')或换行符('\ N'),或两者一起的文本。注:Flume不支持tail做为一个源,不过可以通过exec tail。
3)Network streams
Flume支持以下的机制,从流行的日志流类型读取数据
1、Avro(数据序列化系统)
2、Syslog
3、Netcat(使用TCP或UDP协议的网络连接去读写数据)
数据channel:
数据sink:
举例说明:
agent.sources = tailPlay
agent.channels = memoryChannel
agent.sinks = kafka
#Describe channels
agent.channels.memoryChannel.type = memory
agent.channels.memoryChannel.capacity = 500
#Describe sources
agent.sources.tailPlay.type = exec
agent.sources.tailPlay.command = tail -F /export/servers/nginx/logs/x.jd.com/x.jd.com_info.log
agent.sources.tailPlay.channels = memoryChannel
#Describe sinks
agent.sinks.kafka.type = com.xxx.flume.sink.kafka.KafkaSink
agent.sinks.kafka.channel = memoryChannel
agent.sinks.kafka.serializer.class = kafka.serializer.StringEncoder
agent.sinks.kafka.metadata.broker.list=192.168.39.169:9092,192.168.39.170:9092,192.168.39.171:9092
agent.sinks.kafka.topic=play
bin/flume-ng agent --conf conf --conf-file flume-conf-play.properties --name agent -Dflume.root.logger=INFO,console
agent会自动收集日志并通过kafka发送
实现Configurable并继承AbstractSink,可以实现自己的sink插件
public class KafkaSink extends AbstractSink implements Configurable{
}
flume性能优化:
优化channel
agent.channels.memoryChannel.capacity = 50000
agent.channels.memoryChannel.transactionCapacity=50000
优化source
agent.sources.tailPlay.batchTimeout = 100
agent.sources.tailPlay.batchSize = 2000
优化sink(以Kafka为例)
agent.sinks.kafka.message.batchSize=1000(kafka最大批量发送数目)
agent.sinks.kafka.message.timeout.ms=100 (Kafka发送最低超时时间)
目前apache-flume-1.4.0是apache的第一版
1)文档资料匮乏,学习的代价比较高
2)日志收集只能按行读取
3)缺乏日志完成性验证