public abstract class BaseAppV2 {
public abstract void run(StreamExecutionEnvironment env,
Map<String, DataStream<String>> sourceStreams,
String isLocalOrTest
);
public void init(int parallelism, String ck, String groupId, String isLocalOrTest, String... topics) throws IOException {
System.getProperties().setProperty(CommonConstant.HADOOP_USER_NAME,CommonConstant.HDFS_USER);
StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment();
env.setParallelism(parallelism);
// 1.开启ck以及间隔时间
env.enableCheckpointing(5*60*1000, CheckpointingMode.AT_LEAST_ONCE);
// 2.配置checkpoint重启
env.setRestartStrategy(RestartStrategies.fixedDelayRestart(3, Time.seconds(3)));
// 3.配置checkpoint配置
CheckpointConfig checkpointConfig = env.getCheckpointConfig();
// 4.超时时间10分钟
checkpointConfig.setCheckpointTimeout(1000*60*10);
// 5.最小间隔4分钟
checkpointConfig.setMinPauseBetweenCheckpoints(1000*60*4);
// 6.同一时间只允许一个检查点
checkpointConfig.setMaxConcurrentCheckpoints(1);
// 7.保存checkpoint
checkpointConfig.enableExternalizedCheckpoints(CheckpointConfig.ExternalizedCheckpointCleanup.RETAIN_ON_CANCELLATION);
// 8.配置保存ck的地址
if (CommonConstant.TEST.equalsIgnoreCase(isLocalOrTest)){
env.setStateBackend(new FsStateBackend(CommonConstant.CHECKPOINT_TEST_POSITION+ck));
}else if (CommonConstant.PRODUCE.equalsIgnoreCase(isLocalOrTest)){
env.setStateBackend(new FsStateBackend(CommonConstant.CHECKPOINT_PROD_POSITION+ck));
}
//判断环境并将数据写入多个topic
final Map<String, DataStream<String>> sourceStreams = new HashMap<>();
if (CommonConstant.LOCAL.equalsIgnoreCase(isLocalOrTest)){
for (String topic : topics) {
final DataStreamSource<String> stream = env.addSource(new MyLocalKafkaSource(groupId, topic));
sourceStreams.put(topic,stream);
}
}else if (CommonConstant.TEST.equalsIgnoreCase(isLocalOrTest) || CommonConstant.PRODUCE.equalsIgnoreCase(isLocalOrTest)){
for (String topic : topics) {
final DataStreamSource<String> stream = env.addSource(MyKafkaUtil.getFlinkKafkaSource(groupId, topic,isLocalOrTest));
sourceStreams.put(topic,stream);
}
}else {
System.out.println("请输出正确的环境!");
}
//插入代码
run(env,sourceStreams,isLocalOrTest);
try {
env.execute();
} catch (Exception e) {
e.printStackTrace();
}
}
}
BaseAppV2
最新推荐文章于 2025-07-04 15:03:43 发布