《Kafka技術內幕》作者鄭奇煌:除了學習筆記,也許你還需要流程圖(圖靈訪談)
訪談嘉賓: 鄭奇煌,目前就職於杭州某網際網路風控公司。主要專注於大資料、流計算和中介軟體,他希望自己能在技術的路上越走越遠,用技術為社會創造出價值和財富。時常更新個人的部落格:zqhxuyuan.github.io,分享技術學習心得。 |
訪談實錄:
怎麼對Kafka產生興趣的?
最早,我是通過Zhuang Xiaodan在Github上改造的metaq和Liu Ady的jafka才接觸到Kafka的,但並沒有就此開始做深入的研究。
我在工作當中的主要任務是大資料Spark的開發,一些流任務的處理會借用Kafka。因為業務主要使用了Scala語言開發,我就想著學習一個Scala相關的開源專案。對於我來說,Spark的一些概念很難,於是就選了Kafka作為研究物件,相對來說Kafka的概念還是比較容易理解的。
決定寫《Kafka技術內幕》的原因是什麼?
在學習了很多關於Kafka的優秀資料以後,比如郭俊和李志濤兩位的部落格,我想要更加深入地理解背後的技術原理,所以決定去研究原始碼。斷斷續續看了一個多月,畫了很多圖,就把學習筆記放在了部落格上,從讀者的留言反饋上看,效果還不錯。也許是頭腦一時發熱也許是內心某種追求的激勵,在2016年六七月份的時候,我聯絡了圖靈的編輯王軍花,表達了想要寫書的意思。她還是很鼓勵我寫作的,認為這本書可以填補國內還沒有出版過Kafka相關書籍的空白。當時,除了英文版的Learning Kafka之外,確實沒有其他比較完整的資料了,所以這些更堅定了我寫書的決心。
怎麼定義“在技術上有追求的人”?在技術領域,你有哪些尊敬的人?
我覺得“對技術有追求的人”是能夠利用技術為社會創造出價值和財富的人,他們推動著社會不斷進步。相比這些人,我覺得自己目前還只是“碼農”一枚,在精深技術的道路上還有走很長、很曲折的一段。就我所在的圈子來說,我比較崇(膜)拜Linux之父Linus和賈伯斯這樣的大神~
Kafka是一個什麼樣的工具?擅長做什麼?
最開始的時候,Kafka的定位是一個訊息中介軟體。你把訊息放進去,然後另一個人從裡面取出訊息進行消費,甚至許多不同的人都可以取出相同的訊息。Kafka主要擅長做訊息生產和消費的解耦,即使消費者消費太慢了也不會影響到生產者。它的主要應用有日誌收集、效能度量、網站監控等,比如把日誌、效能資訊等放入Kafka,再通過其他程式對資料進行分析。在最新的版本中,Kafka已經是一個成熟的流式資料處理平臺了,並且也支援外部資料庫匯入匯出到Kafka。
可以說,圖解IT技術是《Kafka技術內幕》的一大特色。書中的圖都是你自己繪製的嗎?使用了哪些繪圖工具?相比文字,繪圖有哪些更高的要求?
書裡面的圖片有近400幅,全部是用Mac的Keynote做的。除了準確表達程式的執行步驟之外,圖片能簡明扼要地呈現。相比文字,用圖片表達,比如不同元件之間的關聯關係或是某一個變數存在的含義,更容易上讀者理解接受。
聽說你在寫作過程中經歷了重重的困難,三改稿件。跟我們分享下遇到的那些困難,以及不斷修改稿件的原因?
第一稿的內容太多,程式碼和圖片都過於詳細,於是在第二稿的時候,我刪掉了一些比較簡單的程式碼和圖片。刪減工作並不是想象的那樣簡單,我必須增加過渡性的鋪墊說明。另外,我是邊研究原始碼邊寫作的,這雖然保證了準確性,卻對寫作有一定的牽制。有些原始碼理解起來比較困難,還得參考相關的測試用例,一點一點啃下官方的英文設計文件。有些地方會有理解不準確,就推翻重寫。比如,在消費組的狀態機這塊,原先畫的流程圖太長,後來自己看起來都有困難,於是重新對這部分進行了拆解。
整體結構上,我一開始設計的順序是生產者、Broker、消費者。原因是,介紹完Broker的資料結構,再理解消費者會比較簡單。後來發現,把生產者和消費者作為客戶端一起分析的話,組織結構會更好,我又把消費者移到了Broker前面。這麼一調整,就要求對消費者中涉及的Broker知識提前做出簡單介紹和修改。
另外,我是利用業餘時間寫作的,進度上確實有點慢。在這裡,也對編輯的工作和耐心表示由衷的感謝,也對網路上一些網友的期待表示感謝,期望本書不會讓你們失望。讀者如果對本書有什麼意見,都可以在圖靈社群提出來。
你是一個“完美主義者”嗎?認可某件事情的標準有哪些?
我覺得,既然選擇了一件事情,就要弄懂它的所有細節,去深究它的實現原理。認可事情的話,我的理解是,你開發出來的某款軟體用起來容易上手。當然這是相對的,你肯定要花時間去深入研究背後的技術,再困難的事情最終也一定都可以解決。
如何看待由程式碼堆疊而來的原始碼分析?
其實,有關原始碼分析的書籍最(被)忌(罵)程式碼太多。在《Kafka技術內幕》這本書裡面,我已經儘量避免大段大段的程式碼,並且沒有直接貼上程式碼段的情況。我建議讀者儘量開啟IDE,跟隨作者一起閱讀原始碼,這種效果是最好的。
其實,我因為本書沒有更多的實戰部分,總覺得有很多遺憾。Linux OpenMessaging規範發起人馮嘉曾建議我在書里加上cruise-control、RocketMQ等內容,我也一開始就打算加上流處理框架與Kafka的整合,但因為書太厚了,只能忍痛割愛。如果再版的話,我會加進相關的內容。
你曾經閱讀過Hadoop、HBase、Storm等的原始碼,對原始碼研究有哪些體會?
最早,我是看蔡斌的《Hadoop技術內幕》入門大資料的,一邊看書一邊研究原始碼,還整理了八百多頁的學習筆記。當時還興沖沖地在微博上釋出了#圖說Hadoop原始碼#(現在連結失效了)的系列文章,作為粉絲的深夜福利(笑)。
分散式檔案系統看完後,我結合《HBase權威指南》學習了分散式儲存框架HBase(0.94)。接著,主要是結合hseagle和fxjwind兩位的部落格研究分散式計算Storm的原始碼。當然,這幾個開源專案看到最後,有些部分是沒有深入進去的,不過總的收穫還是蠻大的。
研究原始碼的時候,我傾向先學習一些優秀的部落格文章,然後結合自己的理解,總結成視覺型的流程圖,還要寫學習筆記。說來也巧,學習完這幾個開源專案,我用到的畫圖工具一般都是系統自帶的工具,比如Window的Office/PlantUML,Ubuntu的LibreOffice,GoogleDoc,Mac的Keynote。
另外,讀原始碼難免會遇到一些難點,這時候可以參考測試用例。開源專案的測試用例一般都是很完整的。還要訂閱官方的郵件,開發人員會很耐心並且及時地解答你的問題。我在測試Kafka Streams時遇到的一些問題,就是Kafka的開發人員幫忙解決的。
請介紹下Kafka的編譯原理?
Kafka首先是一個分散式的訊息佇列,訊息佇列的客戶端包括生產者和消費者。開發者使用Kafka非常簡單,生產者釋出訊息到Kafka的某個主題,消費者從Kafka的指定主題獲取訊息並進行消費。訊息佇列的服務端則是由代理節點、控制器、ZooKeeper等元件構成的,服務端的代理節點是一個叢集,它實現了訊息佇列的的負載均衡、故障容錯、副本複製等功能。
Kafka還是一個流式資料處理平臺(Kafka Streams),提供了一種輕量級的流計算解決方案,部署和使用都非常簡單,直接啟動一個普通的Java應用程式即可。訊息進入Kafka後,應用程式利用這個輕量級的庫通過流計算的運算元,可以做到流式地、實時地訊息處理。
除此之外,為了對接不同的資料來源,Kafka還支援聯結器(Kafka Connect)。這樣,從資料來源產生資料到Kafka、實時處理流式資料、結果資料同步到目標資料來源,都是圍繞著Kafka這個生態系統構建的,我們可以看到Kafka從訊息佇列到流式資料處理平臺,是在一步步成長壯大的。
更多精彩,加入圖靈訪談微信!
相關文章
- 《奇思妙想》作者Dennis Shasha:小品電腦科學(圖靈訪談)圖靈
- [英]《奇思妙想》作者Dennis Shasha:小品電腦科學(圖靈訪談)圖靈
- 《程式碼本色》作者Daniel Shiffman:藝術家也程式設計(圖靈訪談)程式設計圖靈
- 《機器學習》作者Peter Flach:好萊塢也借AI上頭條(圖靈訪談)機器學習AI圖靈
- 《演算法圖解》作者Adit Bhargava訪談問題徵集(圖靈訪談)演算法圖解圖靈
- 《跟阿銘學Linux》作者阿銘訪談話題有獎徵集(圖靈訪談)Linux圖靈
- 《禽獸心理學》作者Anna Salter訪談問題有獎徵集(圖靈訪談)圖靈
- 《圖靈的祕密》作者Charles Petzold:我眼中的圖靈機和Windows(圖靈訪談)圖靈Windows
- 《學習響應式設計》作者Clarissa Peterson訪談問題有獎徵集(圖靈訪談)圖靈
- 《演算法圖解》作者Adit Bhargava:插圖筆記法解除演算法的魔咒(圖靈訪談)演算法圖解筆記圖靈
- 《機器學習》作者Peter Flach訪談問題有獎徵集(圖靈訪談)機器學習圖靈
- 圖靈訪談圖靈
- 《特斯拉》作者卡爾森教授訪談問題有獎徵集(圖靈訪談)圖靈
- 《釋出!》作者Michael Nygard訪談問題有獎徵集(圖靈訪談)圖靈
- 《你不知道的JavaScript》作者Kyle Simpson訪談問題有獎徵集(圖靈訪談)JavaScript圖靈
- 《CSS揭祕》作者Lea Verou訪談問題有獎徵集(圖靈訪談)CSS圖靈
- 《鳳凰專案》作者基恩·金訪談問題有獎徵集(圖靈訪談)圖靈
- 幽默可以學習和設計,更需要感同身受——圖靈專訪《番茄工作法圖解》作者Staffan十日談之六圖靈圖解
- “龍書”作者Jeffery Ullman:相信你自己,自由地思考(圖靈訪談)圖靈
- 《資料科學實戰》作者Cathy O'Neil訪談問題有獎徵集(圖靈訪談)資料科學圖靈
- 專訪《AngularJS 2權威教程》作者Nate Murray:程式碼更像圖表,需要多維度把握(圖靈訪談)AngularJS圖靈
- 《圖靈的祕密》作者Charles Petzold訪談問題徵集圖靈
- 《演算法(第4版·英文)》作者羅伯特·塞奇威克訪談問題有獎徵集(圖靈訪談)演算法圖靈
- 有獎 |《人工智慧簡史》作者尼克訪談話題徵集(圖靈訪談)人工智慧圖靈
- 《JavaScript Web應用開發》作者Nicolas Bevacqua訪談問題徵集(圖靈訪談)JavaScriptWeb圖靈
- 《AngularJS 2 權威指南》作者Nate Murray訪談問題徵集(圖靈訪談)AngularJS圖靈
- 阿朱:從50到5000,從技術到人(圖靈訪談)圖靈
- CNode社群:Node.js技術及生態(圖靈訪談)Node.js圖靈
- 向《番茄工作法圖解》作者Staffan Nöteberg提問!(圖靈訪談)圖解圖靈
- [英]“龍書”作者Jeffery Ullman:相信你自己,自由地思考(圖靈訪談)圖靈
- Kafka學習筆記(一) :為什麼需要Kafka?Kafka筆記
- Kafka 學習筆記(一) :為什麼需要 Kafka?Kafka筆記
- 《R包開發》作者Hadley Wickham訪談問題有獎徵集(圖靈訪談)圖靈
- 《用資料講故事》作者Cole Knaflic訪談話題有獎徵集(圖靈訪談)圖靈
- 《使用者思維+》作者Kathy Sierra訪談問題有獎徵集(圖靈訪談)圖靈
- 《Flask Web開發》作者Miguel Grinberg訪談問題有獎徵集(圖靈訪談)FlaskWeb圖靈
- Jolt大獎獲獎作者Venkat Subramaniam訪談問題有獎徵集(圖靈訪談)圖靈
- 譯後訪談《Scratch少兒趣味程式設計》作者阿部和廣(圖靈訪談)程式設計圖靈