flume实时采集全量或者增量文件或者文件夹数据到kafka
这里安装的Flume单节点,Kafka单节点,目标是通过Flume去读取文件中的历史数据导入到kafka中,还有就是将实时更新的数据传输到kafka中。
一、Flume安装
Flume的安装使用可以说非常简单,直接进官网:http://flume.apache.org/
最新是1.9.0版本,我们选择1.8.0版本下载。
配置flume的环境变量:略
二、kafka安装
kafka官网:http://kafka.apache.org/downloads
我下载的是kafka_2.11-2.4.0
启动服务器,配置好jdk和kafka就可以启动了,启动之前要先启动zookeeper服务器,zookeeper是为kafka提高协调服务的工具。kafka已经内置了一个zookeeper服务器以及一些启动脚本。
后台启动:
nohup ./zookeeper-server-start.sh ../config/zookeeper.properties &
启动好zookeeper以后,然后启动kafka服务器。
nohup bin/kafka-server-start.sh config/server.properties &
此时kafka的配置也完成。
三、flume实时采集数据到kafka中
创建topic
./kafka-topics.sh --zookeeper localhost:2181 --create --topic pms --partitions 1 --replication-factor 1
topic生产者
./kafka-console-producer.sh --topic pms --broker-list cdh01:9092
Topic消费者
./kafka-console-consumer.sh --bootstrap-server cdh01:9092 --topic pms
在conf下创建kakfa-producer.conf文件
此为读取原先日志的数据,并且读取新增的数据到kafka。
pro.sources = s1
pro.channels = c1
pro.sinks = k1
pro.sources.s1.type = exec
pro.sources.s1.command = tail -F -c +0 /opt/standalone/pms3321.log
pro.channels.c1.type = memory
pro.channels.c1.capacity = 1000
pro.channels.c1.transactionCapacity = 100
pro.sinks.k1.type = org.apache.flume.sink.kafka.KafkaSink
pro.sinks.k1.kafka.topic = pms
pro.sinks.k1.kafka.bootstrap.servers = cdh01:9092
pro.sinks.k1.kafka.flumeBatchSize = 20
pro.sinks.k1.kafka.producer.acks = 1
pro.sinks.k1.kafka.producer.linger.ms = 1
pro.sinks.k1.kafka.producer.compression.type = snappy
pro.sources.s1.channels = c1
pro.sinks.k1.channel = c1
启动flume:
nohup flume-ng agent -n pro -c ./ -f kafka-producer.conf &
此为不读取原先日志的数据,只读取新增的数据
pro.sources = s1
pro.channels = c1
pro.sinks = k1
pro.sources.s1.type = exec
pro.sources.s1.command = tail -F /opt/standalone/pms3321.log
pro.channels.c1.type = memory
pro.channels.c1.capacity = 1000
pro.channels.c1.transactionCapacity = 100
pro.sinks.k1.type = org.apache.flume.sink.kafka.KafkaSink
pro.sinks.k1.kafka.topic = pms
pro.sinks.k1.kafka.bootstrap.servers = cdh01:9092
pro.sinks.k1.kafka.flumeBatchSize = 20
pro.sinks.k1.kafka.producer.acks = 1
pro.sinks.k1.kafka.producer.linger.ms = 1
pro.sinks.k1.kafka.producer.compression.type = snappy
pro.sources.s1.channels = c1
pro.sinks.k1.channel = c1
启动flume:
nohup flume-ng agent -n pro -c ./ -f kafka-producer.conf &
四、flume的Taildir监控多个文件夹并且将历史数据和新增数据添加到指定的文件夹中的一个文件
一言不合直接上配置文件
配置文件中:
a1.sources.r1.positionFile:记录着文件的偏移量
本人亲测:如果直接执行的话,会将所有的数据都存在一个输出数据文件中,并且随着数据的增多,会实时更新到数据文件中,并且记录文件的偏移量,假设将输出数据文件删除在重新启动配置文件,则会重新生成数据文件并且按照上次的偏移量记录。
a1.sources = r1
a1.channels = c1
a1.sinks = k1
a1.sources.r1.type = TAILDIR
#偏移量文件
a1.sources.r1.positionFile = /opt/standalone/apache-flume-1.8.0-bin/conf/taildir_position.json
#文件的组,可以定义多种
a1.sources.r1.filegroups = f1 f2
#第一组监控的是test1文件夹中的什么文件:.log文件
a1.sources.r1.filegroups.f1 = /home/javadev/f1/F1_Service/f1-microservice/f1_mlgj/logs/.*log
#第二组监控的是test2文件夹中的什么文件:以.log结尾的文件
a1.sources.r1.filegroups.f2 = /home/javadev/f1/F1_Service/f1-microservice/f1_rzgz/logs/.*log
a1.channels.c1.type = memory
a1.channels.c1.capacity = 1000
a1.channels.c1.transactionCapacity = 100
a1.sinks.k1.type=file_roll
a1.sinks.k1.sink.directory=/home/javadev/f1/F1_Service/f1-microservice/f1-totalLogs
a1.sinks.k1.sink.rollInterval=0
a1.sources.r1.channels = c1
a1.sinks.k1.channel = c1
启动flume:
nohup flume-ng agent -n a1 -c ./ -f logs-to-totallogs.conf &
至此flume实时采集全量或者增量文件或者文件夹数据到kafka的操作完毕