内存

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

因为 Flume 进程也是基于 Java 的,所以就涉及到进程的内存设置,一般建议启动的单个 Flume 进程(或者说单个Agent)内存设置为 1G~2G,内存太小的话会频繁 GC,影响 Agent 的执行效率。那具体设置多少合适呢?这个需求需要根据 Agent 读取的数据量的大小和速度有关系,所以需要具体情况具体分析,当 Flume 的 Agent 启动之后,对应就会启动一个进程,我们可以通过 jstat -gcutil PID 1000 来看看这个进程 GC 的信息,每一秒钟刷新一次,如果 GC 次数增长过快,说明内存不够用。使用 jps 查看目前启动 flume 进程:
image.png
在这里主要看 YGC YGCT FGC FGCT GCT

YGC:表示新生代堆内存 GC 的次数,如果每隔几十秒产生一次,也还可以接受,如果每秒都会发生一次 YGC,那说明需要增加内存了。
YGCT:表示新生代堆内存 GC 消耗的总时间。
FGC:FULL GC 发生的次数,注意,如果发生 FUCC GC,则 Flume 进程会进入暂停状态,FUCC GC 执行完以后,Flume 才会继续工作,所以 FUCC GC 是非常影响效率的,这个指标的值越低越好,没有更好。
GCT:所有类型的 GC 消耗的总时间。
如果需要调整 Flume 进程内存的话,需要调整 flume-env.sh 脚本中的 JAVA_OPTS 参数,把 export JAVA_OPTS 参数前面的#号去掉才会生效。
image.png
建议这里的 Xms 和 Xmx 设置为一样大,避免进行内存交换,内存交换也比较消耗性能。

区分日志

在一台服务器启动多个 agent 的时候,建议修改配置区分日志文件。(Agent自己产生的日志,非source)

因为在 conf 目录下有 log4j.properties,在这里面指定了日志文件的名称和位置,所有使用 conf 目录下面配置启动的 Agent 产生的日志都会记录到同一个日志文件中(apache-flume-1.9.0-bin/logs/flume.log),如果我们在一台机器上启动了10几个 Agent,后期发现某一个 Agent 挂了,想要查看日志分析问题,这个时候就疯了,因为所有 Agent 产生的日志都混到一块了,压根都没法分析日志了。所以建议拷贝多个 conf 目录,然后修改对应 conf 目录中 log4j.properties 日志的文件名称(可以保证多个agent的日志分别存储),并且把日志级别调整为warn(减少垃圾日志的产生),默认 info 级别会记录很多日志信息。这样在启动 Agent 的时候分别通过 –conf 参数指定不同的 conf 目录,后期分析日志就方便了,每一个 Agent 都有一个单独的日志文件。

以 bigdata04 机器为例:复制 conf-failover 目录,以后启动 sink 的 failover 任务的时候使用这个目录,修改 log4j.properties 中的日志记录级别和日志文件名称,日志文件目录可以不用修改,统一使用 logs 目录即可。

后期一个conf目录下,只放一个.conf文件

  1. cd /data/soft/apache-flume-1.9.0-bin
  2. cp -r conf/ conf-failover
  3. cd conf-failover/
  4. vi log4j.properties

image.png
再启动的时候就是这样的了

nohup bin/flume-ng agent --name a1 --conf conf-failover --conf-file conf/failover.conf &