Flume-ng禁用自动加载配置文件功能

Posted 过往记忆大数据

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Flume-ng禁用自动加载配置文件功能相关的知识,希望对你有一定的参考价值。

  默认情况下,中的PollingPropertiesFileConfigurationProvider会每隔30秒去重新加载Flume agent的配置文件,如果监听到配置文件变化了,Flume会试图重新加载变化的配置文件。判断配置文件是否变化主要是基于文件的最后修改时间来的,代码片段如下:

01 /////////////////////////////////////////////////////////////////////
02 User: 过往记忆
03 Date: 2015-08-19
04 Time: 23:59
05 bolg: http://www.iteblog.com
06 本文地址:http://www.iteblog.com/archives/1467
07 过往记忆博客,专注于hadoop、hive、spark、shark、flume的技术博客,大量的干货
08 过往记忆博客微信公共帐号:iteblog_hadoop
09 /////////////////////////////////////////////////////////////////////
10 @Override
11


public void run() {

12

LOGGER.debug("Checking file:{} for changes", file);

13


14 counterGroup.incrementAndGet("file.checks");
15
16 long lastModified = file.lastModified();
17
1 if (lastModified > lastChange) {
19 LOGGER.info("Reloading configuration file:{}", file);
20
21 counterGroup.incrementAndGet("file.loads");
22
23

lastChange = lastModified;

24
25 try {
26 eventBus.post(getConfiguration());
27 } catch (Exception e) {
28 LOGGER.error("Failed to load configuration data. Exception follows.",
29 e);
30 } catch (NoClassDefFoundError e) {
31 LOGGER.error("Failed to start agent because dependencies were not " +
32 "found in classpath. Error follows.", e);
33 } catch (Throwable t) {
34 // caught because the caller does not handle or log Throwables
35 LOGGER.error("Unhandled error", t);
36 }
37 }
38 }

  然而,通常情况下,用户修改了配置文件之后就不会再去修改,而且让Flume自动去加载配置文件有时还会出现问题。不过值得高兴的是,我们可以在启动Flume的时候通过加上--no-reload-conf配置来禁止Flume自动加载配置文件。这个属性在Flume的官方文档并没有介绍;而且只有Apache的Flume存在这个参数,如果你使用的是Cloudera的Flume发行版,这个参数是不支持的,不过有人在https://issues.cloudera.org/browse/DISTRO-648里面提到这个参数,如果你感兴趣可以去看下。

  下面附上Apache的Flume发行版如何自动检测配置文件的变化的。

01


booleanreload = !commandLine.hasOption("no-reload-conf");


02


03


..........

04
05


List<lifecycleaware> components = Lists.newArrayList();

06


Application application;

07



if(reload) {

08

EventBus eventBus = new EventBus(agentName + "-event-bus");

09




PollingPropertiesFileConfigurationProvider configurationProvider =

10 new PollingPropertiesFileConfigurationProvider(agentName,
11

configurationFile, eventBus, 30);

12 components.add(configurationProvider);
13

application = new Application(components);

14 eventBus.register(application);
15 } else {
16 PropertiesFileConfigurationProvider configurationProvider =
17 new PropertiesFileConfigurationProvider(agentName,
18 configurationFile);
19 application = new Application();
20 application.handleConfigurationEvent(configurationProvider.getConfiguration());
21 }
22 application.start();

  如果你使用的是Flume 1.6.0版本,那么上述的代码和它有点不一样,因为Flume 1.6.0还可以通过Zookeeper来配置文件,所以Flume还可以自动地检测Zookeeper里面的配置变化,并重新加载,不过这里就不贴出代码了,感兴趣的同学可以自己去看。

上面格式有点乱,感兴趣的同学可以点击下面阅读原文进行阅读

以上是关于Flume-ng禁用自动加载配置文件功能的主要内容,如果未能解决你的问题,请参考以下文章

在 Firebase 中禁用自动活动跟踪

如何禁用 webpack 开发服务器自动重新加载?

使用 BottomBar 和片段容器禁用 Android 片段重新加载

spring boot 导入xml配置文件所需注解和禁用自动配置类的注解

从零开始配置vim(27)——代码片段

从零开始配置vim(27)——代码片段