摘自:https://flume.apache.org/FlumeUserGuide.html
是什么:
Flume是一个用来收集聚合海量多来源日志数据并转移到一个数据存储中心的分布式,可依赖,高可用,高性能服务框架。他基于流数据提供简单灵活的架构。具有健壮性,容错性。他提供了一个简单可扩展的数据模型来支持在线分析应用。
Flume的数据流模型:
一个 Flume代理由源(数据收集器)、通道(数据暂存区)、水槽(数据转发器)构成,外部数据源以一种目标Flume源能识别的格式将事件传输到Flume上,Flume接收到事件后,会将它存到一个或多个通道里,水槽会从通道里取数据放到下一个Flume代理的源里或者直接放到HDFS等外部存储库中,通道会在水槽消费完数据前保存数据。
Flume支持单跳和多跳(事件经过多个代理)。
Flume通过通道和事务来保证数据的可用性和可恢复性。
设置:
代理设置:
Flume的代理是通过一个本地配置文件进行设置,这个文件是遵循Java properties文件格式的
文本文件。多个代理可以在同一个配置文件里进行配置,配置文件包含代理里每个源,通道
,水槽的属性以及这些代理组合成数据流的方式。
单个组件设置:
流里的每个组件(源、通道和水槽)都有一个名字,类型和对应其类型与实例的特定的属性集。
(比如一个Avro源需要一个主机名或者IP地址,一个端口号;一个HDFS水槽需要有文件系统的URI,创建文件的路径,文件滚动时间间隔)
组件组合:
在代理里列出每个组件(源,水槽,通道)的名字,然后指定每个水槽和源的连接通道。
启动一个代理:
$ bin/flume-ng agent -n $agent_name -c conf -f conf/flume-conf.properties.template
一个简单的例子:
下面的例子描述了一个单节点(名为a1的代理)的Flume配置,实现了生成事件然后输出日志到控制台。
# example.conf: A single-node Flume configuration # Name the components on this agent a1.sources = r1 a1.sinks = k1 a1.channels = c1 # Describe/configure the source a1.sources.r1.type = netcat a1.sources.r1.bind = localhost a1.sources.r1.port = 44444 # Describe the sink a1.sinks.k1.type = logger # Use a channel which buffers events in memory a1.channels.c1.type = memory a1.channels.c1.capacity = 1000 a1.channels.c1.transactionCapacity = 100 # Bind the source and sink to the channel a1.sources.r1.channels = c1 a1.sinks.k1.channel = c1
启动
$ bin/flume-ng agent --conf conf --conf-file example.conf --name a1 -Dflume.root.logger=INFO,console
注意:conf后面跟的conf目录下期望有一个名为flume-env.sh的shell脚本,和一个log4j的
properties文件。这个例子里日志是输到控制台上,所以不需要自定义的环境脚本。
在另外一个终端中远程连接44444端口,发送事件给Flume:
$ telnet localhost 44444 Trying 127.0.0.1... Connected to localhost.localdomain (127.0.0.1). Escape character is ‘^]‘. Hello world! <ENTER> OK
原来的Flume终端将会输出下列日志信息:
12/06/19 15:32:19 INFO source.NetcatSource: Source starting 12/06/19 15:32:19INFO source.NetcatSource: Created serverSocket:sun.nio.ch.ServerSocketChannelImpl[/127.0.0.1:44444] 12/06/19 15:32:34 INFO sink.LoggerSink: Event: { headers:{} body: 48 65 6C 6C 6F 20 77 6F 72 6C 64 21 0D Hello world!. }
这样就部署了一个简单的Flume代理。
更详细的配置:
配置文件里使用环境变量:
https://flume.apache.org/FlumeUserGuide.html#using-environment-variables-in-configuration-files
未完待续。。。