Flume系统搭建和使用的一些经验总结-搭建篇

对于很多公司来说,日志的收集和集中管理是一个必然要经历的阶段。我们公司在经历了一拖再拖之后,终于不得不开始搭建日志收集系统了。

对于日志收集系统,我们的首选就是Flume。为何这么坚决呢,难道没有其他工具能做个这个事情么?当然有!不过,考虑到Flume的简单易用,稳定性和高扩展性,它是我们的最佳选择。(期间调研过很多人对于FlumeScribe等日志收集工具的对比分析,一个直观的感觉是:Flume更新,功能更强大,而且简单易用)

Flume系统的架构很灵活,可以根据自己的应用场景去灵活的适应。

我们的应用场景是这样子的:业务日志分布在不同的业务服务器上,需要统一收集起来,存储到HDFS上,以便于使用Spark进行数据分析。

我们的需求相对来说比较简单,而且日志量也并不太大。结合Flume官方文档给出的一个架构,我们设计了自己的Flume架构如下图:


每个业务服务器的Agent负责收集业务日志,然后发送到Collectors集群进行日志汇集,然后,Collectors集群将日志写到HDFS上。

这个架构在业界是一个比较常见,而且很成熟的架构。它的容灾性和扩展性比较好。

1)容灾性

每个AgentCollector使用FileChannel来缓存数据,即使发生宕机或其他异常情况,缓存的数据都是可恢复的,不会丢数据;

2)扩展性

Collector可以进行横向扩展,以接收更大规模的日志;而且Collector集群后还可以再增加下一跳的日志接收方,比如使用Flume或者Kafka对日志进一步缓冲,以应对日志量非常庞大的情况

对于我们的需求,初期使用这个架构应该够用了,不过还需要在集群上进行压力测试以确保满足需求。

根据Flume的官方文档去进行部署和启动,是一个比较轻松的事情。

部署完成后,配置文件中参数的配置是一个让人花精力去尝试的问题。导致耗费精力的原因有以下几点:

1)官方文档对于每个配置项的解释和示例过于简单;

2)各种博客和帖子介绍的配置项并不是非常全面,很多帖子中介绍的配置不适合在线上生产环境中使用,因为缺少了一些重要配置项;

下面给出我们在HDFS sink过程使用的配置文件,供参考(如果使用HDFS sink,建议把下面配置中的所有参数都配置好,否则,可能会出现莫名现象):

# -----------the sources,the channels and the sinks.in this case called 'collectorAgent'---------
collectorAgent.sources=srcca
collectorAgent.channels=channelca
collectorAgent.sinks=skca
 
# -----------sources config-----------
collectorAgent.sources.srcca.type=avro
collectorAgent.sources.srcca.bind=0.0.0.0
collectorAgent.sources.srcca.port=55555
collectorAgent.sources.srcca.channels=channelca
 
# -----------channels config-----------
collectorAgent.channels.channelca.type=file
collectorAgent.channels.channelca.checkpointDir=/data/flume/collector/channels/checkpoint               #collector的备份文件目录
collectorAgent.channels.channelca.useDualCheckpoints=true                                               #是否对备份文件启用备份
collectorAgent.channels.channelca.backupCheckpointDir=/data/flume/collector/channels/checkpointBak      #备份的文件目录
collectorAgent.channels.channelca.dataDirs=/data/flume/collector/channels/data
collectorAgent.channels.channelca.capacity=200000000
collectorAgent.channels.channelca.keep-alive=30
collectorAgent.channels.channelca.maxFileSize=2000000000
collectorAgent.channels.channelca.checkpointOnClose=true
collectorAgent.channels.channelca.transactionCapacity=10000
 
# -------hdfs sinks config-----------
collectorAgent.sinks.skca.type=hdfs
collectorAgent.sinks.skca.channel=channelca
collectorAgent.sinks.skca.hdfs.path=hdfs://***/***/***/flume/game/%Y-%m-%d
collectorAgent.sinks.skca.hdfs.filePrefix=test_%H
collectorAgent.sinks.skca.hdfs.fileSuffix=.log
collectorAgent.sinks.skca.hdfs.rollInterval=0
collectorAgent.sinks.skca.hdfs.rollSize=128000000
collectorAgent.sinks.skca.hdfs.rollCount=0
collectorAgent.sinks.skca.hdfs.minBlockReplicas=1
collectorAgent.sinks.skca.hdfs.idleTimeout=3600
collectorAgent.sinks.skca.hdfs.fileType=DataStream
collectorAgent.sinks.skca.hdfs.writeFormat=Text
collectorAgent.sinks.skca.hdfs.batchSize=1500
collectorAgent.sinks.skca.hdfs.maxOpenfiles=5000
collectorAgent.sinks.skca.hdfs.callTimeout=500
collectorAgent.sinks.skca.hdfs.threadsPoolSize=2000
collectorAgent.sinks.skca.hdfs.useLocalTimeStamp=true

总结

1Flume Agent的稳定性比较高;

2)配置文件中的细节很重要,配置不对,往往产生莫名其妙的问题,如果遇到莫名问题,极有可能是配置有问题,请耐心阅读文档和尝试;

3)配置文件中的参数配置对系统性能影响比较大,请耐心尝试,找到最优参数组合;

3FileChannel的容灾很好,不过它会严重限制Sink的速度,根据我们的测试,使用Memory Channel的性能大约是FileChannel410倍;FileChannel性能的吞吐上限大概是2Ms(使用SSD硬盘来存储FileChannelcheckpoint)。

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值