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,
下面是配置文件的内容,
在使用kafkachannel中遇到的坑
https://blog.csdn.net/Lu_Xiao_Yue/article/details/85223206
#定义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
观察到消费者消费者到了数据
二、
上面是没有sink,下面介绍no source
配置文件
agent.channels = kafka-channel
agent.sources = no-source
agent.sinks = k1
agent.channels.kafka-channel.type = org.apache.flume.channel.kafka.KafkaChannel
agent.channels.kafka-channel.brokerList = bigdata01:9092,bigdata02:9092,bigdata03:9092
agent.channels.kafka-channel.zookeeperConnect = bigdata01:2181,bigdata02:2181,bigdata03:2181
agent.channels.kafka-channel.topic = sinktopic
agent.channels.kafka-channel.consumer.group.id = groupM
agent.channels.kafka-channel.kafka.consumer.timeout.ms = 100
agent.channels.kafka-channel.parseAsFlumeEvent = false
agent.sinks.k1.type = file_roll
agent.sinks.k1.sink.directory = /home/bigdata/data/logs/kafkaChannel
agent.sinks.k1.channel = kafka-channel
运行命令
/home/bigdata/install/apache-flume-1.5.0-cdh5.3.6-bin/bin/flume-ng agent --conf conf/ --name agent --conf-file /home/bigdata/install/apache-flume-1.5.0-cdh5.3.6-bin/job/noSource.conf -Dflume.root.logger==INFO,console
开启kafka生产者:
kafka-console-producer.sh --broker-list bigdata01:9092,bigdata02:9092,bigdata03:9092 --topic sinktopic
查看结果
问题遇到一个错误:如下
还没解决
Timed out while waiting for data to come from Kafka
kafka.consumer.ConsumerTimeoutException
at kafka.consumer.ConsumerIterator.makeNext(ConsumerIterator.scala:69)
at kafka.consumer.ConsumerIterator.makeNext(ConsumerIterator.scala:33)
at kafka.utils.IteratorTemplate.maybeComputeNext(IteratorTemplate.scala:66)
at kafka.utils.IteratorTemplate.hasNext(IteratorTemplate.scala:58)
at org.apache.flume.channel.kafka.KafkaChannel K a f k a T r a n s a c t i o n . d o T a k e ( K a f k a C h a n n e l . j a v a : 294 ) a t o r g . a p a c h e . f l u m e . c h a n n e l . B a s i c T r a n s a c t i o n S e m a n t i c s . t a k e ( B a s i c T r a n s a c t i o n S e m a n t i c s . j a v a : 113 ) a t o r g . a p a c h e . f l u m e . c h a n n e l . B a s i c C h a n n e l S e m a n t i c s . t a k e ( B a s i c C h a n n e l S e m a n t i c s . j a v a : 95 ) a t o r g . a p a c h e . f l u m e . s i n k . R o l l i n g F i l e S i n k . p r o c e s s ( R o l l i n g F i l e S i n k . j a v a : 191 ) a t o r g . a p a c h e . f l u m e . s i n k . D e f a u l t S i n k P r o c e s s o r . p r o c e s s ( D e f a u l t S i n k P r o c e s s o r . j a v a : 68 ) a t o r g . a p a c h e . f l u m e . S i n k R u n n e r KafkaTransaction.doTake(KafkaChannel.java:294) at org.apache.flume.channel.BasicTransactionSemantics.take(BasicTransactionSemantics.java:113) at org.apache.flume.channel.BasicChannelSemantics.take(BasicChannelSemantics.java:95) at org.apache.flume.sink.RollingFileSink.process(RollingFileSink.java:191) at org.apache.flume.sink.DefaultSinkProcessor.process(DefaultSinkProcessor.java:68) at org.apache.flume.SinkRunner KafkaTransa