数据准备
把需要传输的文件event_attendees.csv放到新建的文件下,我的路径是/root/data/event_attendees
开启服务
zkServer.sh start
kafka-server-start.sh /opt/soft/kafka211/config/server.properties
flume准备工作:
在root下新建文件夹flume和flumeconf,flume下新建文件夹checkpoint和data,flumeconf下新建配置文件event_attendees.conf
event_attendees.conf文件配置:
a1.channels = c1
a1.sources = s1
a1.sinks = k1
a1.sources.s1.type = spooldir
a1.sources.s1.channels = c1
#需要传输的文件所在的路径,写到文件夹
a1.sources.s1.spoolDir = /root/data/event_attendees
#更改每行的最大长度,如果待传的文件有一行过大而超过默认参数值,那么就会被分行,导致后续查询行数和原文件不一致
a1.sources.s1.deserializer.maxLineLength=120000
#设置正则拦截器,拦截表头
a1.sources.s1.interceptors=i1
a1.sources.s1.interceptors.i1.type = regex_filter
a1.sources.s1.interceptors.i1.regex = \s*event.*
#符合上述正则规则会被拦截
a1.sources.s1.interceptors.i1.excludeEvents=true
a1.channels.c1.type = file
a1.channels.c1.checkpointDir = /root/flume/checkpoint
a1.channels.c1.dataDirs = /root/flume/data
a1.sinks.k1.channel = c1
a1.sinks.k1.type = org.apache.flume.sink.kafka.KafkaSink
a1.sinks.k1.kafka.topic = event_attendees
a1.sinks.k1.kafka.bootstrap.servers = 192.168.181.132:9092
#flume批量发送文件的大小
a1.sinks.k1.kafka.flumeBatchSize = 20
#设置kafka的ack应答机制为1,保证收到leader的接收完成反馈信息
a1.sinks.k1.kafka.producer.acks = 1
#kafka内部批量发送的文件大小
a1.sinks.k1.kafka.producer.batch.size=524288
#kafka缓存时间,毫秒单位,设置了就算达到批量发送的大小也会等待,不设置的话可能还没达到批量发送的文件大小也会发送
a1.sinks.k1.kafka.producer.linger.ms = 10
kafka准备工作:
创建topic
kafka-topics.sh --zookeeper 192.168.181.132:2181 --create --topic event_attendees --replication-factor 1 --partitions 1
监控flume传入数据的信息:
kafka-console-consumer.sh --bootstrap-server 192.168.181.132:9092 --topic event_attendees --from-beginning
运行conf文件,操作传输数据:
flume-ng agent -n a1 -c /opt/soft/flume160/conf -f /root/flumeconf/event_attendees.conf -Dflume.root.logger=DEBUG,console
待监控窗口和执行conf文件的窗口停止运行,可以查看导入的数据行数
flume-ng agent -n a1 -c /opt/soft/flume160/conf -f /root/flumeconf/event_attendees.conf -Dflume.root.logger=DEBUG,console