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

原创 2016年05月31日 17:19:13

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

@Override
public void run() {
      LOGGER.debug("Checking file:{} for changes", file);

      counterGroup.incrementAndGet("file.checks");

      long lastModified = file.lastModified();

      if (lastModified > lastChange) {
        LOGGER.info("Reloading configuration file:{}", file);

        counterGroup.incrementAndGet("file.loads");

        lastChange = lastModified;

        try {
          eventBus.post(getConfiguration());
        } catch (Exception e) {
          LOGGER.error("Failed to load configuration data. Exception follows.",
              e);
        } catch (NoClassDefFoundError e) {
          LOGGER.error("Failed to start agent because dependencies were not " +
              "found in classpath. Error follows.", e);
        } catch (Throwable t) {
          // caught because the caller does not handle or log Throwables
          LOGGER.error("Unhandled error", t);
        }
      }
}
然而,通常情况下,用户修改了配置文件之后就不会再去修改,而且让Flume自动去加载配置文件有时还会出现问题。不过值得高兴的是,我们可以在启动Flume的时候通过加上--no-reload-conf配置来禁止Flume自动加载配置文件。这个属性在Flume的官方文档并没有介绍;而且只有Apache的Flume存在这个参数,如果你使用的是Cloudera的Flume发行版,这个参数是不支持的,不过有人在https://issues.cloudera.org/browse/DISTRO-648里面提到这个参数,如果你感兴趣可以去看下。

  下面附上Apache的Flume发行版如何自动检测配置文件的变化的。
boolean reload = !commandLine.hasOption("no-reload-conf"); 

..........

List<lifecycleaware> components = Lists.newArrayList();
Application application;
if(reload) {
        EventBus eventBus = new EventBus(agentName + "-event-bus");
        PollingPropertiesFileConfigurationProvider configurationProvider =
            new PollingPropertiesFileConfigurationProvider(agentName,
                configurationFile, eventBus, 30);
        components.add(configurationProvider);
        application = new Application(components);
        eventBus.register(application);
} else {
        PropertiesFileConfigurationProvider configurationProvider =
            new PropertiesFileConfigurationProvider(agentName,
                configurationFile);
        application = new Application();
        application.handleConfigurationEvent(configurationProvider.getConfiguration());
}
application.start();
如果你使用的是Flume 1.6.0版本,那么上述的代码和它有点不一样,因为Flume 1.6.0还可以通过Zookeeper来配置文件,所以Flume还可以自动地检测Zookeeper里面的配置变化,并重新加载,不过这里就不贴出代码了,感兴趣的同学可以自己去看。

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

相关文章推荐

Flume NG源码分析(二)支持运行时动态修改配置的配置模块

在上一篇中讲了Flume NG配置模块基本的接口的类,PropertiesConfigurationProvider提供了基于properties配置文件的静态配置的能力,这篇细说一下PollingP...

flume-ng配置文件详解(三)

8 Replicating Channel Selector flume从一个agent1将event发送到多个通道,称为数据的复制 关键配置:agent1.sources.r1.se...

我是如何成为一名python大咖的?

人生苦短,都说必须python,那么我分享下我是如何从小白成为Python资深开发者的吧。2014年我大学刚毕业..

flume-ng配置文件详解(二)

4 Syslogtcp案例 [root@localhost apache-flume-1.7.0-bin]# vi conf/tcp.conf agent1.sources = r1 ...

当我们修改WEB-INF下的任何一个配置文件的时候,如何让tomcat自动加载

在进行项目的开发过程中,如果我们修改了WEB-INF下的某个配置文件,我们总希望tomcat能够自动的监听到这些变化,从而自动的加载这些变化的配置文件,那么我们该如何操作呢?这个时候我们就需要单独的为...

Android在debug和release模式自动加载不同的配置文件

Android在debug和release模式自动加载不同的配置文件 思路: 1. 判断当前运行在何种模式下 2. 加载配置文件 1. 判断当前运行在何种模式下当直接在eclipse中...

ALSA配置文件(alsa.conf, asoundrc, asound.conf)及其自动加载 And HDMI Adiuo

警告:错误的EDID会造成HDMI发声异常   #title:box:HDMI Audio #author:wangsijie #:0,1 -------------------------...

关于struts2中自动加载模块的struts2的配置文件解决方案

在大的项目的开发中,如果采用了struts2,就有可能有很多的struts2的配置文件,虽然struts2提供通配符和action的自动加载,但我们一般还是很难将所有的配置文件采用一个单一的actio...

ALSA配置文件(alsa.conf, asoundrc, asound.conf)及其自动加载 And HDMI Adiuo

ALSA配置文件(alsa.conf, asoundrc, asound.conf)及其自动加载 And HDMI Adiuo

struts2中如何自动加载xml文件(不用修改配置文件)(转)

主题:struts2中如何自动加载xml文件(不用修改配置文件) 转自:http://www.iteye.com/topic/338419   config Xml代码   ...
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

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