现在有一个项目数据文件:event_attendees.csv、events.csv、test.csv、train.csv、user_friends.csv、users.csv
需求:需要将这些文件通过flume传到kafka中。
首先,你的虚拟机需要具备jdk、flume、kafka、zookeeper。
本人上述软件版本为:jdk-8u111-linux-x64.tar.gz、flume-ng-1.6.0-cdh5.14.2.tar.gz、kafka_2.11-2.0.0.tgz、zookeeper-3.4.5-cdh5.14.2.tar.gz
1.在/opt路径下,创建6个文件夹,分别存放上述的6个文件。
在/opt路径下,创建flumechk文件夹,用来临时存放数据的地址以及检查点。
在/opt路径下,创建flumecfg文件夹,用来存放6个flume的conf文件。
此步骤省略。
2.编辑conf文件。
①flume_event_attendees_kafka.conf
#定义source,channel和sink的名字
a2.channels=c2
a2.sources=s2
a2.sinks=k2
#设置source为Spooling Directory Source(专门对文件提取的一种source)
a2.sources.s2.type=spooldir
a2.sources.s2.channels=c2
#设置提取文件目录位置
a2.sources.s2.spoolDir=/opt/events
#按行解析最大长度字符.这个需要根据对应的文件一行有多少字符,来设定
#使用wc -L event_attendees.csv即可查看
a2.sources.s2.deserializer.maxLineLength=120000
#拦截器:将表的表头过滤掉
a2.sources.s2.interceptors=i2
a2.sources.s2.interceptors.i2.type=regex_filter
#正则匹配,将行开头为event的一行数据过滤掉
a2.sources.s2.interceptors.i2.regex=\s*event.*
a2.sources.s2.interceptors.i2.excludeEvents=true
#设置临时存放数据的地址以及检查点
a2.channels.c2.type=file
#将存储检查点文件的目录
a2.channels.c2.checkpointDir=/opt/flumechk/checkpoint
a2.channels.c2.dataDirs=/opt/flumechk/data
#设置sink端
a2.sinks.k2.type=org.apache.flume.sink.kafka.KafkaSink
a2.sinks.k2.kafka.topic=event_attendees_raw
a2.sinks.k2.kafka.bootstrap.servers=192.168.21.130:9092
#一批中要处理多少条消息
a2.sinks.k2.kafka.flumeBatchSize=20
#设置通道
a2.sinks.k2.channel=c2
#设置应答机制
a2.sinks.k2.kafka.producer.acks=1
#保留缓存时间,单位为ms
a2.sinks.k2.kafka.producer.linger.ms=10
#一批的记录大小,单位为B
a2.sinks.k2.kafka.producer.batch.size=524288
开启两个服务:
zkServer.sh start
kafka-server-start.sh /opt/software/kafka211/config/server.properties
创建主题:
kafka-topics.sh --create --topic event_attendees_raw --zookeeper 192.168.21.130:2181 --replication-factor 1 --partitions 1
开启consumer消费从头开始:
kafka-console-consumer.sh --bootstrap-server 192.168.21.130:9092 --topic event_attendees_raw --from-beginning
先更改一下/opt/software/flume160/bin下面的flume-ng文件。避免内存溢出。
JAVA_OPTS="-Xmx2048m"
开启flume服务:
flume-ng agent -n a2 -c /opt/software/flume160/conf/ -f /opt/flumecfg/flume_kafka.conf -Dflume.root.logger=DEBUG,console
可以通过一下命令查看上述主题的偏移量是否已写完:
kafka-run-class.sh kafka.tools.GetOffsetShell --broker-list 192.168.21.130:9092 --topic event_attendees_raw --time -1
说明,event_attendees.csv文件已经写到event_attendees_raw主题中了。over!