前置条件
安装了Flume
安装 netcat 工具: netcat安装试玩博客
Demo
概述
定义agent文件
在/apache-flume-1.7.0/conf/目录下新建个job目录,在job目录下面新建个flume-netcat-logger.conf配置文件
注:配置文件来源于官方手册
http://flume.apache.org/FlumeUserGuide.html
#a1是agent的名称,a1中定义了一个叫r1的source,如果有多个,使用空格间隔
# r1 表示是a1的source的名字
a1.sources = r1
# k1表示是a1的sink的名字
a1.sinks = k1
# c1表示是a1的channel的名字
a1.channels = c1
#组名名.属性名=属性值
# 表示a1的输入源类型为netcat端口类型
a1.sources.r1.type = netcat
# 表示a1监听的主机的ip
# 如果是别的机器推送的话,不要写localhost,写监听的机器的ip,可以写自己的机器,
# 如果你写了localhost的话,别的机器无法连接上
a1.sources.r1.bind = 172.16.10.101
# a1监听的端口
a1.sources.r1.port = 4444
#定义sink,表示输出目的地是控制台logger类型的
a1.sinks.k1.type = logger
#定义chanel
# 表示a1的channel c1类型是memory类型的
a1.channels.c1.type = memory
# 表示c1 这个channel的总容量是10000个event
a1.channels.c1.capacity = 10000
# 表示c1 的channel传输时收集到1000条event后再提交事务
a1.channels.c1.transactionCapacity = 1000
#同一个source可以对接多个channel,但是一个sink只能从一个channel里面拿数据
# 表示将r1和c1连接起来
# r1的sources想对接对c1的channels
a1.sources.r1.channels = c1
# 表示将k1和c1连接起来
# k1 sinks想从哪里拿数据?从c1里面拿就配置c1
a1.sinks.k1.channel = c1
[这步骤可以不做]修改logSink日志配置文件
如果不想改的话, 你也可以在启动agent的时候 用 -D 命令指定参数,也可以覆盖这个配置信息.
logSink需要 log配置文件,默认用的是flume/conf/log4j.properties配置文件.如果你想自定义日志的输出啥的,就可以修改这个properties配置文件.
目录: /apache-flume-1.7.0/conf/log4j.properties
flume.root.logger 属性改成DEBUG,console, 或者是 INFO,console 都可以, 主要是console ,这是打印控制台的.
flume.root.logger=DEBUG,console
# flume.root.logger=INFO,LOGFILE
flume.log.dir=./logs
flume.log.file=flume.log
启动agent
启动命令,然后发现开始打印一堆日志,注意日志如果有error 说明哪里配置错了,或者其它原因导致agent没启动成功,
# 启动命令
[root@zjj101 job]# flume-ng agent -c conf/ -n a1 -f /root/soft/apache-flume-1.7.0/conf/job/flume-netcat-logger.conf -Dflume.root.logger=DEBUG,console
# .............省略了一堆没用的日志信息不粘贴在这里了
# flume监听了 4444端口
20/10/23 09:24:07 INFO source.NetcatSource: Created serverSocket:sun.nio.ch.ServerSocketChannelImpl[/172.16.10.101:4444]
启动命令参数说明
--conf/-c:表示配置文件存储在conf/目录
--name/-n:表示给agent起名为a1,这个取值要和配置文件里面定义的agent名字要一致.
--conf-file/-f:flume本次启动读取的配置文件是在job文件夹下的flume-telnet.conf文件,这个路径可以写绝对路径也可以写相对路径
-Dflume.root.logger=INFO,console :-D表示flume运行时动态修改flume.root.logger参数属性值,并将控制台日志打印级别设置为INFO级别。日志级别包括:log、info、warn、error。
测试
打开另外一台机器连接4444端口
# 连接zjj101(配置了host映射)机器的4444端口
[root@zjj102 ~]# nc zjj101 4444
我是张俊杰
OK
11111
OK
public static void main
OK
输入完了一些内容之后
再看看启动agent机器
控制台打印三条,说明接收到了三条内容,至于为什么中文没显示,是因为我配置了压缩.
20/10/23 09:26:32 INFO sink.LoggerSink: Event: { headers:{} body: E6 88 91 E6 98 AF E5 BC A0 E4 BF 8A E6 9D B0 ............... }
20/10/23 09:26:48 INFO sink.LoggerSink: Event: { headers:{} body: 31 31 31 31 31 11111 }
20/10/23 09:27:10 INFO sink.LoggerSink: Event: { headers:{} body: 70 75 62 6C 69 63 20 73 74 61 74 69 63 20 76 6F public static vo }