TOP
0
0
【簡體曬書區】 單本79折,5本7折,活動好評延長至5/31,趕緊把握這一波!
Apache Kafka實戰(簡體書)
滿額折

Apache Kafka實戰(簡體書)

人民幣定價:89 元
定價
:NT$ 534 元
優惠價
87465
領券後再享88折
海外經銷商無庫存,到貨日平均30天至45天
可得紅利積點:13 點
相關商品
商品簡介
目次

商品簡介

本書是涵蓋Apache Kafka各方面的具有實踐指導意義的工具書和參考書。作者結合典型的使用場景,對Kafka整個技術體系進行了較為全面的講解,以便讀者能夠舉一反三,直接應用於實踐。同時,本書還對Kafka的設計原理及其流式處理組件進行了較深入的探討,並給出了翔實的案例。 本書共分為10章:第1章全面介紹消息引擎系統以及Kafka的基本概念與特性,快速帶領讀者走進Kafka的世界;第2章簡要回顧了Apache Kafka的發展歷史;第3章詳細介紹了Kafka集群環境的搭建;第4、5章深入探討了Kafka客戶端的使用方法;第6章帶領讀者一覽Kafka內部設計原理;第7~9章以實例的方式講解了Kafka集群的管理、監控與調優;第10章介紹了Kafka新引入的流式處理組件。

前言
2011年年初,美國領英公司(LinkedIn)開源了一款基礎架構軟件,以奧地利作家弗蘭茲?卡夫卡(Franz Kafka)的名字命名,之後LinkedIn將其貢獻給Apache基金會,隨後該軟件於2012年10月成功完成孵化並順利晉升為Apache頂級項目――這便是大名鼎鼎的Apache Kafka。歷經7年發展,2017年11月,Apache Kafka正式演進到1.0時代,本書就是基於1.0.0版本來展開介紹Kafka的設計原理與實戰的。
背景
這是一個最好的大數據時代,這是一個最壞的大數據時代!
很抱歉,我使用了這句改編後的狄更斯名言作為開頭,我想沒有誰會質疑“當今是大數據時代”這個論點。今年(2018年)兩會上李克強總理所做的政府工作報告中多次提及大數據等關鍵詞,這已然是“大數據”第5次被寫入政府工作報告了。具體到大數據行業內,各種各樣的大數據產業方興未艾,其中在實時流式處理領域湧現出大量的技術與框架,令技術人員們應接不暇。實時流式處理系統在克服了傳統批處理系統延時方面的固有缺陷的同時,還擺脫了設計上的桎梏,實現了“夢寐以求”的正確性。可以說,對於流式處理從業人員來說,這正是摩拳擦掌、大展宏圖的最好時代。
與此同時,我們也清醒地意識到當今大數據領域內的細分越來越精細化。不必說日漸火爆的人工智能和機器學習潮流引誘著我們改弦易轍,也不必說那些紛繁複雜的技術框架令人眼花繚亂,單是靜下心來沉澱所學、思考方向的片刻時光於我們這些從業者來說都已顯得彌足珍貴。我們仿佛在黑暗密林中徘徊,試圖找出那條通往光明的“康莊大道”。每當發現了一條羊腸小路都好似救命稻草一般緊緊抓住。多年後我們回望那只不過是不斷追逐熱點罷了,在技術的海洋中我們迷失了前進的方向。從這個意義上說,這實在是一個糟糕的時代。
時光切回到4年前的某個下午,那時我正在做著Kafka的大數據項目。我突然發現與其盲目跟風各種技術趨勢,何不精進手頭的工作,把當前工作中用到的技術搞明白,於是我萌發了研究Kafka的想法。直到今天,我都無比慶倖那個午後做出的衝動決定,正如Adam Grant在《離經叛道》一書中所說:最正確的決定都是在衝動之下做出的。誠不欺我!
想要深入學習Kafka,不掌握Scala語言是不行的,畢竟Kafka就是使用Scala語言編寫的。苦於當時沒有合適的Scala中文書籍,我依稀記得找到了一本600多頁的Scala原版書(Programming Scala Edition 2)進行學習。那段時間實在是難熬!不得不說,英文版書籍雖然內容翔實,但在表述上實在晦澀難懂,比如partially applied function和partial function兩者的區別直至今天我都不是特別清晰,還是要不斷地翻閱資料才能隱約記得它們之間的不同。慶倖的是,我沒有半途而廢,600多頁的英文文檔硬是啃了下來。對於Scala的初步掌握也讓我覺得研究Kafka的時機到了。有意思的是,在之後通讀Kafka的源碼時我不禁大呼上當,Kafka的源碼中只使用了最簡單的函數式編程,我有些後悔自己花了那麼多時間去學習Scala的函數式編程,當然這是後話。
既然是研究Kafka,那麼研讀源碼是必不可少的步驟。如果不分析源碼,我們就無法定位問題發生的根本原因。實話實說,閱讀別人源碼的過程是痛苦的,因而在理解的過程中我走了不少彎路。為了記錄閱讀Kafka源碼的心得,我努力為每個Kafka源碼包撰寫博客。現在翻看我之前的博客,大家還能看到那好似流水帳一般的Kafka源碼分析系列文章。
隨著對源碼的不斷熟悉,我加入了Apache Kafka社區,希望貢獻自己的微薄之力。時至今日,我依然記得當初發送郵件要求加入開發組時的惶恐,也記得第一次貢獻代碼時的惴惴不安;我記得為了研究某個Kafka bug,自己曾忘記吃中飯的執著,也記得自己被標記為“Kafka contributor”時的喜悅。在混跡社區的日子裡,我逐漸認識了一些Kafka的committer們,比如Kafka PMC成員王國璋,國璋兄對於網上Kafka問題的權威解答令我受教良多,同時我也很感激他於百忙之中為本書寫推薦語。還有Kafka的三位原作者之一的饒軍(Rao Jun),幾次問題交流讓我看到了他霸氣的決斷能力以及對於疑難問題原因的毒辣分析。當然還有非常敬業的Ijuma,他是我見過的最勤勞的Kafka committer,沒有之一。在編寫本書的過程中,我都或多或少地得到過他們的幫助,再次表示衷心感謝。
由於對Kafka研究的日益深入,我終於有了寫書的衝動。我希望通過把學到的知識和原理集中整理並書寫成文字來幫助那些尚未接觸Kafka的廣大讀者快速上手,降低他們學習使用Kafka的成本,於是有了今天這本《Apache Kafka實戰》。借著寫作本書的契機,我本人對Kafka的方方面面做了梳理,自覺收穫良多。每當搞懂了一個以前未瞭解的機制時,心中的那種滿足感和興奮感至今都令人神往。在此,我深深地希望讀者在閱讀完本書後也能有這樣的體會。
面向的讀者
我衷心希望本書可以成為各行各業的大數據從業者使用消息隊列甚至是進入流式處理領域內的“敲門磚”,也希望各大公司能夠充分利用Kafka來實現自己的業務目標。
在編寫本書的過程中,我閱讀了大量的英文資料和源代碼,試圖通過自己的理解將Kafka的使用實戰技巧深入淺出地呈現給廣大讀者。沒錯,我希望這本書給人的感覺是通俗易懂、深入淺出,從而方便引領讀者快速進入Kafka學習的大門。
我本人維護了一個微信公眾號(名為“大數據Kafka技術分享”),希望在該公眾號中我能和讀者朋友們一起深入交流和探討Kafka學習過程中碰到的各種問題,同時我也會及時分享和推送各種最新的Kafka使用心得。
致謝
非常感謝Kafka PMC成員、Kafka Committer王國璋對本書的大力支持。自開始編寫本書之日起,國璋兄就給予我很大的鼓勵與幫助,這也讓我堅定了傳播Kafka實戰心得的決心。
感謝騰訊AI平臺助理總經理王迪先生和我的好友賈興華,你們對本書的評價之高實在是過譽了,但也令本人倍感振奮。
感謝我的前同事、新浪微博技術專家付穩。付總對本書整體結構和具體知識點的建議發人深省,其獨到的行業見解令人佩服。
非常感謝電子工業出版社的編輯付睿女士。她細緻、專業、嚴謹的工作作風深深地感染了我,在本書編寫過程中她總是能及時地就書中的內容給出合理的建議和指導。
另外,我還想感謝一下我的家人,特別是我的妻子劉丹女士。過去一年中正是你堅定的支持和默默的付出才成就我撰寫本書。對於你偶爾在學術上給予的提點我既感到驚訝,同時也欣慰不已。這為我漫長枯燥的寫書過程平添了很多溫暖。
最後,非常感謝本書的每一位讀者。本人已經在寫作過程中收穫良多,我衷心希望你們在閱讀本書時也有大呼過癮的感覺。另外,我在“知乎”(ID:huxihx)的Kafka專欄以及StackOverflow網站上也會盡力回答關於Kafka的各類問題,希望通過這些途徑可以和讀者進行更加深入的交流。
由於本人水平有限,書中難免有遺漏和疏忽,也懇請各位讀者多多指正。

胡夕
2018年3月15日於北京
個人博客:https://www.cnblogs.com/huxi2b/
微信公眾號:大數據Kafka技術分享
電子郵箱:huxi_2b@hotmail.com

目次

目錄
第1章 認識Apache Kafka 1
1.1 Kafka快速入門 1
1.1.1 下載並解壓縮Kafka二進制代碼壓縮包文件 2
1.1.2 啟動服務器 3
1.1.3 創建topic 3
1.1.4 發送消息 4
1.1.5 消費消息 4
1.2 消息引擎系統 5
1.2.1 消息設計 6
1.2.2 傳輸協議設計 6
1.2.3 消息引擎範型 6
1.2.4 Java消息服務 8
1.3 Kafka概要設計 8
1.3.1 吞吐量/延時 8
1.3.2 消息持久化 11
1.3.3 負載均衡和故障轉移 12
1.3.4 伸縮性 13
1.4 Kafka基本概念與術語 13
1.4.1 消息 14
1.4.2 topic和partition 16
1.4.3 offset 17
1.4.4 replica 18
1.4.5 leader和follower 18
1.4.6 ISR 19
1.5 Kafka使用場景 20
1.5.1 消息傳輸 20
1.5.2 網站行為日誌追蹤 20
1.5.3 審計數據收集 20
1.5.4 日誌收集 20
1.5.5 Event Sourcing 21
1.5.6 流式處理 21
1.6 本章小結 21
第2章 Kafka發展歷史 22
2.1 Kafka的歷史 22
2.1.1 背景 22
2.1.2 Kafka橫空出世 23
2.1.3 Kafka開源 24
2.2 Kafka版本變遷 25
2.2.1 Kafka的版本演進 25
2.2.2 Kafka的版本格式 26
2.2.3 新版本功能簡介 26
2.2.4 舊版本功能簡介 31
2.3 如何選擇Kafka版本 35
2.3.1 根據功能場景 35
2.3.2 根據客戶端使用場景 35
2.4 Kafka與Confluent 36
2.5 本章小結 37
第3章 Kafka線上環境部署 38
3.1 集群環境規劃 38
3.1.1 操作系統的選型 38
3.1.2 磁盤規劃 40
3.1.3 磁盤容量規劃 42
3.1.4 內存規劃 43
3.1.5 CPU規劃 43
3.1.6 帶寬規劃 44
3.1.7 典型線上環境配置 45
3.2 偽分布式環境安裝 45
3.2.1 安裝Java 46
3.2.2 安裝ZooKeeper 47
3.2.3 安裝單節點Kafka集群 48
3.3 多節點環境安裝 49
3.3.1 安裝多節點ZooKeeper集群 50
3.3.2 安裝多節點Kafka 54
3.4 驗證部署 55
3.4.1 測試topic創建與刪除 55
3.4.2 測試消息發送與消費 57
3.4.3 生產者吞吐量測試 58
3.4.4 消費者吞吐量測試 58
3.5 參數設置 59
3.5.1 broker端參數 59
3.5.2 topic級別參數 62
3.5.3 GC參數 63
3.5.4 JVM參數 64
3.5.5 OS參數 64
3.6 本章小結 65
第4章 producer開發 66
4.1 producer概覽 66
4.2 構造producer 69
4.2.1 producer程序實例 69
4.2.2 producer主要參數 75
4.3 消息分區機制 80
4.3.1 分區策略 80
4.3.2 自定義分區機制 80
4.4 消息序列化 83
4.4.1 默認序列化 83
4.4.2 自定義序列化 84
4.5 producer攔截器 87
4.6 無消息丟失配置 90
4.6.1 producer端配置 91
4.6.2 broker端配置 92
4.7 消息壓縮 92
4.7.1 Kafka支持的壓縮算法 93
4.7.2 算法性能比較與調優 93
4.8 多線程處理 95
4.9 舊版本producer 96
4.10 本章小結 98
第5章 consumer開發 99
5.1 consumer概覽 99
5.1.1 消費者(consumer) 99
5.1.2 消費者組(consumer group) 101
5.1.3 位移(offset) 102
5.1.4 位移提交 103
5.1.5 __consumer_offsets 104
5.1.6 消費者組重平衡(consumer group rebalance) 106
5.2 構建consumer 106
5.2.1 consumer程序實例 106
5.2.2 consumer腳本命令 111
5.2.3 consumer主要參數 112
5.3 訂閱topic 115
5.3.1 訂閱topic列表 115
5.3.2 基於正則表達式訂閱topic 115
5.4 消息輪詢 115
5.4.1 poll內部原理 115
5.4.2 poll使用方法 116
5.5 位移管理 118
5.5.1 consumer位移 119
5.5.2 新版本consumer位移管理 120
5.5.3 自動提交與手動提交 121
5.5.4 舊版本consumer位移管理 123
5.6 重平衡(rebalance) 123
5.6.1 rebalance概覽 123
5.6.2 rebalance觸發條件 124
5.6.3 rebalance分區分配 124
5.6.4 rebalance generation 126
5.6.5 rebalance協議 126
5.6.6 rebalance流程 127
5.6.7 rebalance監聽器 128
5.7 解序列化 130
5.7.1 默認解序列化器 130
5.7.2 自定義解序列化器 131
5.8 多線程消費實例 132
5.8.1 每個線程維護一個KafkaConsumer 133
5.8.2 單KafkaConsumer實例+多worker線程 135
5.8.3 兩種方法對比 140
5.9 獨立consumer 141
5.10 舊版本consumer 142
5.10.1 概覽 142
5.10.2 high-level consumer 143
5.10.3 low-level consumer 147
5.11 本章小結 153
第6章 Kafka設計原理 154
6.1 broker端設計架構 154
6.1.1 消息設計 155
6.1.2 集群管理 166
6.1.3 副本與ISR設計 169
6.1.4 水印(watermark)和leader epoch 174
6.1.5 日誌存儲設計 185
6.1.6 通信協議(wire protocol) 194
6.1.7 controller設計 205
6.1.8 broker請求處理 216
6.2 producer端設計 219
6.2.1 producer端基本數據結構 219
6.2.2 工作流程 220
6.3 consumer端設計 223
6.3.1 consumer group狀態機 223
6.3.2 group管理協議 226
6.3.3 rebalance場景剖析 227
6.4 實現精確一次處理語義 230
6.4.1 消息交付語義 230
6.4.2 冪等性producer(idempotent producer) 231
6.4.3 事務(transaction) 232
6.5 本章小結 234
第7章 管理Kafka集群 235
7.1 集群管理 235
7.1.1 啟動broker 235
7.1.2 關閉broker 236
7.1.3 設置JMX端口 237
7.1.4 增加broker 238
7.1.5 升級broker版本 238
7.2 topic管理 241
7.2.1 創建topic 241
7.2.2 刪除topic 243
7.2.3 查詢topic列表 244
7.2.4 查詢topic詳情 244
7.2.5 修改topic 245
7.3 topic動態配置管理 246
7.3.1 增加topic配置 246
7.3.2 查看topic配置 247
7.3.3 刪除topic配置 248
7.4 consumer相關管理 248
7.4.1 查詢消費者組 248
7.4.2 重設消費者組位移 251
7.4.3 刪除消費者組 256
7.4.4 kafka-consumer-offset-checker 257
7.5 topic分區管理 258
7.5.1 preferred leader選舉 258
7.5.2 分區重分配 260
7.5.3 增加副本因子 263
7.6 Kafka常見腳本工具 264
7.6.1 kafka-console-producer腳本 264
7.6.2 kafka-console-consumer腳本 265
7.6.3 kafka-run-class腳本 267
7.6.4 查看消息元數據 268
7.6.5 獲取topic當前消息數 270
7.6.6 查詢__consumer_offsets 271
7.7 API方式管理集群 273
7.7.1 服務器端API管理topic 273
7.7.2 服務器端API管理位移 275
7.7.3 客戶端API管理topic 276
7.7.4 客戶端API查看位移 280
7.7.5 0.11.0.0版本客戶端API 281
7.8 MirrorMaker 285
7.8.1 概要介紹 285
7.8.2 主要參數 286
7.8.3 使用實例 287
7.9 Kafka安全 288
7.9.1 SASL+ACL 289
7.9.2 SSL加密 297
7.10 常見問題 301
7.11 本章小結 304
第8章 監控Kafka集群 305
8.1 集群健康

您曾經瀏覽過的商品

購物須知

大陸出版品因裝訂品質及貨運條件與台灣出版品落差甚大,除封面破損、內頁脫落等較嚴重的狀態,其餘商品將正常出貨。

特別提醒:部分書籍附贈之內容(如音頻mp3或影片dvd等)已無實體光碟提供,需以QR CODE 連結至當地網站註冊“並通過驗證程序”,方可下載使用。

無現貨庫存之簡體書,將向海外調貨:
海外有庫存之書籍,等候約45個工作天;
海外無庫存之書籍,平均作業時間約60個工作天,然不保證確定可調到貨,尚請見諒。

為了保護您的權益,「三民網路書店」提供會員七日商品鑑賞期(收到商品為起始日)。

若要辦理退貨,請在商品鑑賞期內寄回,且商品必須是全新狀態與完整包裝(商品、附件、發票、隨貨贈品等)否則恕不接受退貨。

優惠價:87 465
海外經銷商無庫存,到貨日平均30天至45天

暢銷榜

客服中心

收藏

會員專區