安装
参考入门文档
下载安装
cd flinkx-1.10_release/ mvn clean package -Dmaven.test.skip
FlinkX 代码主流程
local模式下
由com.dtstack.flinkx.launcher.Launcher调取 com.dtstack.flinkx.Main#main方法
- 进行env的初始化工作
- 通过DataReaderFactory初始化reader
- 调取reader的readData方法,参考1.1
- 通过DataWriterFactory初始化writer,参考1.2
- 调取writeData进行reader返回的dataStream的写入
- 最后调取env.execute进行flink任务的执行启动
1.1 flinkx canal binlog readData 读取
主reader
com.dtstack.flinkx.binlog.reader.BinlogReader 通过构造器BinlogInputFormatBuilder生成input format类:com.dtstack.flinkx.binlog.format.BinlogInputFormat
BinlogInputFormat类 canal模拟端
openInternal方法 执行连接读取binlog主流程在com.alibaba.otter.canal.parse.inbound.mysql.MysqlEventParser底层调用 com.alibaba.otter.canal.parse.inbound.AbstractEventParser#start进行erosa连接维护和dump操作 具体数据刷入缓存com.alibaba.otter.canal.parse.inbound.EventTransactionBuffer,更新lastPosition位置
将BinlogInputFormat传入Source Function
传入给com.dtstack.flinkx.streaming.api.functions.source.DtInputFormatSourceFunction 其为一个source function,继承了org.apache.flink.streaming.api.functions.source.RichParallelSourceFunction 实际调取source function里面的run()方法 获取split和nextRecord,实际调取的就是: com.dtstack.flinkx.binlog.format.BinlogInputFormat#nextRecordInternal 调取com.dtstack.flinkx.binlog.listener.BinlogEventSink#takeEvent方法获取数据 结果包装成org.apache.flink.types.Row返回
Flink StreamExecutionEnvironment的传入
将source function: DtInputFormatSourceFunction 传入StreamExecutionEnvironment#addSource(),返回DataStream
1.2 flinkx kafka writeData 写入
主writer
Kafka10Writer调取Kafka10OutputFormat的输出 实际调取KafkaProducer的send方法进行event信息的生成和发送