flume的一个agent包括source、channel、sink,但是有时候其实可以不需要source或者是sink,比如在使用flume时,把flume监控的日志发送到kafka中,可以不用使用sink,把channel定义为kafkachannel,kafkachannel作为生产者,直接把数据生产到kafka中,或者使用flume监控kafka中的数据,把数据发送到其他地方,可以不使用source,使用kafkachannel作为消费者,从kafka中拉数据,把数据写到指定的sink上
使用 source和channel,把数据发送到kafka中,这种方法时nosink
#定义agent名, source、channel的名称
a0.sources = r1
a0.channels = c1
#具体定义source
a0.sources.r1.type = exec
a0.sources.r1.command = tail -F /data/logs.txt
a0.channels.c1.type = org.apache.flume.channel.kafka.KafkaChannel
a0.channels.c1.brokerList = bigdata01:9092,bigdata02:9092,bigdata03:9092
a0.channels.c1.zookeeperConnect=192.168.136.150:2181
a0.channels.c1.topic = usertest
#false表示是以纯文本的形式写进入的,true是以event的形式写进入的,以event写进入时,会出现乱码, 默认是true
a0.channels.c1.parseAsFlumeEvent = false
a0.sources.r1.channels = c1
测试:
执行命令
/home/bigdata/install/apache-flume-1.5.0-cdh5.3.6-bin/bin/flume-ng agent --conf /home/bigdata/install/apache-flume-1.5.0-cdh5.3.6-bin/conf/ --name a0 --conf-file /home/bigdata/install/apache-flume-1.5.0-cdh5.3.6-bin/job/kafkacannel.conf -Dflume.root.logger==INFO,console
开启一个消费者:
kafka-console-consumer.sh --bootstrap-server bigdata01:9092,bigdata02:9092,bigdata03:9092 --topic usertest --from-beginning
手动向文件中生产数据
echo "aaaaaaaaa">>/data/logs.txt
观察到消费者消费者到了数据