简介:测试flume+Kafka集成来采集log4j产生的日志
环境:
- Flume 1.6.0
- Kafka 0.11.0.2
- jdk 1.8.0_121
- Kafka集群、flume安装服务器上ubuntu16.04.5上
一、log4j生成数据
在window上,编写Java程序,模拟日志生成
import org.apache.log4j.Logger;
/*
模拟日志生成
*/
public class LogProduce {
private static Logger logger = Logger.getLogger(LogProduce.class.getName());
public static void main(String[] args) throws InterruptedException {
int index =0;
while (true) {
Thread.sleep(1000);
logger.info("value : " + index++);
}
}
}
在项目的resources文件夹中加入 log4j.properties 配置文件,配置文件中加上log4j对接flume的配置
log4j.rootCategory=INFO, stdout,flume
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.target=System.out
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss,SSSS} [%t] [%c] [%p] - %m%n
# output log to flume
log4j.appender.flume = org.apache.flume.clients.log4jappender.Log4jAppender
log4j.appender.flume.Hostname = 172.16.13.151
log4j.appender.flume.Port = 41414
log4j.appender.flume.UnsafeMode = true
加上依赖
<dependency>
<groupId>org.apache.flume.flume-ng-clients</groupId>
<artifactId>flume-ng-log4jappender</artifactId>
<version>1.6.0</version>
</dependency>
在打成jar包,注意把依赖的 log4j 和 flume-ng-clients 加上,生成的jar包放到服务器上。以下所有命令均在服务器上执行。
二、flume配置文件
# logger-mem-kafka.conf
agent1.sources=avro-source
agent1.channels=logger-channel
agent1.sinks=kafka-sink
#define source
agent1.sources.avro-source.type=avro
agent1.sources.avro-source.bind=0.0.0.0
agent1.sources.avro-source.port=41414
#define channel
agent1.channels.logger-channel.type=memory
agent1.channels.logger-channel.capacity=1000
agent1.channels.logger-channel.transactionCapacity=100
#define sink
agent1.sinks.kafka-sink.type=org.apache.flume.sink.kafka.KafkaSink
agent1.sinks.kafka-sink.topic=fluStream
agent1.sinks.kafka-sink.brokerList=szgwnet01:9092,szgwnet02:9092,szgwnet03:9092
agent1.sinks.kafka-sink.requiredAcks=1
agent1.sinks.kafka-sink.batchSize=20
#bind source/channel/sink
agent1.sources.avro-source.channels=logger-channel
agent1.sinks.kafka-sink.channel=logger-channel
在服务器上启动flume
./bin/flume-ng agent --conf ./conf/ --conf-file ./conf/logger-mem-kafka.conf --name agent1 -Dflume.root.logger=DEBUG,console
没有报错即可,窗口放着后续观察。
三、Kafka配置
相关的Kafka命令可以查看我的另一篇文章 Kafka简单使用
- 创建topic
kafka-topics.sh --create --zookeeper szgwnet01:2181,szgwnet02:2181,szgwnet03:2181 --replication-factor 3 --partitions 3 --topic fluStream
- 启动一个消费者观察结果
kafka-console-consumer.sh --bootstrap-server szgwnet01:9092,szgwnet02:9092,szgwnet03:9092 --topic fluStream --from-beginning
fluStream 这个topic为空,所以没有输出,窗口放着后续观察结果。
四、测试
服务器上执行jar包,模拟日志生成
注意:打包时,我指定了主类,加上了依赖的jar包,所以直接可以运行
java -jar Spark2.11-bigdata-flume-jar-with-dependencies.jar
运行后可以看到日志在控制台输出:
然后到刚才运行flume的窗口,也可以查看到相应的信息:
最后在Kafka消费者窗口中,要等几秒钟才能看到消费的数据(因为在flume配置文件中,配置了batchSize为20,flume会等20条数据打包一起发送给Kafka):
看到这些结果后,测试就成功了!!在生产环境中,可以把三个命令放在后台运行。