很久没更新博客了,最近两周先后准备了两个比赛,还好,结果都不错,继续加油。回归正常的Flink学习之路。
在Flink使用中经常需要自定义DataSource,以满足实际业务需求。Flink Source原生支持包括Kafka、RabbitMQ等一些常用的消息队列组件或者类似ES这样基于文本索引的高性能非关系型数据库,而对于写入关系型数据库或Flink不支持的组件中,需要借助RichSourceFunction去实现,但这部分性能是比原生的差些,虽然Flink不建议这么做,但在大数据处理过程中,由于业务或技术架构的复杂性,有些特定的场景还是需要这样做,本篇文章从实现一个自定义source—MysqlSource来认识RichSourceFunction,读取mysql中flinktest数据库中的数据。表很简单,就省略建表的过程,测试数据如下:
一、maven依赖
我们需要引入以下几个依赖:Flink基础包、flink-java包、flink-Streaming包、mysql-jdbc包,因为我们本次使用的程序语言是java,因此不需要导入scala相关的包进来。
<dependencies>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.46</version>
</dependency>
<dependency>
<groupId>org.apache.flink</groupId>
<artifactId>flink-java</artifactId>
<version>1.7.2</version>
<!--编译时使用,运行时并不使用,所以本地测试需要注释掉-->
<!--<scope>provided</scope>-->
</dependency>
<dependency>
<groupId>org.apache.flink</groupId>
<artifactId>flink-streaming-java_2.11</artifactId>
<version>1.7.2</version>
<!--<scope>provided</scope>-->
</dependency>
</dependencies>
二、Student实体类
用javabean的形式来保存数据库中的字段,这样的做的好处是: 继承时直接写RichSourceFunction<Student>即可,不定义实体类,我们需要用Tuple来代替&#