阿里云flink部署

多个配置文件:

image

 配置文件工具:

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);
    }
}

部署:

image

 

posted @ 2026-09-18 11:24  ---江北  阅读(8)  评论(0)    收藏  举报
TOP