flink 透過繼承RichSinkFunction實現自定義sink,將資料錄入資料庫
//主類 package flink.streaming import java.util.Properties import org.apache.flink.streaming.api.scala._ import org.apache.flink.streaming.connectors.kafka.FlinkKafkaConsumer import org.apache.flink.api.common.serialization.SimpleStringSchema import org.apache.flink.streaming.api.windowing.time.Time import org.apache.flink.streaming.api.TimeCharacteristic import org.apache.flink.streaming.api.functions.sink.RichSinkFunction import org.apache.flink.streaming.api.CheckpointingMode object StreamingTest { def main(args: Array[String]): Unit = { val kafkaProps = new Properties() //kafka的一些屬性 kafkaProps.setProperty("bootstrap.servers", "bigdata01:9092") //所在的消費組 kafkaProps.setProperty("group.id", "group2") //獲取當前的執行環境 val evn = StreamExecutionEnvironment.getExecutionEnvironment //evn.setStreamTimeCharacteristic(TimeCharacteristic.EventTime) //kafka的consumer,test1是要消費的topic val kafkaSource = new FlinkKafkaConsumer[String]("test1",new SimpleStringSchema,kafkaProps) //kafkaSource.assignTimestampsAndWatermarks(assigner) //設定從最新的offset開始消費 //kafkaSource.setStartFromGroupOffsets() kafkaSource.setStartFromLatest() //自動提交offset kafkaSource.setCommitOffsetsOnCheckpoints(true) //flink的checkpoint的時間間隔 //evn.enableCheckpointing(2000) //新增consumer val stream = evn.addSource(kafkaSource) evn.enableCheckpointing(2000, CheckpointingMode.EXACTLY_ONCE) //stream.setParallelism(3) val text = stream.flatMap{ _.toLowerCase().split(" ")filter { _.nonEmpty} } .map{(_,1)} .keyBy(0) .timeWindow(Time.seconds(5)) .sum(1) .map(x=>{(x._1,(new Integer(x._2)))}) //text.print() //啟動執行 text.addSink(new Ssinks()) evn.execute("kafkawd") } }
//自定義sink package flink.streaming import java.sql.Connection import java.sql.PreparedStatement import java.sql.DriverManager import org.apache.flink.streaming.api.functions.sink.RichSinkFunction import org.apache.flink.configuration.Configuration class Ssinks extends RichSinkFunction[(String,Integer)]{ var conn:Connection=_; var pres:PreparedStatement = _; var username = "root"; var password = "123456"; var dburl = "jdbc:mysql://192.168.6.132:3306/hgs?useUnicode=true&characterEncoding=utf-8&useSSL=false"; var sql = "insert into words(word,count) values(?,?)"; override def invoke(value:(String, Integer) ) { pres.setString(1, value._1); pres.setInt(2,value._2); pres.executeUpdate(); System.out.println("values :" +value._1+"--"+value._2); } override def open( parameters:Configuration) { Class.forName("com.mysql.jdbc.Driver"); conn = DriverManager.getConnection(dburl, username, password); pres = conn.prepareStatement(sql); super.close() } override def close() { pres.close(); conn.close(); } }
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/31506529/viewspace-2636334/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Flink的sink實戰之四:自定義
- flume自定義 ES SINk外掛,AVRO格式資料寫入ESVR
- Pytorch技法:繼承Subset類完成自定義資料拆分PyTorch繼承
- 將Flink計算完畢後的資料Sink到Nebula
- 厲害了!12秒將百萬資料透過EasyExcel匯入MySQL資料庫中ExcelMySql資料庫
- 透過資料結構實現簡易通訊錄資料結構
- 透過API介面實現資料探勘?API
- 透過等待看資料庫資料庫
- 透過 C# 將資料寫入到Excel表格C#Excel
- .net 透過特性及繼承IValidatableObject完成自定義表單驗證繼承Object
- 【資料庫資料恢復】透過資料頁恢復Sql Server資料庫資料的過程資料庫資料恢復SQLServer
- 測了一下 透過 DBCA 透過模板 複製資料庫(資料庫架構及資料)資料庫架構
- 透過 Canal 將 MySQL 資料實時同步到 EasysearchMySql
- 如何透過C++ 將資料寫入 Excel 工作表C++Excel
- vue 自定義指令實現資料拉取更新Vue
- Mybatis實現分包定義資料庫MyBatis資料庫
- Flink 從 0 到 1 學習 —— 如何自定義 Data Sink ?
- 如何將 EXCEL 資料寫入資料庫Excel資料庫
- 透過spark將資料儲存到elasticsearchSparkElasticsearch
- 透過輕易雲平臺實現湯臣倍健資料的高效入庫
- 自定義註解完成資料庫切庫資料庫
- asp實現批次錄入資料的實現 (轉)
- 如何將Excl內資料匯入資料庫?資料庫
- 在.net中透過自定義LoggerProvider將日誌儲存到資料庫方法(以mysql為例)IDE資料庫MySql
- 【資料庫資料恢復】透過恢復NDF檔案修復資料庫的資料恢復過程資料庫資料恢復
- 將XML匯入資料庫XML資料庫
- 資料庫所有檔案丟失後透過RMAN實現恢復資料庫
- 如何透過SQLyog分析MySQL資料庫MySql資料庫
- 透過socket訪問資料庫(轉)資料庫
- ETL資料整合丨透過ETLCloud工具,將Oracle資料實時同步至Doris中CloudOracle
- 【android】自定義佈局控制控制元件的位置可以通過繼承FrameLayout實現Android控制元件繼承
- PPT實現資料錄入與計算
- 【磐維資料庫】透過python訪問磐維資料庫資料庫Python
- 【YashanDB資料庫】PHP無法透過ODBC連線到資料庫資料庫PHP
- 如何透過一條資料庫語句做資料分析資料庫
- Flink CDC 系列 - 實現 MySQL 資料實時寫入 Apache DorisMySqlApache
- 如何用Java將excel資料匯入資料庫JavaExcel資料庫
- 自定義開發資料庫升級程式資料庫