Flume Node源码分析
类Application.java(org.apache.flume.node.Application)为Flume Node的主入口,从这个开始进行代码分析。本分分析的代码在Flume源码包中flume-ng-node、flume-ng-core两个模块中。
读取配置文件
配置文件的读取是通过调用AbstractConfigurationProvider类的getConfiguration()方法。AbstractConfigurationProvider的子类通过实现getFlumeConfiguration()方法可以从不同的地方获取配置,参数”z”/“zkConnString”是来指定zookeeper地址。没有配置zookeeper地址的话就直接读取”f”/“conf-file”指定的配置文件。
1 | public MaterializedConfiguration getConfiguration() { |
启动是有个参数”no-reload-conf”,是指定是否需要在修改配置文件后,重启Flume Node。对于文件方式的配置方式,指定需要在修改配置文件后重启Flume,就是启动了一个监控文件的线程,执行了如下操作,对配置文件的修改时间进行监控。
1 | public class FileWatcherRunnable implements Runnable { |
启动组件
加载配置后,会调用start()或者startAllComponents()方法启动所有的组件。在这两个方法中可以看到,组件是通过调用LifecycleSupervisor对象的supervise()方法进行启动的。在supervise()方法中,是执行了MonitorRunnable对象,代码如下:
1 | public static class MonitorRunnable implements Runnable { |