package com.atguigu.flink; import com.ververica.cdc.connectors.mysql.source.MySqlSource; import com.ververica.cdc.connectors.mysql.table.StartupOptions; import com.ververica.cdc.debezium.JsonDebeziumDeserializationSchema; import org.apache.flink.api.common.eventtime.WatermarkStrategy; import org.apache.flink.api.common.restartstrategy.RestartStrategies; import org.apache.flink.api.common.time.Time; import org.apache.flink.runtime.state.hashmap.HashMapStateBackend; import org.apache.flink.streaming.api.CheckpointingMode; import org.apache.flink.streaming.api.environment.CheckpointConfig; import org.apache.flink.streaming.api.environment.StreamExecutionEnvironment; /** * @author sy * @date 2026/4/7 * @description TODO: Describe the class purpose */ public class FlinkCDC_01_DS { public static void main(String[] args) throws Exception { // TODO 1.获取执行环境 StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment(); env.setParallelism(1); // TODO 2. 开启检查点 Flink-CDC将读取binlog的位置信息以状态的方式保存在CK,如果想要做到断点续传, // 需要从Checkpoint或者Savepoint启动程序 // 2.1 开启Checkpoint,每隔5秒钟做一次CK ,并指定CK的一致性语义 env.enableCheckpointing(3000L, CheckpointingMode.EXACTLY_ONCE); // 2.2 设置超时时间为 1 分钟 env.getCheckpointConfig().setCheckpointTimeout(60 * 1000L); // 2.3 设置两次重启的最小时间间隔 env.getCheckpointConfig().setMinPauseBetweenCheckpoints(30000L); // 2.4 设置任务关闭的时候保留最后一次 CK 数据 env.getCheckpointConfig().enableExternalizedCheckpoints( CheckpointConfig.ExternalizedCheckpointCleanup.RETAIN_ON_CANCELLATION); // 2.5 指定从 CK 自动重启策略 env.setRestartStrategy(RestartStrategies.failureRateRestart( 3, Time.days(1L), Time.minutes(1L) )); // 2.6 设置状态后端 env.setStateBackend(new HashMapStateBackend()); env.getCheckpointConfig().setCheckpointStorage( "hdfs://mycluster/flinkCDC" ); // 2.7 设置访问HDFS的用户名 System.setProperty("HADOOP_USER_NAME", "atguigu"); //3.获取source MySqlSource<String> mySqlSource = MySqlSource.<String>builder() .hostname("hadoop102") .port(3306) .username("root") .password("000000") .databaseList("tms01") .tableList("tms01.user_info") .serverId("1103") .deserializer(new JsonDebeziumDeserializationSchema()) .startupOptions(StartupOptions.initial()) .build(); env .fromSource( mySqlSource, WatermarkStrategy.noWatermarks(), "MySqlSource") .print(); env.execute(); } }
shell 脚本
bin/flink run \ -Dexecution.runtime-mode=streaming \ -s hdfs://mycluster/flinkCDC/3ab9c67f3f232ac69f6e519695d1affa/chk-16 \ -c com.atguigu.flink.FlinkCDC_01_DS \ /opt/module/flink-1.17.0/myjars/flink-ods-1.0-SNAPSHOT-jar-with-dependencies.jar
浙公网安备 33010602011771号