前 言
拖了蠻久了,一直說要接着上一部分寫設計思路以及代碼,因為自己技術底子薄弱,加上人又懶,所以一直沒能繼續,今天補上設計思路及部分代碼,后面有時間我會再補充一些應用性的功能,的確有些忙,希望對大家有用;歡迎大家提意見或者拍磚;
之前,我說了,網上蠻多例子都是基於WordCount或者基於展示內存使用率來的,也沒什么不對,只是我個人覺得沒有太大的實用性;畢竟咱們是碼農,凡事講個應用及場景,脫離場景談開發都是扯淡;
第一部分 場景和設計思路
場景:
通過爬蟲從網絡獲取數據,不停的插入Kafka中,Flink及時獲取數據,數據打印出來。時間原因,我沒有繼續做Flink的復雜處理,例如過濾重復、統計數據等,回頭再完善,歡迎大家拍磚;
設計思路:
邏輯上,三個模塊,一個是網絡爬蟲,提供基礎數據,一個插入Kafka,一個Flink接受處理;
為了爬數據,我花了點時間。
爬新聞數據,沒意思;沒有什么加工的價值,如果要加工,還要做分詞拆解,麻煩;
爬圖片數據,更沒意思;
后來突然想起來一個數據:股市交易數據;挺好,一個更新快,大多是數字,加工計算還是有點價值的;
話不多說,繼續;
1.1 網絡爬蟲及基礎數據
股市交易數據URL如下:
這個網頁類似如下:
它有幾個特點:
(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就不貼在此處丟臉了。
如果需要代碼,評論區留下郵件地址。我晚上抽空一並發了。