flink往mysql写入数据

本文介绍了如何使用 Flink 自定义 Sink 将数据高效地写入 MySQL 数据库,通过示例代码展示了具体实现过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

直接上代码

自定义sink

package com.lp.java.demo.common;

import org.apache.flink.configuration.Configuration;
import org.apache.flink.streaming.api.functions.sink.RichSinkFunction;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;

/**
 * <p/>
 * <li>title: DataStream Sink</li>
 * <li>@author: li.pan</li>
 * <li>Date: 2019/12/29 5:00 下午</li>
 * <li>Version: V1.0</li>
 * <li>Description: Sink写出到Mysql</li>
 */
public class SinkToMysql extends RichSinkFunction<Student>{
    Connection connection;
    PreparedStatement ps;


    private Connection getConnection() {
        Connection conn = null;
        try {
            Class.forName("com.mysql.jdbc.Driver");

            String url = "jdbc:mysql://localhost:3306/flink_demo";
            conn = DriverManager.getConnection(url,"root","1234&#
Flink 中将数据写入MySQL 中,可以通过以下步骤实现: 1. 引入 MySQL 驱动依赖 在 pom.xml 文件中加入以下依赖: ```xml <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>8.0.26</version> </dependency> ``` 2. 实现自定义的 SinkFunction 可以通过实现 SinkFunction 接口来自定义数据写入的逻辑。以下是一个简单的实现示例: ```java import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.util.List; import org.apache.flink.streaming.api.functions.sink.SinkFunction; public class MySQLSink implements SinkFunction<List<String>> { private final String url; private final String username; private final String password; private final String sql; public MySQLSink(String url, String username, String password, String sql) { this.url = url; this.username = username; this.password = password; this.sql = sql; } @Override public void invoke(List<String> values) throws Exception { Connection conn = DriverManager.getConnection(url, username, password); PreparedStatement ps = conn.prepareStatement(sql); for (String value : values) { ps.setString(1, value); ps.addBatch(); } ps.executeBatch(); ps.close(); conn.close(); } } ``` 上述代码中的 `invoke()` 方法被 Flink 调用,将数据写入MySQL 中。`url`、`username`、`password` 和 `sql` 分别是连接 MySQL 数据库的 URL、用户名、密码和执行的 SQL 语句。 3. 将数据写入到自定义 SinkFunction 中 在 Flink 的 DataStream 中,可以使用 `addSink()` 方法将数据写入到自定义的 SinkFunction 中。以下是一个示例: ```java DataStream<String> stream = ...; stream.addSink(new MySQLSink("jdbc:mysql://localhost:3306/test", "root", "123456", "INSERT INTO table_name (column_name) VALUES (?)")); ``` 上述代码中的 `stream` 是一个数据流,通过 `addSink()` 方法将数据写入MySQL 中。`MySQLSink` 是自定义的 SinkFunction,用于将数据写入MySQL 数据库中。在 `MySQLSink` 的构造函数中,需要传入连接 MySQL 数据库的 URL、用户名、密码和执行的 SQL 语句。`values` 参数是一个 `List`,包含了要写入MySQL 中的数据。在 `invoke()` 方法中,首先连接 MySQL 数据库,然后通过 `PreparedStatement` 执行 SQL 语句,将数据写入MySQL 中。 注意:在实际使用中,为了提高性能,可以使用连接池管理连接,避免频繁创建和关闭连接。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值