大数据开发Flume自定义组件(第十五篇)

223 阅读2分钟

一、自定义组件

source、channel、sink以及Source Interceptors,Channel Selectors、Sink Processors针对这些组件,Flume都内置提供了组件的很多具体实现,在实际工作中,95%以上的数据采集需求都是 可以满足的,但是谁也不敢保证100%都能满足,因为什么奇葩的需求都会有,那针对系统内没有提供的一些组件怎么办呢?

从官网flume.apache.org/releases/co…可以查看官网给的示范

二、Flume的优化

2.1、调整Flume进程内存大小

调整Flume进程的内存大小,建议设置1G~2G,太小的话会导致频繁GC

因为Flume进程也是基于Java的,所以就涉及到进程的内存设置,一般建议启动的单个Flume进程(或者说单个Agent)内存设置为1G~2G,内存太小的话会频繁GC,影响Agent的执行效率。

  1. jps

  2. jstat -gcutil 进程id 时间间隔

    jstat -gcutil [interval] [times]

    可以用[interval]来控制每隔多少毫秒重复输出一次,并通过[times]参数来控制输出的总次数。这两个参数都是可以省略的,如果都省略的话,就只输出一次。

    我会重点关注是FullGC的次数和总时间。FGC是FullGC的次数,FGCT是FullGC的总耗时(s)。

  S0     S1     E      O      M     CCS    YGC     YGCT    FGC    FGCT     GCT   
  0.00  92.97  31.13  50.69  97.97  95.63     11    0.260     2    0.088    0.348
  0.00  92.97  31.13  50.69  97.97  95.63     11    0.260     2    0.088    0.348
  0.00  92.97  31.13  50.69  97.97  95.63     11    0.260     2    0.088    0.348
  0.00  92.97  31.13  50.69  97.97  95.63     11    0.260     2    0.088    0.348
  0.00  92.97  31.13  50.69  97.97  95.63     11    0.260     2    0.088    0.348

在这里主要看YGC YGCT FGC FGCT GCT

  • YGC:表示新生代堆内存GC的次数,如果每隔几十秒产生一次,也还可以接受,如果每秒都会发生一次YGC,那说明需要增加内存了
  • YGCT:表示新生代堆内存GC消耗的总时间
  • FGC:FULL GC发生的次数,注意,如果发生FUCC GC,则Flume进程会进入暂停状态,FUCC GC执行完以后,Flume才会继续工作,所以FUCC GC是非常影响效率的,这个指标的值越低越好,没有更好
  • FGCT:FULL GC所消耗的时间
  • GCT:所有类型的GC消耗的总时间

如果需要调整Flume进程内存的话,需要调整 flume-env.s h脚本中的 JAVA_OPTS 参数。把 export JAVA_OPTS 参数前面的#号去掉才会生效。建议这里的 Xms 和 Xmx 设置为一样大,避免进行内存交换,内存交换也比较消耗性能。