前 言php
拖了蠻久了,一直說要接着上一部分寫設計思路以及代碼,由於本身技術底子薄弱,加上人又懶,因此一直沒能繼續,今天補上設計思路及部分代碼,後面有時間我會再補充一些應用性的功能,的確有些忙,但願對你們有用;歡迎你們提意見或者拍磚;瀏覽器
以前,我說了,網上蠻多例子都是基於WordCount或者基於展現內存使用率來的,也沒什麼不對,只是我我的以爲沒有太大的實用性;畢竟我們是碼農,凡事講個應用及場景,脫離場景談開發都是扯淡;服務器
場景:網絡
經過爬蟲從網絡獲取數據,不停的插入Kafka中,Flink及時獲取數據,數據打印出來。時間緣由,我沒有繼續作Flink的複雜處理,例如過濾重複、統計數據等,回頭再完善,歡迎你們拍磚;併發
設計思路:學習
邏輯上,三個模塊,一個是網絡爬蟲,提供基礎數據,一個插入Kafka,一個Flink接受處理;優化
爲了爬數據,我花了點時間。spa
爬新聞數據,沒意思;沒有什麼加工的價值,若是要加工,還要作分詞拆解,麻煩;設計
爬圖片數據,更沒意思;3d
後來忽然想起來一個數據:股市交易數據;挺好,一個更新快,大可能是數字,加工計算仍是有點價值的;
話很少說,繼續;
股市交易數據URL以下:
這個網頁相似以下:
它有幾個特色:
(1) 數據條數是不停變化的;
(2) 數據可能會有重複的;
(3) 數據總條數仍是有些量的,查詢條件變化後,數據總條數能夠變得更多;
具體你們本身研究吧;
若是我不停的抓取這些數據,不就不用for循環10000次了嗎,再也不像網上那些WordCount的例子咯。
怎麼樣不停的抓呢?Quartz啊,每隔幾分鐘抓一次啊(若是不知道Quartz,請自行補腦)
這個部分,有人不停的插入數據就行了,這裏幾乎不用作啥,甚至能夠與上面的合併在一次了;
這個打印的部分,上一篇就有實現了,不贅述;
開發環境
JDK1.8+IDEA+Maven+SpringBoot
Kafka 版本:kafka_2.12-2.4.0 ; 基於Windows
Flink 版本:flink-1.9.1 基於Windows
(1)Quartz自己是能夠併發的,最初我設計的時候,想經過瀏覽器發送申請,用於啓動或者暫停爬蟲抓取,自己技術上實現也不算大,可是我考慮的是,實際應用中,若是多個不一樣用戶發送不一樣命令,有的人發送開始執行,有的人發送中止執行,然後臺其實目前就規定抓一個頁面,那麼到底該聽誰的?難道要作一個每一個人啓動每一個人本身的任務?而後每一個人抓的數據只給每一個人用?想到這兒,我就暫停了這個部分的實現;
感受不是太實用;
(2)按照設計,我只考慮一個任務進行執行,因此實際執行過程當中,建議把間隔時間調的稍微長點,不然,上一個任務尚未完成,下一個任務又啓動了,這樣下去只會把服務器給玩宕機了;
(3)我以爲仍是須要有個暫停的功能,初步以爲仍是用網頁參數方式,
(4)單獨寫一個Quartz的應用沒啥意思,我以爲仍是把它放到SpringBoot,隨着系統一塊兒啓動,這樣會比較方便;
爬蟲其實沒有太多的技術難度,無非就是用HttpClient進行頁面數據解析,惟一的小難點,就是要可以自動翻頁,若是不能自動翻頁,要它何用?
(1)flink的使用,我就作了打印,實現方法學習於網絡,爲何打印4個文件,而只有第4個文件會被打印出來,還沒研究。
(2)當我把Kafka中止供應數據時,Flink會出現Reblance的異常,因此這段代碼能夠考慮再優化;
目前,我這裏僅僅是打印出來,後續我會找時間再作彙總加工的邏輯;
文件內容
注:
我代碼功底若,寫的又比較倉促,剛剛開始研究Kafka及Flink就不貼在此處丟臉了。
若是須要代碼,評論區留下郵件地址。我晚上抽空一併發了。