Flume+Kafka实例演示(离线文件采集)

一、为什么集成flume和kafka?

       一般使用Flume+Kafka架构都是希望完成实时流式的日志处理,前台可能有多个Flume端采集数据向存储服务器扔,这时数据采集速度过快,而一旦数据处理速度无法跟上采集速度,很容易造成数据堆积或数据丢失的结果。这时,kafka可以当做一个消息缓存队列,从广义上理解,把它当做一个数据库,可以存放一段时间的数据;第二、Kafka属于中间件,一个明显的优势就是使各层解耦,使得出错时不会干扰其他组件。


二、Flume+Kafka实战

2.1 Flume配置

  • flume采集的是离线型文件数据,source采用Spooling Directory Source;
  • 数据都是存储在文件内,channel采用File Channel;
  • 因为数据出口为kafka,sinks自然采用kafka sink;
[root@sole flume_conf]# vi kafka_event.conf


#定义source,channel,和sink的名字
a1.channels=c1
a1.sources=s1
a1.sinks=k1

#设置source为Spooling Directory Source(专门对文件提取的一种source)
a1.sources.s1.type=spooldir
a1.sources.s1.channels=c1
#设置source文件目录位置
a1.sources.s1.spoolDir=/opt/data/events
#设置单个事件中包含的最大字符数。如果一行超出此长度,则会被截断,并且该行中的其余字符将出现在后续事件中;
#这里如果不知道单行最大长度,可以用命令查看(wc -L FILENAME)
a1.sources.s1.deserializer.maxLineLength=1000
#因为文件首行包含表头,需要添加过滤器过滤表头
a1.sources.s1.interceptors=i1
#设置为正则过滤,条件成立则过滤
a1.sources.s1.interceptors.i1.type=regex_filter
a1.sources.s1.interceptors.i1.regex=\s*event_id.*
a1.sources.s1.interceptors.i1.excludeEvents=true


#设置channel为File Channel,并设置检查点目录、数据目录
a1.channels.c1.type=file
a1.channels.c1.checkpointDir=/opt/flume/checkpoint
a1.channels.c1.dataDirs=/opt/flume/data

#设置sink为kafka sink
a1.sinks.k1.channel=c1
a1.sinks.k1.type=org.apache.flume.sink.kafka.KafkaSink
#设置kafka对应的topic
a1.sinks.k1.kafka.topic=events
#kafka所在ip地址
a1.sinks.k1.kafka.bootstrap.servers=192.168.237.160:9092
#设置flume批量发送的数量
a1.sinks.k1.kafka.flumeBatchSize=10
#设置kafka produce的ack备份机制(-1为leader和follow全部备份完成反馈)
a1.sinks.k1.kafka.producer.acks=-1
#设置produce发送日志的间隔时间(与下面的条件为或关系,二者满足其一都发送日志消息)
a1.sinks.k1.kafka.producer.linger.ms=1
#设置kafka批发送的字节数大小
a1.sinks.k1.kafka.producer.batch.size=4096


2.2 Kafka配置

  • 创建kafka主题,准备写入日志数据;
[root@sole ~]# kafka-topics.sh --create --topic events  --zookeeper 192.168.237.160:2181 --replication-factor 1 --partitions 1

2.3 开启消费端,并执行Agent任务

  • 新开一个session开启kafka对应主题的consumer消费数据
[root@sole ~]# kafka-console-consumer.sh --bootstrap-server 192.168.237.160:9092 --topic events --from-beginning
  • 执行Agent任务
[root@sole ~]# flume-ng agent --name a1 --conf /opt/software/flume160/conf/ -f /opt/flumeconf/kafka_event.conf -Dflume.root.logger=DEBUG,console


2.4 数据检查

  • kafka端查看offset与文件行数是否一致,确保数据无误;
[root@sole ~]# kafka-run-class.sh kafka.tools.GetOffsetShell --broker-list 192.168.237.160:9092 --topic events --time -1

三、问题总结

  • Flume采集数据半途不再采集数据,原因是内存溢出:编辑${FLUME_HOME}/bin/flume-ng,修改JAVA_OPTS="-Xmx20m" (默认为20m) ,调整内存大小但是别超过你的物理内存;
  • 采集数据的行数超过文件对应的行数:source端的deserializer.maxLineLength设置过小,没有超过文件最长行的字节长度;
  • channel的目录检查:没有将检查点目录和数据目录清空

PS:如果有写错或者写的不好的地方,欢迎各位大佬在评论区留下宝贵的意见或者建议,敬上!如果这篇博客对您有帮助,希望您可以顺手帮我点个赞!不胜感谢!

原创作者:wsjslient

作者主页:https://blog.csdn.net/wsjslient


  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值