背景:
在自定义metric report时,实现了MetricReporter,可以在其open方法中做一些初始化操作。
@Override
public void open(MetricConfig config) {
//todo do something
}
其中config包含了flink-conf.yaml配置文件中的所有参数,可以通过config方法获取
比如:
metricConfig.getString(CHANNEL, null)
但是为了不影响jar,更灵活传参,很多参数都是通过cmd提交命令中动态传递,而不是都配置在flink-conf.yaml中。
比如:
./bin/flink run -d -m yarn-cluster -yD metrics.reporter = myreport --parallelism 10 --yarnslots 1 --class com.my.test mytestjar-1.0-SNAPSHOT.jar
比如其中 : -yD metrics.reporter = myreport 中metrics.reporter的值是变化的,每个任务都不一样,所以没法在flink-conf.yaml中写死,但是没有在配置文件中配置,open方法中没法获取到。
这种情况经常出现flink平台提交任务中,一般针对这种配置参数相同但值变化的情况,既然没法写死,但是可以覆盖操作。
具体操作:
1.在flink-conf.yaml中配置 参数
#####
metrics.reporter: none(默认值)
#####
2.cmd提交命令中动态传参
-yD metrics.reporter = myreport
其中,cmd中的参数名称需要和flink-conf.yaml中配置的参数名一致,这样才会动态覆盖
3.取值
最后就可以在open方法中 ,通过config获取到配置的值