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...
  • ITer_ZC
  • ITer_ZC
  • 2015年06月08日 17:08
  • 2123

Flume学习7_Flume配置文件内容详解

对 (CentOS6.5下,Flume安装及配置详细教程) (链接:http://blog.csdn.net/wang_zhenwei/article/details/48438105) 中的配...

Spark(二) -- Spark简单介绍

spark是什么? spark开源的类Hadoop MapReduce的通用的并行计算框架 spark基于map reduce算法实现的分布式计算 拥有Hadoop MapReduce所具有的优...

使用IntelliJ IDEA开发Spark1.0.0应用程序

之所以写本篇是因为后面很多博客需要例程来解析或说明。本篇是Spark1.0.0 开发环境快速搭建中关于客户端IDE部分的内容,将具体描述:...

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

8 Replicating Channel Selector flume从一个agent1将event发送到多个通道,称为数据的复制 关键配置:agent1.sources.r1.se...
  • wyl6019
  • wyl6019
  • 2016年11月22日 19:51
  • 166

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

4 Syslogtcp案例 [root@localhost apache-flume-1.7.0-bin]# vi conf/tcp.conf agent1.sources = r1 ...
  • wyl6019
  • wyl6019
  • 2016年11月22日 11:09
  • 289

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 -------------------------...

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

在进行项目的开发过程中,如果我们修改了WEB-INF下的某个配置文件,我们总希望tomcat能够自动的监听到这些变化,从而自动的加载这些变化的配置文件,那么我们该如何操作呢?这个时候我们就需要单独的为...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Flume-ng禁用自动加载配置文件功能
举报原因:
原因补充:

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