Flume整合Kafka采集滚动的日志

背景:

从Nginx中间件采集web项目产生的滚动日志。通过本地服务器(简称:A服务)的Flume采集日志,然后传输到另外一台服务器(简称:B服务器)的Flume上,然后暂存到 B服务器 的Kafka中。

为了展示效果,通过Kafka的consumer进行消费,打印到字符界面。

1、Flume的配置文件如下:

1.1、A服务器上,[exec-memory-avro.conf] 配置文件如下:

# agent properties
exec-memory-avro.sources = r1
exec-memory-avro.sinks = k1
exec-memory-avro.channels = c1

# sourecs properties
exec-memory-avro.sources.r1.type = exec
exec-memory-avro.sources.r1.command = tail -F /home/cyx/data/flume-logs-tmp/logs.txt
exec-memory-avro.sources.r1.shell = /bin/sh -c

# sinks properties
# eg: exec-memory-avro.sinks.k1.type = logger
exec-memory-avro.sinks.k1.type = avro
exec-memory-avro.sinks.k1.hostname =  h6        # B服务器hostname
exec-memory-avro.sinks.k1.port = 44444

# channels properties
exec-memory-avro.channels.c1.type = memory

# Bind the source and sink to channel
exec-memory-avro.sources.r1.channels = c1
exec-memory-avro.sinks.k1.channel = c1

1.2、B服务器上,[avro-memory-kafka.conf] 配置文件如下:

# agent properties
avro-memory-kafka.sources = r1
avro-memory-kafka.sinks = k1
avro-memory-kafka.channels = c1

# source properties
avro-memory-kafka.sources.r1.type = avro
avro-memory-kafka.sources.r1.bind = 0.0.0.0                  # 或者直接写 B服务器hostname
avro-memory-kafka.sources.r1.port = 44444

# sink properties
avro-memory-kafka.sinks.k1.type = org.apache.flume.sink.kafka.KafkaSink
avro-memory-kafka.sinks.k1.kafka.topic = my-topic

# flume1.6版本后改成 bootstrap.servers了,1.6之前是 brokerList
avro-memory-kafka.sinks.k1.kafka.bootstrap.servers = h5:9092,h6:9092,h7:9092
avro-memory-kafka.sinks.k1.kafka.flumeBatchSize = 5
avro-memory-kafka.sinks.k1.kafka.producer.acks = 1
avro-memory-kafka.sinks.k1.kafka.producer.linger.ms = 1
avro-memory-kafka.sinks.k1.kafka.producer.compression.type = snappy

# channels properties
avro-memory-kafka.channels.c1.type = memory

# bind the sources and sinks to channels
avro-memory-kafka.sources.r1.channels = c1
avro-memory-kafka.sinks.k1.channel = c1

2、步骤:

2.1、需要先启动B服务器上的Flume

flume-ng agent -n avro-memory-kafka -c /opt/flume/conf/ -f /opt/flume/conf/avro-memory-kafka.conf -Dflume.root.logger=INFO,console

命令行最后一部分会有信息如下:[INFO - org.apache.flume.source.AvroSource.start(AvroSource.java:260)] Avro source r1 started.

 2.2、然后启动A服务器上的Flume

 flume-ng agent -n exec-memory-avro -c /opt/flume/conf/ -f /opt/flume/conf/exec-memory-avro.conf -Dflume.root.logger=INFO,console

这时会看到B服务器上显示两台服务器连接成功的信息:。。。。B服务器IP:44444] CONNECTED: /A服务器IP:33478

 2.3、然后启动B服务器上的Kafka

kafka-console-consumer.sh --zookeeper h6:2181 --topic my-topic

 3、测试:

 3.1、向A服务器的文件写入信息进行测试

echo word count1  >> /home/cyx/data/flume-logs-tmp/logs.txt

echo word count2  >> /home/cyx/data/flume-logs-tmp/logs.txt

echo word count3  >> /home/cyx/data/flume-logs-tmp/logs.txt

echo word count4  >> /home/cyx/data/flume-logs-tmp/logs.txt

 3.2、查看B服务器的控制台,可以看到

word count1
word count2
word count3
word count4
如果没有到,需要等一会,因为flumeBatchSize = 5,需要超过设置缓存的时间后,才会传到Kafka中

 

注释:

1).tail -F /home/cyx/data/flume-logs-tmp/logs.txt 执行Linux命令tail,实时采集logs.txt中新增的日志

2).参数 flume.root.logger=INFO,console 是让打印日志消息到终端

3).flume 的启动参数 -n 后为flume的agent的名称,必须和对应的文件一直,否则启动不成功

posted @ 2018-04-05 15:20  Black&Fish  阅读(389)  评论(0编辑  收藏  举报