Flinkx 调研笔记

449 阅读1分钟

安装

参考入门文档

blog.csdn.net/u011596455/…

下载安装

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信息的生成和发送