Apache Flume初识


官网介绍: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)

系统要求

  1. Java Runtime Environment - Java 1.6 or later (Java 1.7 Recommended)
  2. Memory - Sufficient memory for configurations used by sources, channels or sinks
  3. Disk Space - Sufficient disk space for configurations used by channels or sinks
  4. Directory Permissions - Read/Write permissions for directories used by agent

数据流模型

Apache Flume初识_第1张图片

数据获取

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)缺乏日志完成性验证


你可能感兴趣的:(Apache Flume初识)