Flink学习笔记——配置
在Flink任务中,需要加载外置配置参数到任务中,在Flink的开发文档中介绍了,Flink提供了一个名为 ParameterTool 的工具来解决这个问题
Flink开发文档:
1 | https: //github .com /apache/flink/blob/master/docs/dev/application_parameters .zh.md |
其引入配置的方式有3种:
1. From .properties files
1 2 | String propertiesFilePath = "/home/sam/flink/myjob.properties" ; ParameterTool parameter = ParameterTool.fromPropertiesFile(propertiesFilePath); |
2. From the command line arguments
在args中添加
1 | --input hdfs: ///mydata --elements 42 |
在代码中使用
1 2 3 4 5 | public static void main(String[] args) { // parse input arguments final ParameterTool parameterTool = ParameterTool.fromArgs(args); } |
3. From system properties
使用
1 | -Dinput=hdfs: ///mydata |
或者
1 | ParameterTool parameter = ParameterTool.fromSystemProperties(); |
ParameterTool有如下几个方法可以获得参数
1 2 3 4 | parameter.getRequired( "input" ); parameter.get( "output" , "myDefaultValue" ); parameter.getLong( "expectedCount" , -1L); parameter.getNumberOfParameters(); |
注册全局变量
1 2 3 4 5 | // parse input arguments ParameterTool parameters = ParameterTool.fromSystemProperties(); // register the parameters globally ExecutionEnvironment env = ExecutionEnvironment.getExecutionEnvironment(); env .getConfig().setGlobalJobParameters(parameters); |
下面使用第1种方法来配置Flink消费Kafka的Topic
Ref:
1 | https: //github .com /apache/flink/blob/master/flink-end-to-end-tests/flink-streaming-kafka-test-base/src/main/java/org/apache/flink/streaming/kafka/test/base/KafkaExampleUtil .java |
对于带有前缀的配置读取,可以参考flume的前缀配置读取方法 getSubProperties(),使用其从整体的配置文件中读取 prefix 开头的配置,并去掉prefix
1 | https: //github .com /apache/flume/blob/trunk/flume-ng-configuration/src/main/java/org/apache/flume/Context .javab |
通用配置读取工具类 ParameterToolUtil
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 | import com.google.common.base.Preconditions; import com.google.common.collect.ImmutableMap; import com.google.common.collect.Maps; import java.util.Map; public class ParameterToolUtil { // 读取parameters中前缀为prefix的配置,并去掉前缀 public static Map<String, String> getSubProperties(Map<String, String> parameters, String prefix) { Preconditions.checkArgument(prefix.endsWith( "." ), "The given prefix does not end with a period (" + prefix + ")" ); Map<String, String> result = Maps.newHashMap(); synchronized (parameters) { for (Map.Entry<String, String> entry : parameters.entrySet()) { String key = entry.getKey(); if (key.startsWith(prefix)) { String name = key.substring(prefix.length()); result.put(name, entry.getValue()); } } } return ImmutableMap.copyOf(result); } } |
比如如下配置
1 2 3 4 | # kafka source kafka. source .bootstrap.servers=localhost:9092 kafka. source .topics=thrift_log_test kafka. source .group. id = test |
可以这样读取
1 2 3 | // 读取kafka相关的配置参数 Properties kafkaSourceProps = new Properties(); kafkaSourceProps.putAll(ParameterToolUtil.getSubProperties(parameters, KafkaSourceConstants.KAFKA_SOURCE_PREFIX)); |
其中 KafkaSourceConstants.KAFKA_SOURCE_PREFIX 常量为 kafka.source.
使用 getSubProperties() 方法读取的时候将会读取带有 prefix 前缀的配置,并自动去掉前缀
本文只发表于博客园和tonglin0325的博客,作者:tonglin0325,转载请注明原文链接:https://www.cnblogs.com/tonglin0325/p/14115069.html
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 字符编码:从基础到乱码解决
2018-12-10 Elasticsearch学习笔记——常用命令