Flink CDC實戰
1,關於Flink cdc的使用說明
1)匯入依賴
<dependency>
<groupId>com.alibaba.ververica</groupId>
<artifactId>flink-connector-mysql-cdc</artifactId>
<version>1.1.0</version>
</dependency>
sql案例 :
2)需要理解注意的地方
問題:使用cdc的時候會影響mysql的效能跟正常使用嗎?
不會,這個鎖應該很快就能釋放,沒什麼效能瓶頸,但是得保證你接binlog的使用者開了reload許可權
請百度 ‘’mysql的reload許可權‘
2,官網的案例程式碼
import org.apache.flink.streaming.api.datastream.DataStreamSource;
import org.apache.flink.streaming.api.environment.StreamExecutionEnvironment;
import org.apache.flink.streaming.api.functions.source.SourceFunction;
import com.alibaba.ververica.cdc.connectors.mysql.MySQLSource;
public class MySqlBinlogSourceExample {
public static void main(String[] args) {
StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment();
env.setParallelism(1);
SourceFunction<String> sourceFunction = MySQLSource.<String>builder()
.hostname("192.168.5.24")
.port(3306)
.databaseList("cdc") // monitor all tables under inventory database
.username("root")
.password("Sjb@123456")
.deserializer(new CdcDeserializationSchema()) // converts SourceRecord to String
.build();
DataStreamSource<String> stringDataStreamSource = env.addSource(sourceFunction);
stringDataStreamSource.print("===>");
try {
env.execute("測試mysql-cdc");
} catch (Exception e) {
e.printStackTrace();
}
}
}
3,紅色標註的地方我們自定義一個類,解析一下cdc的格式,然後拼接成自己需要的格式
import com.alibaba.ververica.cdc.debezium.DebeziumDeserializationSchema; import org.apache.flink.api.common.typeinfo.BasicTypeInfo; import org.apache.flink.api.common.typeinfo.TypeInformation; import org.apache.flink.util.Collector; import org.apache.kafka.connect.data.Field; import org.apache.kafka.connect.data.Schema; import org.apache.kafka.connect.data.Struct; import org.apache.kafka.connect.source.SourceRecord; import java.util.List; /** * @program: flink-neiwang-dev * @description: * @author: Mr.Wang * @create: 2020-10-21 16:04 **/ public class CdcDeserializationSchema implements DebeziumDeserializationSchema<String> { private static final long serialVersionUID = -3168848963265670603L; public CdcDeserializationSchema() { } @Override public void deserialize(SourceRecord record, Collector<String> out) throws Exception { Struct dataRecord = (Struct)record.value(); Struct afterStruct = dataRecord.getStruct("after"); List<Field> fieldsList = afterStruct.schema().fields(); //todo 欄位與值 for (Field field : fieldsList) { String fieldName = field.name(); Object fieldValue = afterStruct.get(fieldName); System.out.println("*****fieldName=" + fieldName+",fieldValue="+fieldValue); } System.out.println("value = " + dataRecord); Schema schema = record.keySchema(); //todo 拿到topic String topic = record.topic(); System.out.println("topic = " + topic); //todo 主鍵欄位 Struct pk = (Struct)record.key(); List<Field> pkFieldList = pk.schema().fields(); for (Field field : pkFieldList) { Object pkValue= pk.get(field.name()); System.out.println("&&&&pkKey=" + field.name()+",pkValue="+pkValue); } //todo 需要輸出的值,這裡自己定義格式吧 out.collect(record.toString()); } @Override public TypeInformation<String> getProducedType() { return BasicTypeInfo.STRING_TYPE_INFO; } }
參考:
https://github.com/ververica/flink-cdc-connectors/wiki/MySQL-CDC-Connector
https://mp.weixin.qq.com/s/Mfn-fFegb5wzI8BIHhNGvQ
相關文章
- Flink CDC 系列 - Flink MongoDB CDC 在 XTransfer 的生產實踐MongoDB
- Flink MongoDB CDC 在 XTransfer 的生產實踐|Flink CDC 專題MongoDB
- FLINK CDC同步
- [Flink/CDC/資料整合] 資料增量整合方案:Flink CDC
- flink-cdc實時同步(oracle to mysql)OracleMySql
- FLINK CDC部署同步
- Flink CDC 在京東的探索與實踐
- Flink CDC+Kafka 加速業務實時化Kafka
- Flink CDC 在大健雲倉的實踐
- 基於 Flink CDC 的實時同步系統
- Flink CDC 在易車的應用實踐
- Flink的mysql CDC,好使不?MySql
- Flink實戰
- Flink CDC MongoDB Connector 的實現原理和使用實踐MongoDB
- flink-cdc3.0官方網站網站
- 基於 Flink CDC 的現代資料棧實踐
- CDC實戰:MySQL實時同步資料到Elasticsearch之陣列集合(array)如何處理【CDC實戰系列十二】MySqlElasticsearch陣列
- Flink CDC 系列 - 實現 MySQL 資料實時寫入 Apache DorisMySqlApache
- Flink CDC + Hudi 海量資料入湖在順豐的實踐
- flink實戰--讀寫Hive(Flink on Hive)Hive
- 基於 Flink CDC 打造企業級實時資料整合方案
- Flink SQL Client綜合實戰SQLclient
- Apache Flink CDC 批流融合技術原理分析Apache
- Flink-Kafka-Connector Flink結合Kafka實戰Kafka
- Flink CDC 系列 - 同步 MySQL 分庫分表,構建 Iceberg 實時資料湖MySql
- Flink生成Parquet格式檔案實戰
- Flink的sink實戰之二:kafkaKafka
- Flink Native Kubernetes實戰
- Flink的sink實戰之一:初探
- 《Flink入門與實戰》簡介
- Flink實戰:消費Wikipedia實時訊息
- 如何實現對 Oracle 的實時資料捕獲和效能調優|Flink CDC 專題Oracle
- Flink 1.10 Container 環境實戰AI
- Flink實戰(七) - Time & Windows程式設計Windows程式設計
- Flink的sink實戰之四:自定義
- Flink實戰之寫Hive效能問題Hive
- Flink 在風控場景實時特徵落地實戰特徵
- Flink CDC 2.1 正式釋出,穩定性大幅提升,新增 Oracle,MongoDB 支援OracleMongoDB