溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

為什么Flink無法實時寫入MySQL

發布時間:2021-08-25 21:07:29 來源:億速云 閱讀:190 作者:chen 欄目:大數據

這篇文章主要介紹“為什么Flink無法實時寫入MySQL”,在日常操作中,相信很多人在為什么Flink無法實時寫入MySQL問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”為什么Flink無法實時寫入MySQL”的疑惑有所幫助!接下來,請跟著小編一起來學習吧!

本文主要分為以下三部分:                        
                     
  1. 問題描述

  2. 解決思路

  3. 原因剖析                          

問題描述

 
Flink 1.10 使用 flink-jdbc 連接器的方式與 MySQL 交互,讀數據和寫數據都能完成,但是在寫數據時,發現 Flink 程序執行完畢之后,才能在 MySQL 中查詢到插入的數據。即,雖然是流計算,但卻不能實時的輸出計算結果?
為什么Flink無法實時寫入MySQL  

 
相關代碼片段:  

 
JDBCAppendTableSink.builder()    .setDrivername("com.mysql.jdbc.Driver")    .setDBUrl("jdbc:mysql://localhost/flink")    .setUsername("root")    .setPassword("123456")    .setParameterTypes(    BasicTypeInfo.INT_TYPE_INFO,    BasicTypeInfo.STRING_TYPE_INFO)    .setQuery("insert into batch_size values(?,?)")   .build()
 

 

如何解決?

Flink 1.10 這個問題是知道一秒鐘,不知磨洋工的 Case,在初學時候非常容易遇上,那么真的是 Flink 不能實時寫入 MySQL 嗎?當然不是,上面代碼基礎之上簡單的加上一行,就解決問題了:

....setBatchSize(1) //將寫入MySQL的buffer大小為1。..

原因剖析

那么問題雖然解決了,根本原因是個啥呢?也許你看到這里會說,這問題很明顯,就是 Flink 設計 JDBC Sink 的時候出于性能因素考慮,對寫入 buffer 做了默認值設置。

沒錯,這一點你說的很對,在 Flink 1.10 中 JDBC OutputFormat 的基類  AbstractJDBCOutputFormat 里面和這相關的變量 DEFAULT_FLUSH_MAX_SIZE 默認值是 5000,所以在你學習測試時候由于測試數據少(少于 5000),數據一直在 buffer 中,直到數據源數據結束,作業也結束了,才將計算結果刷入 MySQL,所以沒有實時的(每條)寫入 MySQL。如下:

為什么Flink無法實時寫入MySQL

但這里還有個因素需要注意,那就是時間因素,上面 DEFAULT_FLUSH_INTERVAL_MILLS 默認值是 0,這個相當于沒有時間限制,一直等到 buffer 滿了或者作業結束才能觸發寫出動作。

也就是有些初學者,發現問題,即使故意 debug 時候打上斷點,不讓作業結束,但是等到花兒都謝了,數據也沒有寫入到 MySQL。

在 Flink 1.10 中 AbstractJDBCOutputFormat 有兩個實現類:

為什么Flink無法實時寫入MySQL

分別對應了如下兩類 Sink:

為什么Flink無法實時寫入MySQL

所以在 Flink 1.10 中不論是 AppendTableSink 和 UpsertTableSink 都會有同樣的問題。不過 UpsertTableSink 時用戶可以設置時間,而 AppendTableSink 是連時間設置的入口都木有。

到此,關于“為什么Flink無法實時寫入MySQL”的學習就結束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續學習更多相關知識,請繼續關注億速云網站,小編會繼續努力為大家帶來更多實用的文章!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

亚洲午夜精品一区二区_中文无码日韩欧免_久久香蕉精品视频_欧美主播一区二区三区美女