准备工作
Flink自身并没有提供连接MySQL的连接器,需要手动引入:
<!-- mysql connector -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.44</version>
</dependency>
代码实现
核心代码在于:
streaming.addSink(new MyJdbcSink).setParallelism(1)
这里你需要1个参数:
MyJdbcSink
:自定义的JdbcSink。需要注意的是,实现该方法时要继承RichSinkFunction
函数,可利用open()
函数初始化JDBC连接、SQL预编译器等运行时环境,也可以利用close()
函数做清理工作。若选择继承SinkFunction
,会在每次写入一条数据时都会创建一个JDBC连接。源码注解中给出的解释:
Writes the given value to the sink. This function is called for every record.
完整代码如下:
package org.ourhome.streamapi
import java.sql.{
Connection, DriverManager, PreparedStatement}
import org.apache.flink.streaming.api.scala._
import org.apache.flink.api.java.utils.ParameterTool
import org.apache.flink.configuration.Configuration
import org.apache.flink.runtime.state.filesystem.FsStateBackend
import org.apache.flink.streaming.api.CheckpointingMode
import org.apache