Java版本Flink写Clickhouse
<dependency>
<groupId>org.apache.flink</groupId>
<artifactId>flink-connector-jdbc_${scala.binary.version}</artifactId>
<version>${flink.version}</version>
</dependency>
<dependency>
<groupId>com.clickhouse</groupId>
<artifactId>clickhouse-jdbc</artifactId>
<version>0.4.0</version>
</dependency>
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.DataStreamSource;
import org.apache.flink.streaming.api.environment.StreamExecutionEnvironment;
import org.apache.flink.streaming.api.functions.sink.SinkFunction;
public class FLinkClickHouseSinkApp {
public static void main(String[] args) throws Exception {
StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment();
env.setParallelism(1);
DataStreamSource<String> stream = env.socketTextStream("192.168.49.194", 9999);
stream.map(new MapFunction<String, User>() {
@Override
public User map(String value) throws Exception {
String[] split = value.split(",");
return new User(Integer.parseInt(split[0]), Integer.parseInt(split[1]), split[2]);
}
}).addSink(getJdbcSink("insert into test_user values(?,?,?)"));
env.execute();
}
private static SinkFunction<User> getJdbcSink(String sql) {
JdbcStatementBuilder<User> statementBuilder = (statement, user) -> {
statement.setInt(1, user.id);
statement.setInt(2, user.age);
statement.setString(3, user.userName);
};
JdbcExecutionOptions options = JdbcExecutionOptions.builder()
.withBatchSize(1500)
.withBatchIntervalMs(250)
.withMaxRetries(5)
.build();
JdbcConnectionOptions connectionOptions = new JdbcConnectionOptions.JdbcConnectionOptionsBuilder()
.withUrl("jdbc:ch:http://192.168.49.194:8123/db_test")
.withDriverName("com.clickhouse.jdbc.ClickHouseDriver")
.build();
return JdbcSink.sink(sql, statementBuilder, options, connectionOptions);
}
public static class User {
public int id;
public int age;
public String userName;
public User() {
}
public User(int id, int age, String userName) {
this.id = id;
this.age = age;
this.userName = userName;
}
}
}