如现在我在两台机器上的测试,192.168.1.103和192.168.1.104上面做agent的传递,
在192.168.1.103上的conf下面创建一个flume-getremotefile.properties文件来获取远程机器上sink传过来的事件,内容如下:
a2.sources = r1
a2.sinks = k1
a2.channels = c1
#source配置信息
# 绑定source r1的绑定监听主机和端口
a2.sources.r1.type = avro
a2.sources.r1.bind = 192.168.1.103
a2.sources.r1.port = 44444
a2.sources.r1.interceptors = i1
a2.sources.r1.interceptors.i1.type = timestamp
#sink配置信息
#type为"file_roll"表示将数据存入本地文件系统
a2.sinks.k1.type = file_roll
#指定数据存放目录
a2.sinks.k1.sink.directory = /usr/local/app/flume-1.4.0/test/
#设置滚动时间(即每隔一段你设置的时间,系统会生成一个新的文件存放数据
#(如果不指定,系统会默认生成N个文件,将数据分别存入N个文件中),
#为0时表示只有一个文件存放数据)
a2.sinks.k1.sink.rollInterval = 0
#channel配置信息
#type为memory意将数据存储至内存中
a2.channels.c1.type = memory
a2.channels.c1.capacity = 1000
a2.channels.c1.transactionCapacity = 100
#将source和sink绑定至该channel上
a2.sources.r1.channels = c1
a2.sinks.k1.channel = c1
再在192.168.1.104机器上配置一个传送event到103机器上的agent,内容如下:
#gent的名称为"a1"
a1.sources = r1
a1.sinks = k1
a1.channels = c1
#source配置信息
#r1的type为avro表示该source接收的数据协议为avro,且接收数据由avro客户端事件驱动
#(也就是说resource要通过avro-cliet向其发送数据)
a1.sources.r1.type = avro
a1.sources.r1.bind = localhost
a1.sources.r1.port = 55555
#sink配置信息
#k1的type为avro表示该sink将通过avro-client客户端以avro协议通过5555端口发送数据
a1.sinks.k1.type = avro
a1.sinks.k1.hostname = 192.168.1.103
a1.sinks.k1.port = 44444
#channel配置信息
#type为memory意将数据存储至内存中
a1.channels.c1.type = memory
a1.channels.c1.capacity = 1000
a1.channels.c1.transactionCapacity = 100
#将source和sink绑定至该channel上
a1.sources.r1.channels = c1
a1.sinks.k1.channel = c1
到这里已经将准备工作做好了:
首先启动103机器上的agent,bin/flume-ng agent -n a2 -f conf/flume-getremotefile.properties
再启动104上的agent ,bin/flume-ng agent -n a1 -f conf/flume-first.properties
再打开一个client来传递数据导104上,bin/flume-ng avro-client -H localhost -p 55555 -F my_test.txt
至此会发现在103的机器上 /usr/local/app/flume-1.4.0/test/目录下多了一个文件内容是my_test.txt的内容