Flume 数据采集系统 性能优化和关键问题汇总

原创 2016年06月01日 20:02:56

flume 性能优化

flume的整体基础架构包括三个,分别是source,chanel, sink. 下面是官网的截图:



因此,优化要从三个组件的角度去分别优化。

1、source  

sources是flume日志采集的起点,监控日志文件系统目录。其中最常用的是 Spooling Directory Source , Exec Source 和 Avro Source 。

关键参数讲解:

(1)batchSize: 这个参数当你采用的是 Exec Source 时,含义是一次读入channel的数据的行数,当你采用Spooling Directory Source含义是 Granularity(粒度) at which to batch transfer to the channel ,据我分析应该是events(flume最小处理数据单元)的数量。

这个参数一般 会设置比较大,一般的数值跟每秒要处理的数值相当。

(2)inputCharset 这个很重要,就是文本文件的编码,默认是flume按照utf-8处理,如果文本数据是gbk,则要增加此参数,

(3)interceptors flume自带的拦截器,可以根据正则表达式去过滤数据,但是据我实际经验总结,这个配置很影响入库性能,因此这部分工作我基本都在sink代码里面做。



2、channel 

channel 是flume的中间数据缓存管道,有点类似kafka的机制,因此个组件的性能很重要。

我在项目中主要采用的是menmory channel,原因是数据量大,要求极大的数据吞吐量和速度,但是有一点不好的是

如果一旦flume进程down掉,是没有“续点传输”的机制的,filechannel 和它正好相反。 


关键参数讲解:

 (1)   capacity  :   存储在channel中的events的最大数量

 (2)   transactionCapacity : 每次数据由channel到sink传输的最大events的数量

 (3)   byteCapacity  :该channel的内存大小,单位是 byte 。

 



其中transactionCapacity关键中最容易忽略的,因为每个sink的终端不一样,批处理的数量要严格限制。还有一点,events的数量值和channel大小不是一回事,一个event包括单位数据的内容+头数据+数据传输状态。可以说 (events的数量值*单位数据所占字节数)* 0.9 = 所占空间内存数值(就是想说明transactionCapacity 的大小和byteCapacity  不能简答的数值比较 )。


3、sink  

sink组件的核心工作是把channel中数据进行输出到特定的终端,比如hdfs,hbase,database,avro等等。

因此这块的核心优化工作在 优化各个终端(hdfs,hbase,database,avro)的数据插入性能。在这里面我只优化过hbase的数据插入性能(具体的做法就是打开flume hbasesink源码,修改然后打包),当然这块的工作不在flume本身,这也不是flume所能控制的。




4、整体架构


    这三个组件当然顺序不能颠倒,但是每个组件的数量你可以自定义规定。 一个flume agent 就好比一个进程,一个source就好比进程里面的一个大组件,但是这里面注意的是每个sink 你又可以定义多个子线程,就是说一个flume agent进程可以多个sink,每个sink又可以多个线程(具体参数是 threadsPoolSize)。


5、 JAVA内存的设计  

主要通过修改 conf/flume-env.sh文件实现
主要设计Xmx和Xms两个参数,可以根据OS内存的大小进行合理设置,  一般以每秒处理5000行Apache日志的速度,需要配置 5-10个G 。
-Xms<size>        set initial Java heap size.........................
-Xmx<size>        set maximum Java heap size.........................


6 、 主要问题

这里面最恶心的问题是 三个组件互相传递数据速度不一致,这是要严格限制和摒除的,这也是flume的小难点之一吧。如果不一致,会严重影响采集整个系统的稳定性。当然这块我也在逐渐摸索,其他优化方面待续  ........................................








版权声明:本文为博主原创文章,未经博主允许不得转载。

flume性能调优总结

fllume经常被用在生产环境中收集后端产生的日志。一个flume进程就是一个Agent。要充分发挥flume的性能最主要的是要调好flume的配置参数。 flume agent配置分为三部分:Sou...
  • yanshu2012
  • yanshu2012
  • 2017年01月06日 11:42
  • 2108

Flume性能测试报告

1. 测试环境1.1 硬件 CPU:Intel(R) Core(TM) i7-6700 CPU @ 3.40GHz(8核) 内存:16G 1.2 软件 Flume:1.6.0 Hadoop:2...
  • Lnho2015
  • Lnho2015
  • 2016年07月15日 13:42
  • 10778

flume 性能优化

如图1所示,一个flume-ng agent主要包括source,channel和sink三部分,三部分运行在Java JVM中,JVM一般运行在linux'操作系统上,因此,这些因素都可能影响最终的...
  • lifuxiangcaohui
  • lifuxiangcaohui
  • 2016年09月22日 14:26
  • 1217

flume高并发优化——(14)解决空行停止收集数据问题,及offsets变小问题

日志平台运行一段时间,发现日志有部分丢失,通过检查日志,发现有两个问题导致数据丢失,一个是遇到空行后,日志停止收集,还有就是kafka监控offsets时变小,通过分析代码,找到如下方法:空行问题: ...
  • xvshu
  • xvshu
  • 2017年07月21日 15:42
  • 777

Flume agent端event重复发送(数据暴增不一致)的问题

一直用flume做数据收集,用了好一阵子都没出现数据误差的问题,今天在导入数据的时候却突然出现了数据暴增的问题,查看原始数据文件,只有几十万条数据,可却收集到了几百万的event,而且还在持续的增加。...
  • rzhzhz
  • rzhzhz
  • 2012年05月28日 18:28
  • 3898

flume高并发优化——(1)load_balance

通过一年多时间的使用,统一日志系统,已经接入公司前台,在20个节点,几十万用户,数百亿交易额的大压力下,仅仅使用了一个普通的服务器,承受住了严峻的考验,在公司今年更宏大的目标,也是为了给大数据组提供更...
  • xvshu
  • xvshu
  • 2016年04月25日 16:33
  • 5874

flume高并发优化——(3)haproxy

在上篇博客中,我们虽然进行了较大的改动,但是,没有料到的是,flume的file性能瓶颈会如此快的到来,由于我们使用了一个filechannel作为负载均衡的通道,导致性能瓶颈很快到来,为了应对这样的...
  • xvshu
  • xvshu
  • 2016年04月25日 17:09
  • 4341

flume-ng性能优化与架构设计

如图1所示,一个flume-ng agent主要包括source,channel和sink三部分,三部分运行在java JVM中,JVM一般运行在linux'操作系统上,因此,这些因素都可能影响最终的...
  • hijk139
  • hijk139
  • 2014年04月03日 12:28
  • 18472

使用Ganglia监控Flume的性能指标数据

一、原理 根据“《Monitoring with Ganglia》Chapter 2 Installing and Configuring Ganglia”,Ganglia中收集性能指标数据的是Gmo...
  • DSLZTX
  • DSLZTX
  • 2015年09月28日 10:37
  • 4326

flume性能调优

一个flume-ng agent主要包括source,channel和sink三部分,三部分运行在Java JVM中,JVM一般运行在Linux'操作系统上,因此,这些因素都可能影响最终的性能。flu...
  • qq_39532946
  • qq_39532946
  • 2017年08月08日 20:47
  • 248
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Flume 数据采集系统 性能优化和关键问题汇总
举报原因:
原因补充:

(最多只允许输入30个字)