阿里云flink部署
多个配置文件:

配置文件工具:
package com.b2b.flink.config; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import java.io.IOException; import java.io.InputStream; import java.util.Properties; /** * 作业配置加载器 * * 根据运行环境加载对应的 properties 配置文件: * - kafka-aws-test-dev.properties (开发环境) * - kafka-aws-test-test.properties (测试环境) * - kafka-aws-test-prod.properties (生产环境) * * 通过启动参数指定环境: args[0] = "dev" | "test" | "prod" * 默认使用 dev 环境。 * * 参考 dataact-access 项目的配置管理规范。 */ public class JobConfig { private static final Logger LOG = LoggerFactory.getLogger(JobConfig.class); private static final String CONFIG_PREFIX = "kafka-aws-test"; private static final String DEFAULT_ENV = "dev"; private final Properties properties; private final String env; public JobConfig(String[] args) { this.env = (args != null && args.length > 0) ? args[0] : DEFAULT_ENV; this.properties = loadProperties(env); LOG.info("加载环境配置: env={}, 配置文件={}-{}.properties", env, CONFIG_PREFIX, env); } /** * 加载指定环境的配置文件 */ private Properties loadProperties(String env) { String fileName = CONFIG_PREFIX + "-" + env + ".properties"; Properties props = new Properties(); try (InputStream is = getClass().getClassLoader().getResourceAsStream(fileName)) { if (is != null) { props.load(is); LOG.info("成功加载配置文件: {}", fileName); } else { LOG.warn("配置文件不存在: {}, 将使用空配置", fileName); } } catch (IOException e) { LOG.error("加载配置文件失败: {}", fileName, e); throw new RuntimeException("加载配置文件失败: " + fileName, e); } return props; } public String getEnv() { return env; } public Properties getProperties() { return properties; } public String getString(String key) { return properties.getProperty(key); } public String getString(String key, String defaultValue) { return properties.getProperty(key, defaultValue); } public long getLong(String key, long defaultValue) { String value = properties.getProperty(key); if (value == null || value.trim().isEmpty()) { return defaultValue; } return Long.parseLong(value.trim()); } public int getInt(String key, int defaultValue) { String value = properties.getProperty(key); if (value == null || value.trim().isEmpty()) { return defaultValue; } return Integer.parseInt(value.trim()); } }
主类使用:
package com.b2b.flink; import com.b2b.flink.config.JobConfig; import com.b2b.flink.source.KafkaSourceFactory; import org.apache.flink.api.common.eventtime.WatermarkStrategy; import org.apache.flink.connector.kafka.source.KafkaSource; import org.apache.flink.streaming.api.datastream.DataStream; import org.apache.flink.streaming.api.environment.StreamExecutionEnvironment; import org.slf4j.Logger; import org.slf4j.LoggerFactory; /** * POC 测试作业: 阿里云 Flink 消费 AWS MSK Kafka * * <p>Source: AWS Kafka (SASL_SSL / SCRAM-SHA-512) * <p>Sink: Print (输出到 TaskManager 日志,调试用) * * <p>使用方式: * <pre> * // 本地运行 (默认 dev 环境) * java -jar flink-kafka-aws-test-1.0.0-SNAPSHOT-fat.jar * * // 指定环境 * java -jar flink-kafka-aws-test-1.0.0-SNAPSHOT-fat.jar test * * // 阿里云 Flink 提交时,在启动参数中填写: test 或 prod * </pre> * * <p>构建: mvn clean package * <p>提交: 将 target/flink-kafka-aws-test-1.0.0-SNAPSHOT-fat.jar 上传到阿里云 Flink 平台 */ public class KafkaAwsTestJob { private static final Logger LOG = LoggerFactory.getLogger(KafkaAwsTestJob.class); public static void main(String[] args) throws Exception { // ---------- 1. 加载配置 ---------- JobConfig config = new JobConfig(args); LOG.info("===== 启动 Flink AWS Kafka 测试作业, 环境: {} =====", config.getEnv()); // ---------- 2. 创建执行环境 ---------- StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment(); // 开启 checkpoint (消费 Kafka 必须) long checkpointInterval = config.getLong("checkpoint.interval.ms", 60000L); env.enableCheckpointing(checkpointInterval); LOG.info("Checkpoint 间隔: {} ms", checkpointInterval); // ---------- 3. 创建 Kafka Source ---------- KafkaSource<String> kafkaSource = KafkaSourceFactory.create(config); // ---------- 4. 构建数据流 ---------- DataStream<String> stream = env.fromSource( kafkaSource, WatermarkStrategy.noWatermarks(), "AWS-Kafka-Source" ); // Print sink: 输出到 TaskManager 日志 stream.print("AWS-Kafka"); // ---------- 5. 执行作业 ---------- String jobName = config.getString("job.name", "Flink AWS Kafka Test Job"); env.execute(jobName); } }
部署:


浙公网安备 33010602011771号