1. 程式人生 > >整合Kafka+Flink 例項(第二部分 設計思路)

整合Kafka+Flink 例項(第二部分 設計思路)

前     言

 

拖了蠻久了,一直說要接著上一部分寫設計思路以及程式碼,因為自己技術底子薄弱,加上人又懶,所以一直沒能繼續,今天補上設計思路及部分程式碼,後面有時間我會再補充一些應用性的功能,的確有些忙,希望對大家有用;歡迎大家提意見或者拍磚;

之前,我說了,網上蠻多例子都是基於WordCount或者基於展示記憶體使用率來的,也沒什麼不對,只是我個人覺得沒有太大的實用性;畢竟咱們是碼農,凡事講個應用及場景,脫離場景談開發都是扯淡;

 

第一部分  場景和設計思路

場景:

通過爬蟲從網路獲取資料,不停的插入Kafka中,Flink及時獲取資料,資料打印出來。時間原因,我沒有繼續做Flink的複雜處理,例如過濾重複、統計資料等,回頭再完善,歡迎大家拍磚;

設計思路:

邏輯上,三個模組,一個是網路爬蟲,提供基礎資料,一個插入Kafka,一個Flink接受處理;

   

為了爬資料,我花了點時間。

爬新聞資料,沒意思;沒有什麼加工的價值,如果要加工,還要做分詞拆解,麻煩;

爬圖片資料,更沒意思;

後來突然想起來一個數據:股市交易資料;挺好,一個更新快,大多是數字,加工計算還是有點價值的;

話不多說,繼續;

1.1 網路爬蟲及基礎資料

股市交易資料URL如下:

http://vip.stock.finance.sina.com.cn/quotes_service/view/cn_bill_all.php?num=100&page=1&sort=ticktime&asc=0&volume=200000&type=0

 這個網頁類似如下:

 

它有幾個特點:

(1)       資料條數是不停變化的;

(2)       資料可能會有重複的;

(3)       資料總條數還是有些量的,查詢條件變化後,資料總條數可以變得更多;

 

具體大家自己研究吧;

如果我不停的抓取這些資料,不就不用for迴圈10000次了嗎,不再像網上那些WordCount的例子咯。

怎麼樣不停的抓呢?Quartz啊,每隔幾分鐘抓一次啊(如果不知道Quartz,請自行補腦)

1.2 插入資料進Kafka

這個部分,有人不停的插入資料就好了,這裡幾乎不用做啥,甚至可以與上面的合併在一次了;

1.3 Flink處理(列印)資料

這個列印的部分,上一篇就有實現了,不贅述;

  

第二部分 開發環境和程式碼結構

開發環境 

 

JDK1.8+IDEA+Maven+SpringBoot

Kafka   版本:kafka_2.12-2.4.0  ; 基於Windows

Flink   版本:flink-1.9.1  基於Windows

  

 

第三部分  部分技術點

3.1 有關Quartz

(1)Quartz本身是可以併發的,最初我設計的時候,想通過瀏覽器傳送申請,用於啟動或者暫停爬蟲抓取,本身技術上實現也不算大,但是我考慮的是,實際應用中,如果多個不同使用者傳送不同命令,有的人傳送開始執行,有的人傳送停止執行,而後臺其實目前就規定抓一個頁面,那麼到底該聽誰的?難道要做一個每個人啟動每個人自己的任務?然後每個人抓的資料只給每個人用?想到這兒,我就暫停了這個部分的實現;

感覺不是太實用;

(2)按照設計,我只考慮一個任務進行執行,所以實際執行過程中,建議把間隔時間調的稍微長點,否則,上一個任務還沒有完成,下一個任務又啟動了,這樣下去只會把伺服器給玩宕機了;

(3)我覺得還是需要有個暫停的功能,初步覺得還是用網頁引數方式,

(4)單獨寫一個Quartz的應用沒啥意思,我覺得還是把它放到SpringBoot,隨著系統一起啟動,這樣會比較方便;

3.2 有關爬蟲

爬蟲其實沒有太多的技術難度,無非就是用HttpClient進行頁面資料解析,唯一的小難點,就是要能夠自動翻頁,如果不能自動翻頁,要它何用?

 

3.3 有關Flink

(1)flink的使用,我就做了列印,實現方法學習於網路,為什麼列印4個檔案,而只有第4個檔案會被打印出來,還沒研究。

(2)當我把Kafka停止供應資料時,Flink會出現Reblance的異常,所以這段程式碼可以考慮再優化;

 

 

第四部分  執行結果

目前,我這裡僅僅是打印出來,後續我會找時間再做彙總加工的邏輯;

 

 

檔案內容

 

 

注:

我程式碼功底若,寫的又比較倉促,剛剛開始研究Kafka及Flink就不貼在此處丟臉了。

如果需要程式碼,評論區留下郵件地址。我晚上抽空一併發了。

&n