source监控某个文件,将数据拿到,封装在一个event当中,并put/commit到channel当中,channel是一个队列,队列的优点是先进先出,放好后尾部一个个event出来,sink主动去从chennel当中去拉数据,sink再把数据写到某个地方,比如HDFS上面去。
案例:
Flume Agent实时监控端口,收集数据,将其以日志的形式打印在控制台。
1、复制
$ cp -a flume-conf.properties.template flume-telnet.conf
2、修改flume-telnet.conf
# Name the components on this agent
# a1为代理(中介)实例名,任意命名,agent分三部分
a1.sources = r1
a1.sinks = k1
a1.channels = c1
# Describe/configure the source
# netcat是用于调试和检查网络的工具包,windows和linux(redhat)均可用,需要安装
a1.sources.r1.type = netcat
a1.sources.r1.bind = localhost
a1.sources.r1.port = 44444
# Describe the sink
# 可以在文档Flume Sinks--Logger Sink部分查找
# 往日志文件里面写
a1.sinks.k1.type = logger
# Describe the channels
# Use a channel which buffers events in memory
a1.channels.c1.type = memory
# channel里存放的最大event数
a1.channels.c1.capacity = 1000
# 每个事务支持的最大event数
a1.channels.c1.transactionCapacity = 100
# 绑定source和sink到channel
# 注意:这里有's'
a1.sources.r1.channels = c1
a1.sinks.k1.channel = c1
配置文件的使用:
a) 命名
b) 配置source、sink、channel
c) 关联
---------------------
测试:
安装telnet
# yum -y install telnet
启动flume,'-D'设置日志级别和输出源
$ bin/flume-ng agent --conf conf/ --name a1 --conf-file conf/flume-telnet.conf -Dflume.root.logger=INFO,console
打开另外一个窗口
--检查是否有程序(flume)在监听44444端口
netstat -an|grep 44444
--连接本机的44444端口,telnet是访问这个端口的客户端
然后随意输入字符串...
$ telnet localhost 44444
PS:
a) 退出telnet:'ctrl+]',然后输入quit。
b) 若flume-ng无法退出,则打开一个新的窗口,jps(或netstat -antp|grep 44444)查找pid,使用 kill -9