以下所有都是基于Flink 1.12.0版本
Flink JDBCSink的使用
flink提供了JDBCSink方便我们写入数据库,以下是使用案例:
pom依赖
需要引入flink-connector-jdbc的依赖。另外,我这里是写入mysql,所以还引入了mysql的驱动包
<dependency>
<groupId>org.apache.flink</groupId>
<artifactId>flink-connector-jdbc_2.12</artifactId>
<version>1.12.0</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.45</version>
</dependency>
案例代码
package com.upupfeng.sink;
import org.apache.flink.api.common.typeinfo.Types;
import org.apache.flink.api.java.tuple.Tuple4;
import org.apache.flink.api.java.utils.ParameterTool;
import org.apache.flink.connector.jdbc.JdbcConnectionOptions;
import org.apache.flink.connector.jdbc.JdbcSink;
import org.apache.flink.streaming.api.environment.LocalStreamEnvironment;
import org.apache.flink.streaming.api.environment.StreamExecutionEnvironment;
/**
* https://ci.apache.org/projects/flink/flink-docs-release-1.12/dev/connectors/jdbc.html
*
* @author mawf
*/
public class JDBCSinkDemo {
public static void main(String[] args) throws Exception {
LocalStreamEnvironment env = StreamExecutionEnvironment.createLocalEnvironment();
// 从配置文件中读取配置信息
ParameterTool parameterTool = ParameterTool.fromPropertiesFile("D:\\upupfeng\\my_code\\flink-learning\\resources\\application.properties");
String url = parameterTool.get("url");
String driver = parameterTool.get("driver");
String user = parameterTool.get("user");
String password = parameterTool.get("password");
// sql语句,用问号做占位符
String sql = "insert into tb_traffic_statistic_min(starttime, city_name, distinct_user_count, total_traffic) values(?, ?, ?, ?)";
// 伪造数据
Tuple4<String, String, Integer, Double> bjTp = Tuple4.of("2020-12-01 00:00:00", "北京", 10, 2.3d);
env
.fromElements(bjTp)
.returns(Types.TUPLE(Types.STRING, Types.STRING, Types.INT, Types.DOUBLE))
// 添加JDBCSink
.addSink(
JdbcSink.sink(
sql, // sql语句
// 设置占位符对应的字段值
(ps, tp) -> {
ps.setString(1, tp.f0);
ps.setString(2, tp.f1);
ps.setInt(3, tp.f2);
ps.setDouble(4, tp.f3);
},
// 传递jdbc的连接属性
new JdbcConnectionOptions.JdbcConnectionOptionsBuilder()
.withDriverName(driver)
.withUrl(url)
.withUsername(user)
.withPassword(password)
.build()
)
);
// 执行
env.exec