flume 源码阅读之启动类介绍
依赖的基础知识
- CLI: Apache 旗下的一款开源的命令行解析工具 CLI
- guava: google 旗下的著名的开源工具
启动步骤
启动参数例子 : bin/flume-ng agent –conf conf –conf-file conf/test.conf –name a1 -Dflume.root.logger=INFO,console
其中 –conf-flie 指定 配置文件路径 –name 指定Agent名字 -Dflume.root.logger 指定日志级别启动核心类:Package: flume-ng-node: Application.java
- 启动步骤:流程图如下
注释(1): 没有指定no-reload参数,那么系统默认会不断的扫描配置文件的更新状态,启动的过程采取的步骤是:
Commponents List中加上配置文件解析组件, 在EventBus 中注册监听器,在后面调用 Application的start方法时会 启动 commponents 这时候就只有 配置文件解析 这一个组件,启动配置文件组件时候会POST一个事件,这样 接受到这个事件后 就会去执行: handleConfigurationEvent 这个方法
注释(2): 直接就会去执行 handleConfigurationEvent 这个方法,调用Application 的start方法其实什么事也没做
涉及到的类
启动主要涉及到 配置文件的解析 将配置文件中配置的 source sink Channel解析为对应的组件,这部分内容在后面的文章中会慢慢分析解析过程
使用到的设计模式
这里面比较明显的一个设计模式就是: 监听者模式 这里是利用了 GUAVA的EventBus来实现,guava中关于EventBus的使用主要涉及到两个方面:
1. 注册监听器,这里主要用到的是 event.register()
2. 通知事件: event.post()
这里比一般的实现方式比较好的一点是: 处理方法只需要加上 @Subscribe 注解,就可以收到事件回调
其他的设计模式在后续分析的时候再做具体分析
注意事项
如果想配置文件不存在的情况下也能正常启动Flume,那么可以配置上这个参数:
SYSPROP_CALLED_FROM_SERVICE: disable fail-fast的行为,这个个参数赋任何值都可以
Flume的默认行为会去不断的检查配置文件有没有被更新过,检查的策略就是看配置文件的LastModifyTime有没有更新过,更新过就会重新加载配置文件. 当然你也可以关闭这一功能: 只要在启动参数中加上 –no-reload-conf 这样就不会去不断扫描配置文件的状态
说明
本篇只是简单的说明一下 Flume的启动,其中的一些细节会在后续的文章中慢慢介绍