Flume-ng禁用自动加载配置文件功能
Posted 过往记忆大数据
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Flume-ng禁用自动加载配置文件功能相关的知识,希望对你有一定的参考价值。
默认情况下,中的PollingPropertiesFileConfigurationProvider
会每隔30秒去重新加载Flume agent的配置文件,如果监听到配置文件变化了,Flume会试图重新加载变化的配置文件。判断配置文件是否变化主要是基于文件的最后修改时间来的,代码片段如下:
01 |
///////////////////////////////////////////////////////////////////// |
05 |
bolg: http: //www.iteblog.com |
06 |
本文地址:http: //www.iteblog.com/archives/1467 |
07 |
过往记忆博客,专注于hadoop、hive、spark、shark、flume的技术博客,大量的干货 |
08 |
过往记忆博客微信公共帐号:iteblog_hadoop |
09 |
///////////////////////////////////////////////////////////////////// |
12 |
LOGGER.debug( "Checking file:{} for changes" , file);
|
14 |
counterGroup.incrementAndGet( "file.checks" ); |
16 |
long lastModified = file.lastModified(); |
1 |
if (lastModified > lastChange) { |
19 |
LOGGER.info( "Reloading configuration file:{}" , file); |
21 |
counterGroup.incrementAndGet( "file.loads" ); |
23 |
lastChange = lastModified;
|
26 |
eventBus.post(getConfiguration()); |
27 |
} catch (Exception e) { |
28 |
LOGGER.error( "Failed to load configuration data. Exception follows." , |
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); |
然而,通常情况下,用户修改了配置文件之后就不会再去修改,而且让Flume自动去加载配置文件有时还会出现问题。不过值得高兴的是,我们可以在启动Flume的时候通过加上--no-reload-conf
配置来禁止Flume自动加载配置文件。这个属性在Flume的官方文档并没有介绍;而且只有Apache的Flume存在这个参数,如果你使用的是Cloudera的Flume发行版,这个参数是不支持的,不过有人在https://issues.cloudera.org/browse/DISTRO-648
里面提到这个参数,如果你感兴趣可以去看下。
下面附上Apache的Flume发行版如何自动检测配置文件的变化的。
01 |
boolean reload = !commandLine.hasOption( "no-reload-conf" );
|
05 |
List<lifecycleaware> components = Lists.newArrayList();
|
06 |
Application application;
|
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); |
16 |
PropertiesFileConfigurationProvider configurationProvider = |
17 |
new PropertiesFileConfigurationProvider(agentName, |
19 |
application = new Application(); |
20 |
application.handleConfigurationEvent(configurationProvider.getConfiguration()); |
如果你使用的是Flume 1.6.0版本,那么上述的代码和它有点不一样,因为Flume 1.6.0还可以通过Zookeeper来配置文件,所以Flume还可以自动地检测Zookeeper里面的配置变化,并重新加载,不过这里就不贴出代码了,感兴趣的同学可以自己去看。
上面格式有点乱,感兴趣的同学可以点击下面阅读原文进行阅读
以上是关于Flume-ng禁用自动加载配置文件功能的主要内容,如果未能解决你的问题,请参考以下文章
在 Firebase 中禁用自动活动跟踪
如何禁用 webpack 开发服务器自动重新加载?
使用 BottomBar 和片段容器禁用 Android 片段重新加载
spring boot 导入xml配置文件所需注解和禁用自动配置类的注解
从零开始配置vim(27)——代码片段
从零开始配置vim(27)——代码片段