flink定時讀取mysql
生產上有時候需要定期新增或修改某些篩選值.為了避免頻繁重啟任務,修改程式碼,可以將這些配置資訊放在mysql表中定期更新,然後通過傳送廣播流給下游.這樣可以減少更改頻率,降低重啟風險.
public class MysqlSource extends RichSourceFunction<Map<String, ValueConf>> { // 定時器間隔時間(ms) private static final CountDownLatch countDownLatch = new CountDownLatch(1); private final String sql; private QueryRunner qr; public SignalSource(String sql) { this.sql = sql; } @Override public void open(Configuration parameters) throws Exception { // 此處需要提前將mysql配置資訊儲存全域性變數中 env.getConfig().setGlobalJobParameters(params); ParameterTool params = (ParameterTool) getRuntimeContext().getExecutionConfig().getGlobalJobParameters(); String jdbcUrl = params.getRequired("mysql.jdbc.url"); String userName = params.getRequired("mysql.username"); String password = params.getRequired("mysql.password"); qr = new QueryRunner(JDBCUtils.getDataSource(jdbcUrl, userName, password)); } @Override public void run(SourceContext<Map<String, ValueConf>> ctx) throws Exception { while (true) { Map<String, ValueConf> rs = qr.query(sql, new BeanListHandler<>(ValueConf.class)).stream().collect(Collectors.toMap(ValueConf::getCode, i -> i)); ctx.collect(rs); // 每隔12小時執行一次 countDownLatch.await(12, TimeUnit.HOURS); } } @Override public void cancel() { }}
將mysql資料來源並行度設定為1,只需要一個tm讀取mysql,減少了mysql連線數
MapStateDescriptor<String, ValueConf> descriptor=new MapStateDescriptor<>("mysql-descriptor",String.class,ValueConf.class);BroadcastStream<Map<String, ValueConf>> mysqlSource=env.addSource(new MysqlSource("querySql")).uid("MysqlSource").name("MysqlSource").setParallelism(1).broadcast(descriptor);
依賴
除了flink相關jar包,還需要mysql的,以下是我用的
<properties> <commons.dbutils.version>1.6</commons.dbutils.version> <mysql.connector.version>8.0.16</mysql.connector.version> <hikaricp.version>4.0.3</hikaricp.version> </properties> <!--MySQL-java連線驅動--> <dependency> <groupId>http/:w <artifactId>mysql-connector-java</artifactId> <version>${mysql.connector.version}</version> </dependency> <dependency> <groupId>commons-dbutils</groupId> <artifactId>commons-dbutils</artifactId> <version>${commons.dbutils.version}</version> </dependency> <dependency> <groupId>com.zaxxer</groupId> <artifactId>HikariCP</artifactId> <version>${hikaricp.version}</version> <exclusions> <exclusion> <groupId>org.slf4j</groupId> <artifactId>slf4j-api</artifactId> </exclusion> </exclusions> </dependency>
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69989885/viewspace-2886858/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- flink sql client讀取hive時卡住SQLclientHive
- Flink 1.9 實戰:使用 SQL 讀取 Kafka 並寫入 MySQLKafkaMySql
- 《從0到1學習Flink》—— Flink 讀取 Kafka 資料批量寫入到 MySQLKafkaMySql
- flink讀取iceberg v2表
- Flink onTimer定時器定時器
- Flink 實踐教程 - 入門(4):讀取 MySQL 資料寫入到 ESMySql
- flink-cdc實時同步(oracle to mysql)OracleMySql
- 【GMT43智慧液晶模組】例程四:SYSTICK定時器——定時讀取觸控值定時器
- Spark讀取MySQL資料SparkMySql
- 時間序列資料的定義,讀取與指數平滑(Java)Java
- MySQL 定時備份MySql
- MySQL定時執行MySql
- mysql 定時任務MySql
- Mysql溯源-任意檔案讀取?MySql
- Jsp讀取MySQL資料JSMySql
- python讀取MySQL資料PythonMySql
- java讀取視訊時長Java
- flink實戰--讀寫Hive(Flink on Hive)Hive
- Swoft 配置的設定和讀取
- MySQL 定時增量備份MySql
- MYSQL定時備份(一)MySql
- 記mysql定時任務MySql
- MYSQL定時任務-定時清除備份資料MySql
- redis快取佇列+MySQL +php任務指令碼定時批量入庫Redis快取佇列MySqlPHP指令碼
- javascript 對cookie的讀取和設定JavaScriptCookie
- ES 實現實時從Mysql資料庫中讀取熱詞,停用詞MySql資料庫
- 實時計算Flink>產品定價>計量計費
- MySQL中的時區設定MySql
- mysql定時器event詳解MySql定時器
- Flink 實踐教程-入門(6):讀取 PG 資料寫入 ClickHouse
- java mysql儲存和讀取檔案JavaMySql
- Java實時讀取日誌檔案Java
- MySQL設定資料庫為只讀MySql資料庫
- 使用Data Ability讀取系統設定項
- ABL讀取XBL設定的標誌位
- Flink CDC 系列 - 實現 MySQL 資料實時寫入 Apache DorisMySqlApache
- mysql每天定時備份指令碼MySql指令碼
- mysql定時備份shell指令碼MySql指令碼