整合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就不貼在此處丟臉了。

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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM