flink提供很多訪問其他數據源的連接器,訪問其他第三方數據源變得簡單高效。下面就是flink提供的一些連接器,使用時只需引入需要的包。
在使用flink處理數據後,我們經常會將結果寫入數據庫,供其它業務使用。
private static String driverClass = "com.mysql.jdbc.Driver";
private static String dbUrl = "jdbc:mysql://192.168.1.100:3306/test";
private static String userNmae = "root";
private static String passWord = "123456";
public static void main(String[] args) throws Exception {
StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment();
DataStreamSource<Person> input = env.fromCollection(Arrays.asList(new Person("123", 25), new Person("456", 24)));
DataStream<Row> ds = input.map(new RichMapFunction<Person, Row>() {
@Override
public Row map(Person person) throws Exception {
return Row.of(person.getAge(),person.getName());
}
});
TypeInformation<?>[] fieldTypes = new TypeInformation<?>[] {
BasicTypeInfo.INT_TYPE_INFO,
BasicTypeInfo.STRING_TYPE_INFO
};
RowTypeInfo rowTypeInfo = new RowTypeInfo(fieldTypes);
//寫入mysql
JDBCAppendTableSink sink = JDBCAppendTableSink.builder()
.setDrivername(driverClass)
.setDBUrl(dbUrl)
.setUsername(userNmae)
.setPassword(passWord)
.setParameterTypes(fieldTypes)
// .setQuery("insert into student values(?,?)")
.setQuery("update student set age = ? where name = ?")
.build();
sink.emitDataStream(ds);
//查詢mysql
JDBCInputFormat jdbcInputFormat = JDBCInputFormat.buildJDBCInputFormat()
.setDrivername(driverClass)
.setDBUrl(dbUrl)
.setUsername(userNmae)
.setPassword(passWord)
.setQuery("select * from student")
.setRowTypeInfo(rowTypeInfo)
.finish();
DataStreamSource<Row> input1 = env.createInput(jdbcInputFormat);
input1.print();
env.execute();
}
注意傳入參數Row 字段順序 , fieldTypes 類型,一定要與sql語句的參數類型順序保持一致。