Java Flink保持配置状态
我有一个在Flink中维护配置的用例,我真的不知道如何处理 假设我在某个地方存储了一些配置,我需要它来进行处理。在Flink作业初始化时,我希望加载所有配置 这个配置也可以在Flink作业运行期间修改,所以我必须在内存中保存这个配置的状态,并在需要时更新它。可从KafkaSource访问配置更新 这就是我所拥有的: 我有一个函数,可以加载整个配置,保持其状态并将其与我的数据流关联:Java Flink保持配置状态,java,apache-flink,flink-streaming,Java,Apache Flink,Flink Streaming,我有一个在Flink中维护配置的用例,我真的不知道如何处理 假设我在某个地方存储了一些配置,我需要它来进行处理。在Flink作业初始化时,我希望加载所有配置 这个配置也可以在Flink作业运行期间修改,所以我必须在内存中保存这个配置的状态,并在需要时更新它。可从KafkaSource访问配置更新 这就是我所拥有的: 我有一个函数,可以加载整个配置,保持其状态并将其与我的数据流关联: public class MyConfiguration extends RichFlatMapFunction&
public class MyConfiguration extends RichFlatMapFunction<Row, Row>{
private transient MapState<String, MyConfObject> configuration;
@Override
public void open(MyConfiguration config) throws Exception{
MapStateDescriptor<String,MyConfObject> descriptor = new MapStateDescriptor<String,MyConfObject>(
"configuration",
BasicTypeInfo.STRING_TYPE_INFO,
...
);
configuration = getRuntimeContext().getMapState(descriptor);
configuration.putAll(...); // Load configuration from somewhere
}
@Override
public void flatMap(Row value, Collector<Row> out) throws Exception {
MyConfObject conf = configuration.get(...);
... // Associate conf with data
out.collect(value);
}
}
公共类MyConfiguration扩展了RichFlatMapFunction{
私有瞬态配置;
@凌驾
public void open(MyConfiguration config)引发异常{
MapStateDescriptor描述符=新的MapStateDescriptor(
“配置”,
BasicTypeInfo.STRING\u TYPE\u INFO,
...
);
配置=getRuntimeContext().getMapState(描述符);
configuration.putAll(…);//从某处加载配置
}
@凌驾
公共void flatMap(行值,收集器输出)引发异常{
myconobject conf=configuration.get(…);
…//将conf与数据关联
取出。收集(价值);
}
}
我的管道是这样的:
DataStream<Row> dataStream = ...; // My data stream
DataStream<Map<String, MyConfObject> streamConf =
env.addSource(new FlinkKafkaConsumer<Row>(..., ..., ...)) // The stream of configuration updates
.map(...);
return dataStream
.assignTimestampsAndWatermarks(...)
.flatMap(new MyConfiguration())
... //Do some processing
.map(m -> {
ObjectMapper objectMapper = new ObjectMapper();
String json = objectMapper.writeValueAsString(m);
return json.getBytes();
});
DataStream DataStream=…;//我的数据流
数据流{
ObjectMapper ObjectMapper=新的ObjectMapper();
字符串json=objectMapper.writeValueAsString(m);
返回json.getBytes();
});
我想要的是使用配置更新流
streamConf
来更新MyConfiguration
平面映射函数中的状态变量。我该怎么做呢?我建议您编写一个源代码,从Kafka读取配置信息,然后通过广播流向映射函数广播对配置的更改。映射函数将以持久状态存储完整的当前配置,而广播流意味着映射函数的所有实例都将获得所有配置更改 我不知道广播流。似乎就是我要找的。谢谢