關(guān)于 Flink, 我讀了這些書
真正做點(diǎn)事的時候,發(fā)現(xiàn)時間過的賊快
這兩周,業(yè)余時間都在看 Flink. 項(xiàng)目實(shí)時處理的需求,越來越多,維穩(wěn)策略下,團(tuán)隊(duì)選擇了 Flink. 所以,我覺得非常有必要,自己先搭環(huán)境玩起來。
共計22小時,每天拿出大約2小時左右,上手做下例子。當(dāng)然,還僅僅只能做簡單開發(fā),對于特別場景的應(yīng)用,止步于算法和數(shù)據(jù)結(jié)構(gòu)。從應(yīng)用架構(gòu)上,其實(shí) Flink與 Spark 并沒有太多的差異。看幾個例子,很快就能上手寫一寫。
但,就如我之前的文章所寫,學(xué)任何技術(shù),千萬不要沉迷于基礎(chǔ)入門的案例,一開始就要朝著高端例子研究。為的就是暴露自己的斤兩,知道目前自己在什么位置。通過自己的努力,一步步攻克那些里程碑。
以前,我經(jīng)常為自己能寫出上千行的 SQL,并把它們控制在 5s 以內(nèi)返回結(jié)果,而狂喜不已,甚至有些橫著走的心態(tài)。
但隨著閱讀的增加,知道有些人類,改寫了引擎的輪子,拿到了納斯達(dá)克交易所的門票,才發(fā)現(xiàn)自己,愚蠢至極。從此我警告自己,“不要熵死!”
很多朋友疑惑,學(xué)Flink,是不是要先有 Hadoop/Hive/Spark基礎(chǔ)。依我看,即使不會,問題也不大。它提供的功能,還是分量處理。把宏大的流量,分散到各個處理節(jié)點(diǎn),通過Transformation算子,做些統(tǒng)計,預(yù)測和告警。
之所以認(rèn)為,要學(xué)Flink, 必須要先學(xué) Hadoop/Hive/Spark,可能受教條化的老學(xué)究影響。那代老學(xué)究就是這么過來的,他們經(jīng)歷的大數(shù)據(jù)歷史,從2006年的 Hadoop 開始, 一路經(jīng)歷了 Hive,Spark 項(xiàng)目,固化的認(rèn)為,F(xiàn)link 也必須先摸索一遍大數(shù)據(jù)三件套
大可不必。經(jīng)過這幾天的摸索,我發(fā)現(xiàn),完整的 Flink 程序,由一個 Java 或 Scala 的程序入口開始,一般是一個靜態(tài)(static)的 main 函數(shù)。在main函數(shù)中,定義了下面幾個核心步驟。
①設(shè)置執(zhí)行環(huán)境。
②讀取一到多個數(shù)據(jù)源。
③根據(jù)業(yè)務(wù)邏輯對數(shù)據(jù)流進(jìn)行轉(zhuǎn)換。
④將結(jié)果輸出到 Sink。
⑤調(diào)用作業(yè)執(zhí)行函數(shù)。
上述步驟或者說配置,就是標(biāo)準(zhǔn)的 Flink 應(yīng)用必備設(shè)計。無論多么復(fù)雜的 Flink 程序,都包含了這些程序
所以,我大膽嘗試下,摒棄以往的學(xué)法,沒有哭哈哈從頭到尾讀書, 也忘記大數(shù)據(jù)三件套的先入理念,直接閱讀?wordcount 源代碼,給自己設(shè)定幾個改造場景,然后去完成編碼:
1)拿到 wordcounter 的例子源代碼? ? ? ?
2)將其 sink 目標(biāo)改成 MySQL ?的一張表:? wordcounter ?
3)? ?官方的 WC 案例,是分組計算,那我們的改造例子,就完成全量計算?
4) 再改造下,將counter數(shù)大于 5 的記錄,都找出來
5) 再改造下,把原始記錄存在 MySQL的 wordrecord中,用 Flink去分組計算,并存入 MySQL 的 wordcounter 表
在做的過程中,我發(fā)現(xiàn)很多的不足,也正在一個個填坑,看著以往的技術(shù)債,一個個被補(bǔ)齊,睡覺做夢都是甜的。
做完第二步時,我認(rèn)為一個里程碑已經(jīng)到了。決定先把這些天的實(shí)踐過程分享出來,同時也推薦一些好書。
總的來說,這次沒有買一本實(shí)體書,就把例子給敲出來了。邊寫代碼,邊在《微信讀書》上檢索。總共參考了3-5本教科書,和一本 InfoQ 的電子書,羅列在下面:
《Flink 原理與實(shí)踐》
《實(shí)戰(zhàn)大數(shù)據(jù)》
《Flink內(nèi)核原理與實(shí)現(xiàn)》
《Flink 入門與實(shí)戰(zhàn)》
《不僅僅是流計算:Apache Flink 實(shí)踐》
就如我之前所說,研究技術(shù),首要任務(wù)是看高端案例, 揣摩行業(yè)應(yīng)用。別把技術(shù)當(dāng)做唯一的籌碼,現(xiàn)在的技術(shù)已經(jīng)沒有太多壁壘,想要靠技術(shù),就能獲得一定的成就,已經(jīng)沒有2000 年左右(互聯(lián)網(wǎng))那么好的機(jī)會了。
那么,快速掌握技術(shù),就變成了一項(xiàng)最基本的功底。公司要發(fā)展,產(chǎn)品要出類拔萃,僅靠技術(shù)不大行,還需兼顧其他技能。這,倒不是說“卷”,而是自我完善的一個必須。
很多IT人,包括我自己,在做職業(yè)規(guī)劃的時候,都把技術(shù)放在首位,認(rèn)為這項(xiàng)技術(shù)要學(xué)好,必須1,2,3,4,5這樣來學(xué),必須經(jīng)歷過5到6年的扎實(shí)項(xiàng)目基礎(chǔ)。現(xiàn)在來看,都是技術(shù)思維惹的禍。完全不必這樣。
技術(shù)這個維度的競爭,唯快不破。悠哉悠哉的學(xué)完一門功課,還沒等派上用場,項(xiàng)目已經(jīng)開始引進(jìn)另一項(xiàng)技術(shù)生態(tài)了。
典型的屬 C# 與 Java 之爭。好多同學(xué)都還停留在 2 刷《 CLR Via C#》,項(xiàng)目組已經(jīng)開始引進(jìn) Java Spring Boot.
我非常承認(rèn)《CLR Via C#》是本特別棒的書,部分章節(jié)我刷過 5 遍不止。但,公司項(xiàng)目要盈利,我唯一能做的,只有立即熟悉 Java Spring Boot,馬上開始干活。
沒辦法,中國軟件行業(yè),目前就是這么個生態(tài)。如果你所在的環(huán)境,不是這樣,還勞煩告知我。
就好比,我們有 Spark,為什么不把 Spark 用好,再考慮 Flink? 為什么我們不從頭開始設(shè)計一套 Spark.Net, 或者 Flink Via C#?
醒醒,個人,是無非阻擋生態(tài)的。一個人的力量再強(qiáng),沒有辦法和一支軍隊(duì)抗衡
以往, 我學(xué)東西也選擇大部頭的書。悠哉悠哉,喝一下午的咖啡,看上 10 幾頁的書,總覺得內(nèi)心很滿足。但現(xiàn)在來看,完全是錯誤的方法。
書上的知識,有些是作者硬塞給我們的一堆概念,平時根本用不到。這些知識,純粹是出版社的那些老編輯,為了技術(shù)體系的完整性,硬提供的補(bǔ)充讀物。讀者們花了錢,買了書,如果連完整性都做不到,出版社要被罵娘的。
真正講究實(shí)用主義的學(xué)法,完全不應(yīng)該照著書本去看,尤其是從頭到尾的硬讀。這樣的閱讀,唯一的功用,是腐蝕掉學(xué)技術(shù)的熱情,增加“我好用功啊”的雞血。
人有兩種特質(zhì)最寶貴,熱情和專注。從頭到尾看一本技術(shù)類的工具書,恰恰會把我們的這兩種寶貴特質(zhì),消耗得一點(diǎn)不剩。
在完全可以做出一件滿意的作品時,我們的熱情,很有可能被“慢悠悠看書”給吞噬,最后只剩“我咋那么笨呢?看了這么多書,連這個玩意兒都做不出來”。那么相信我,此時,放棄是我們腦袋里,唯一的想法
所以,這次我的做法,比較另類。幾乎沒有看完一本 Flink 的書,甚至可能都沒有好好看完一章。照著源代碼,就自己實(shí)現(xiàn)起來,直到把第一個例子 word count 的結(jié)果,(Sink) 存儲到 MySQL.
但我覺得,我花的時間還是太長,這可能和我的智商,各類檢索技巧有關(guān),有時候,一個好的例子,真的會讓我們少走很多彎路,進(jìn)而把看書,用笨功夫的時間和精力,都花在思考如何寫代碼,寫出能跑的例子上面
當(dāng)然,做出能跑的例子,真的還只是第一步。就跟很多求職者,求職時簡歷上寫的那樣,精通 C/C++/Java/Dephi/C#,每樣都只停留在打印出 Hello World 的水平。
隨著深入閱讀,編碼和實(shí)現(xiàn),編程工具本身的掌握,并不是難事,不要把它想的很難,需要花很多功夫。在戰(zhàn)略上,我們一定要輕視它,相信自己能在短期內(nèi)學(xué)好。因?yàn)檎嬲y的東西,還是算法和數(shù)據(jù)結(jié)構(gòu)。
比如改造 wordcount,遇到一個巨難的問題。要把爬下來的股評,放進(jìn)切詞器,通過卷積算法,分析出輿論走向。僅切詞這個算法,就十分有講究,簡單的正則表達(dá)式,不能解決中文切詞。
一旦涉及到真正的有生產(chǎn)力(能盈利)的編程,精通算法的程序員,價值就出來了。我去知網(wǎng),搜索了一圈碩士,博士論文,幾乎年年都有新的切詞算法出來。
這幾年,我篤定一個讀書方法,去閱讀那些有感情的文字。比如采訪,公開分享和演講。這些材料,比起書本化的文字,更富有個人色彩。一個人真正做一件事,我能感受到他的痛苦,煎熬和興奮。他做這件事的熱情,很快就能感染到我,并激發(fā)我前進(jìn)。
就像《不僅僅是流式計算:Apache Flink 實(shí)踐》,里面沒有詳細(xì)地告訴我們,F(xiàn)link 框架是什么,分布式原理是什么。但我依然從書中讀到了這些寶貴的經(jīng)驗(yàn):滴滴公司,在處理熱點(diǎn)打車區(qū),是怎么用 Flink 實(shí)現(xiàn)的統(tǒng)計匯總;美團(tuán),在外賣高峰期,F(xiàn)link 是怎么用來處理這些實(shí)時告警的。
這些都是值得我們自己去做模型探索的,只有親自深挖過這些項(xiàng)目實(shí)現(xiàn),才能給自己足夠的信心,在碰到同樣同類型的處理場景時,我可以做好。
我很羨慕那些,能把技術(shù)學(xué)好,還能把它寫出來,分享給社區(qū)的IT工作者,這也是我寫文章,寫公眾號的初衷。希望看到的朋友,能督促我,做得更好,為數(shù)據(jù)科學(xué)類社區(qū),貢獻(xiàn)一點(diǎn)綿薄之力
往期精彩:
