Flink1.18 Sink - 到JDBC 使用新依赖【因返回值是sinkFunction, 故目前只支持addSink使用, 1.18版本不支持sinkTo】
1.Flink1.18环境代码编写2.Flink1.18传统批处理代码编写3.flink1.18传统流处理环境编写4.flink1.18流批一体DataStream代码编写5.Flink1.18 Source - FileSource6.Flink1.18 Source - fromElements7.Flink1.18 Source - KafkaSource8.Flink1.18 Source - 数据生成器9.Flink1.18 Transfrom - Map10.Flink1.18 Transfrom - flatMap11.Flink1.18 Transfrom - Filter12.Flink1.18 Transfrom - KeyBy13.Flink1.18 Transfrom - RichFunction14.Flink1.18 Transfrom - SimpleAggregate简单聚合算子15.Flink1.18 Transfrom - Reduce16.Flink1.18 Transfrom - 分区器【7种现成】17.Flink1.18 Transfrom - CustomPartition自定义分区器18.Flink1.18 Transfrom - 分流【Filter】19.Flink1.18 Transfrom - 分流【侧输出流 ProcessFunction】20.Flink1.18 Transfrom - 合流【Union】21.Flink1.18 Transfrom - 合流【Connect, 并行度为1的情况】22.Flink1.18 Transfrom - 合流【Connect 两个流数据进行关联】23.Flink1.18 Sink - 到文件 新版本写法sinkToFile24.Flink1.18 Sink - 到Kafka 新版本写法sinkTo的使用25.Flink1.18 Sink - 到Kafka自定义序列化类 新版本写法sinkTo的使用
26.Flink1.18 Sink - 到JDBC 使用新依赖【因返回值是sinkFunction, 故目前只支持addSink使用, 1.18版本不支持sinkTo】
27.Flink1.18 Sink - 精确一次ExactlyOnce到JDBC 使用新依赖【因返回值是sinkFunction, 故目前只支持addSink使用, 1.18版本不支持sinkTo】28.Flink1.18 Sink - 自定义sink29.大数据之路Week10_day07 (JavaAPI 操作Redis 与Hbase建立索引,通过查询redis中的索引查询Hbase数据)30.大数据之路Week10_day07 (JavaAPI 操作Redis 模拟将redis当作缓存,从Mysql数据库中查询数据)自行修改对应数据库参数和配置
package com.xiaohu.sink;
import org.apache.flink.api.common.functions.MapFunction;
import org.apache.flink.connector.jdbc.JdbcConnectionOptions;
import org.apache.flink.connector.jdbc.JdbcExecutionOptions;
import org.apache.flink.connector.jdbc.JdbcSink;
import org.apache.flink.connector.jdbc.JdbcStatementBuilder;
import org.apache.flink.streaming.api.datastream.DataStream;
import org.apache.flink.streaming.api.datastream.DataStreamSource;
import org.apache.flink.streaming.api.environment.StreamExecutionEnvironment;
import java.sql.PreparedStatement;
import java.sql.SQLException;
/*
导入依赖:
flink-connector-jdbc
mysql-connector-java
目前只能用addSink做法
*/
public class JDBCSinkDemo {
public static void main(String[] args) throws Exception {
final StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment();
env.setParallelism(1);
// 假设这是我们的数据源
// DataStream<String> text = env.fromElements(
// "Hello, World!",
// "Flink is awesome!",
// "This is a test."
// );
DataStreamSource<String> text = env.socketTextStream("master", 7777);
// 转换数据以匹配目标表的列
DataStream<String[]> mappedData = text.map(new MapFunction<String, String[]>() {
@Override
public String[] map(String value) {
return new String[]{null, value}; // null 表示自增ID
}
});
/*
"jdbc:mysql://master:3306/xiaohu_db?useUnicode=true&characterEncoding=utf-8&useSSL=false",
"com.mysql.cj.jdbc.Driver",
"root",
"123456",
500
*/
mappedData.addSink(JdbcSink.sink(
"INSERT INTO sink_jdbc (info) VALUES (?)",
new JdbcStatementBuilder<String[]>() {
@Override
public void accept(PreparedStatement preparedStatement, String[] strings) throws SQLException {
preparedStatement.setString(1, strings[1]);
}
},
JdbcExecutionOptions.builder() // 处理设置
.withBatchSize(1000) // 一批次1000条
.withBatchIntervalMs(200) // 200毫秒或上面的1000条,就写出去
.withMaxRetries(5) // 重试5次
.build(),
new JdbcConnectionOptions.JdbcConnectionOptionsBuilder() // 连接选项,new一个内部类
.withUrl("jdbc:mysql://master:3306/xiaohu_db?useUnicode=true&characterEncoding=utf-8&useSSL=false")
.withDriverName("com.mysql.cj.jdbc.Driver")
.withUsername("root")
.withPassword("123456")
.withConnectionCheckTimeoutSeconds(60) //超时60秒重新连接
.build()
));
// 执行任务
env.execute("Write to MySQL Example");
}
}
分类:
Flink
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY