一、keyBy的广播流使用
KeyedBroadcastProcessFunction
public class TwoStreamJoinWithBroadcastStream {
public static void main(String[] args) throws Exception {
StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment();
env.setParallelism(3);
FlinkKafkaConsumer010<String> dwdConsumer = new FlinkKafkaConsumer010<>("dwd", new SimpleStringSchema(), KafkaUtils.comsumerProps());
FlinkKafkaConsumer010<String> dimConsumer = new FlinkKafkaConsumer010<>("dim", new SimpleStringSchema(), KafkaUtils.comsumerProps());
DataStreamSource<String> dwdStream = env.addSource(dwdConsumer);
DataStreamSource<String> dimStream = env.addSource(dimConsumer);
// 声明一个MapStateDescriptor,维度表作为广播state
MapStateDescriptor<String, String> dimState = new MapStateDescriptor<>("dimState", BasicTypeInfo.STRING_TYPE_INFO, BasicTypeInfo.STRING_TYPE_INFO);
BroadcastStream<String> broadcastStream = dimStream.broadcast(dimState);
KeyedStream<String, String> vodKeyStream = dwdStream.keyBy(new KeySelector<String, String>() {
@Override
public String getKey(String line) throws Exception {
JSONObject jn = JSON.parseObject(line);
return jn.get("vodid").toString();
}
});
SingleOutputStreamOperator<Stri