Kafka權(quán)威指南(圖靈出品)

2021-04-25 20:13 更新


Kafka權(quán)威指南(圖靈出品)


Neha Narkhede,Gwen Shapira,Todd Palino 著

  • 出版社: 人民郵電出版社
  • ISBN:9787115473271
  • 版次:1
  • 商品編碼:12270295
  • 品牌:iTuring
  • 包裝:平裝
  • 開本:16開
  • 出版時(shí)間:2018-01-01
  • 用紙:膠版紙


點(diǎn)此購買

編輯推薦

  每個(gè)應(yīng)用程序都會(huì)產(chǎn)生數(shù)據(jù),包括日志消息、度量指標(biāo)、用戶活動(dòng)記錄、響應(yīng)消息等。如何移動(dòng)數(shù)據(jù),幾乎變得與數(shù)據(jù)本身一樣重要。如果你是架構(gòu)師、開發(fā)者或者產(chǎn)品工程師,同時(shí)也是Apache Kafka新手,那么這本實(shí)踐指南將會(huì)幫助你成為流式平臺(tái)上處理實(shí)時(shí)數(shù)據(jù)的專家。
  本書由出身于LinkedIn的Kafka核心作者和一線技術(shù)人員共同執(zhí)筆,詳細(xì)介紹了如何部署Kafka集群、開發(fā)可靠的基于事件驅(qū)動(dòng)的微服務(wù),以及基于Kafka平臺(tái)構(gòu)建可伸縮的流式應(yīng)用程序。通過詳盡示例,你將會(huì)了解到Kafka的設(shè)計(jì)原則、可靠性保證、關(guān)鍵API,以及復(fù)制協(xié)議、控制器和存儲(chǔ)層等架構(gòu)細(xì)節(jié)。
  ● 了解發(fā)布和訂閱消息模型以及該模型如何被應(yīng)用在大數(shù)據(jù)生態(tài)系統(tǒng)中
  ● 學(xué)習(xí)使用Kafka生產(chǎn)者和消費(fèi)者來生成消息和讀取消息
  ● 了解Kafka保證可靠性數(shù)據(jù)傳遞的模式和場景需求
  ● 使用Kafka構(gòu)建數(shù)據(jù)管道和應(yīng)用程序的zuijia實(shí)踐
  ● 在生產(chǎn)環(huán)境中管理Kafka,包括監(jiān)控、調(diào)優(yōu)和維護(hù)
  ● 了解Kafka的關(guān)鍵度量指標(biāo)
  ● 探索Kafka如何成為流式處理利器


內(nèi)容簡介

  本書是關(guān)于Kafka的全面教程,主要內(nèi)容包括:Kafka相對于其他消息隊(duì)列系統(tǒng)的優(yōu)點(diǎn),主要是它如何完美匹配大數(shù)據(jù)平臺(tái)開發(fā);詳解Kafka內(nèi)部設(shè)計(jì);用Kafka構(gòu)建應(yīng)用的zuijia實(shí)踐;理解在生產(chǎn)中部署Kafka的zuijia方式;如何確保Kafka集群的安全。


作者簡介

  Neha Narkhede, Confluent聯(lián)合創(chuàng)始人、CTO,曾在LinkedIn主導(dǎo)基于Kafka和Apache Samza構(gòu)建流式基礎(chǔ)設(shè)施,是Kafka作者之一。

  Gwen Shapira, Confluent系統(tǒng)架構(gòu)師,幫助客戶構(gòu)建基于Kafka的系統(tǒng),在可伸縮數(shù)據(jù)架構(gòu)方面擁有十余年經(jīng)驗(yàn);曾任Cloudera公司解決方案架構(gòu)師。另著有《Hadoop應(yīng)用架構(gòu)》。

  Todd Palino, LinkedIn主任級SRE,負(fù)責(zé)部署管理大型的Kafka、Zookeeper和Samza集群。

  譯者簡介
  薛命燈,畢業(yè)于廈門大學(xué)軟件學(xué)院,十余年軟件開發(fā)和架構(gòu)經(jīng)驗(yàn),InfoQ高級社區(qū)編輯。譯有《硅谷革命》《生產(chǎn)微服務(wù)》等書。微信公眾號CodeDeep。



目錄

序  xiii
前言  xv
第1章 初識Kafka  1
1.1 發(fā)布與訂閱消息系統(tǒng)  1
1.1.1 如何開始  2
1.1.2 獨(dú)立的隊(duì)列系統(tǒng)  3
1.2 Kafka登場  4
1.2.1 消息和批次  4
1.2.2 模式  4
1.2.3 主題和分區(qū)  5
1.2.4 生產(chǎn)者和消費(fèi)者  5
1.2.5 broker和集群  6
1.2.6 多集群  7
1.3 為什么選擇Kafka  8
1.3.1 多個(gè)生產(chǎn)者  8
1.3.2 多個(gè)消費(fèi)者  8
1.3.3 基于磁盤的數(shù)據(jù)存儲(chǔ)  9
1.3.4 伸縮性  9
1.3.5 高性能  9
1.4 數(shù)據(jù)生態(tài)系統(tǒng)  9
1.5 起源故事  11
1.5.1 LinkedIn的問題  11
1.5.2 Kafka的誕生  12
1.5.3 走向開源  12
1.5.4 命名  13
1.6 開始Kafka之旅  13
第2章 安裝Kafka  14
2.1 要事先行  14
2.1.1 選擇操作系統(tǒng)  14
2.1.2 安裝Java  14
2.1.3 安裝Zookeeper  15
2.2 安裝Kafka Broker  17
2.3 broker配置  18
2.3.1 常規(guī)配置  18
2.3.2 主題的默認(rèn)配置  19
2.4 硬件的選擇  23
2.4.1 磁盤吞吐量  23
2.4.2 磁盤容量  23
2.4.3 內(nèi)存  23
2.4.4 網(wǎng)絡(luò)  24
2.4.5 CPU  24
2.5 云端的Kafka  24
2.6 Kafka集群  24
2.6.1 需要多少個(gè)broker  25
2.6.2 broker配置  25
2.6.3 操作系統(tǒng)調(diào)優(yōu)  26
2.7 生產(chǎn)環(huán)境的注意事項(xiàng)  28
2.7.1 垃圾回收器選項(xiàng)  28
2.7.2 數(shù)據(jù)中心布局  29
2.7.3 共享Zookeeper  29
2.8 總結(jié)  30
第3章 Kafka生產(chǎn)者——向Kafka寫入數(shù)據(jù)  31
3.1 生產(chǎn)者概覽  32
3.2 創(chuàng)建Kafka生產(chǎn)者  33
3.3 發(fā)送消息到Kafka  34
3.3.1 同步發(fā)送消息  35
3.3.2 異步發(fā)送消息  35
3.4 生產(chǎn)者的配置  36
3.5 序列化器  39
3.5.1 自定義序列化器  39
3.5.2 使用Avro序列化  41
3.5.3 在Kafka里使用Avro  42
3.6 分區(qū)  45
3.7 舊版的生產(chǎn)者API  46
3.8 總結(jié)  47
第4章 Kafka消費(fèi)者——從Kafka讀取數(shù)據(jù)  48
4.1 KafkaConsumer概念  48
4.1.1 消費(fèi)者和消費(fèi)者群組  48
4.1.2 消費(fèi)者群組和分區(qū)再均衡  51
4.2 創(chuàng)建Kafka 消費(fèi)者  52
4.3 訂閱主題  53
4.4 輪詢  53
4.5 消費(fèi)者的配置  55
4.6 提交和偏移量  57
4.6.1 自動(dòng)提交  58
4.6.2 提交當(dāng)前偏移量  59
4.6.3 異步提交  59
4.6.4 同步和異步組合提交  61
4.6.5 提交特定的偏移量  61
4.7 再均衡監(jiān)聽器  62
4.8 從特定偏移量處開始處理記錄  64
4.9 如何退出  66
4.10 反序列化器  67
4.11 獨(dú)立消費(fèi)者——為什么以及怎樣使用沒有群組的消費(fèi)者  71
4.12 舊版的消費(fèi)者API  71
4.13 總結(jié)  72
第5章 深入Kafka  73
5.1 集群成員關(guān)系  73
5.2 控制器  74
5.3 復(fù)制  74
5.4 處理請求  76
5.4.1 生產(chǎn)請求  78
5.4.2 獲取請求  78
5.4.3 其他請求  80
5.5 物理存儲(chǔ)  81
5.5.1 分區(qū)分配  81
5.5.2 文件管理  82
5.5.3 文件格式  83
5.5.4 索引  84
5.5.5 清理  84
5.5.6 清理的工作原理  84
5.5.7 被刪除的事件  86
5.5.8 何時(shí)會(huì)清理主題  86
5.6 總結(jié)  86
第6章 可靠的數(shù)據(jù)傳遞  87
6.1 可靠性保證  87
6.2 復(fù)制  88
6.3 broker配置  89
6.3.1 復(fù)制系數(shù)  89
6.3.2 不完全的首領(lǐng)選舉  90
6.3.3 最少同步副本  91
6.4 在可靠的系統(tǒng)里使用生產(chǎn)者  92
6.4.1 發(fā)送確認(rèn)  92
6.4.2 配置生產(chǎn)者的重試參數(shù)  93
6.4.3 額外的錯(cuò)誤處理  94
6.5 在可靠的系統(tǒng)里使用消費(fèi)者  94
6.5.1 消費(fèi)者的可靠性配置  95
6.5.2 顯式提交偏移量  95
6.6 驗(yàn)證系統(tǒng)可靠性  97
6.6.1 配置驗(yàn)證  98
6.6.2 應(yīng)用程序驗(yàn)證  98
6.6.3 在生產(chǎn)環(huán)境監(jiān)控可靠性  99
6.7 總結(jié)  100
第7章 構(gòu)建數(shù)據(jù)管道  101
7.1 構(gòu)建數(shù)據(jù)管道時(shí)需要考慮的問題  102
7.1.1 及時(shí)性  102
7.1.2 可靠性  102
7.1.3 高吞吐量和動(dòng)態(tài)吞吐量  103
7.1.4 數(shù)據(jù)格式  103
7.1.5 轉(zhuǎn)換  104
7.1.6 安全性  104
7.1.7 故障處理能力  104
7.1.8 耦合性和靈活性  105
7.2 如何在Connect API和客戶端API之間作出選擇  105
7.3 Kafka Connect  106
7.3.1 運(yùn)行Connect  106
7.3.2 連接器示例——文件數(shù)據(jù)源和文件數(shù)據(jù)池  107
7.3.3 連接器示例——從MySQL到ElasticSearch  109
7.3.4 深入理解Connect  114
7.4 Connect之外的選擇  116
7.4.1 用于其他數(shù)據(jù)存儲(chǔ)的攝入框架  116
7.4.2 基于圖形界面的ETL 工具  117
7.4.3 流式處理框架  117
7.5 總結(jié)  117
第8章 跨集群數(shù)據(jù)鏡像  118
8.1 跨集群鏡像的使用場景  118
8.2 多集群架構(gòu)  119
8.2.1 跨數(shù)據(jù)中心通信的一些現(xiàn)實(shí)情況  119
8.2.2 Hub和Spoke架構(gòu)  120
8.2.3 雙活架構(gòu)  121
8.2.4 主備架構(gòu)  123
8.2.5 延展集群  127
8.3 Kafka的MirrorMaker  128
8.3.1 如何配置  129
8.3.2 在生產(chǎn)環(huán)境部署MirrorMaker  130
8.3.3 MirrorMaker調(diào)優(yōu)  132
8.4 其他跨集群鏡像方案  134
8.4.1 優(yōu)步的uReplicator  134
8.4.2 Confluent的Replicator  135
8.5 總結(jié)  135
第9章 管理Kafka  136
9.1 主題操作  136
9.1.1 創(chuàng)建主題  137
9.1.2 增加分區(qū)  138
9.1.3 刪除主題  138
9.1.4 列出集群里的所有主題  139
9.1.5 列出主題詳細(xì)信息  139
9.2 消費(fèi)者群組  140
9.2.1 列出并描述群組  140
9.2.2 刪除群組  142
9.2.3 偏移量管理  142
9.3 動(dòng)態(tài)配置變更  143
9.3.1 覆蓋主題的默認(rèn)配置  143
9.3.2 覆蓋客戶端的默認(rèn)配置  145
9.3.3 列出被覆蓋的配置  145
9.3.4 移除被覆蓋的配置  146
9.4 分區(qū)管理  146
9.4.1 首選的首領(lǐng)選舉  146
9.4.2 修改分區(qū)副本  147
9.4.3 修改復(fù)制系數(shù)  150
9.4.4 轉(zhuǎn)儲(chǔ)日志片段  151
9.4.5 副本驗(yàn)證  152
9.5 消費(fèi)和生產(chǎn)  153
9.5.1 控制臺(tái)消費(fèi)者  153
9.5.2 控制臺(tái)生產(chǎn)者  155
9.6 客戶端ACL  157
9.7 不安全的操作  157
9.7.1 移動(dòng)集群控制器  157
9.7.2 取消分區(qū)重分配  157
9.7.3 移除待刪除的主題  158
9.7.4 手動(dòng)刪除主題  158
9.8 總結(jié)  159
第10章 監(jiān)控Kafka  160
10.1 度量指標(biāo)基礎(chǔ)  160
10.1.1 度量指標(biāo)在哪里  160
10.1.2 內(nèi)部或外部度量  161
10.1.3 應(yīng)用程序健康檢測  161
10.1.4 度量指標(biāo)的覆蓋面  161
10.2 broker的度量指標(biāo)  162
10.2.1 非同步分區(qū)  162
10.2.2 broker度量指標(biāo)  166
10.2.3 主題和分區(qū)的度量指標(biāo)  173
10.2.4 Java虛擬機(jī)監(jiān)控  174
10.2.5 操作系統(tǒng)監(jiān)控  175
10.2.6 日志  176
10.3 客戶端監(jiān)控  177
10.3.1 生產(chǎn)者度量指標(biāo)  177
10.3.2 消費(fèi)者度量指標(biāo)  179
10.3.3 配額  181
10.4 延時(shí)監(jiān)控  182
10.5 端到端監(jiān)控  183
10.6 總結(jié)  183
第11章 流式處理  184
11.1 什么是流式處理  185
11.2 流式處理的一些概念  186
11.2.1 時(shí)間  187
11.2.2 狀態(tài)  188
11.2.3 流和表的二元性  188
11.2.4 時(shí)間窗口  189
11.3 流式處理的設(shè)計(jì)模式  190
11.3.1 單個(gè)事件處理  191
11.3.2 使用本地狀態(tài)  191
11.3.3 多階段處理和重分區(qū)  193
11.3.4 使用外部查找——流和表的連接  193
11.3.5 流與流的連接  195
11.3.6 亂序的事件  195
11.3.7 重新處理  196
11.4 Streams示例  197
11.4.1 字?jǐn)?shù)統(tǒng)計(jì)  197
11.4.2 股票市場統(tǒng)計(jì)  199
11.4.3 填充點(diǎn)擊事件流  201
11.5 Kafka Streams的架構(gòu)概覽  202
11.5.1 構(gòu)建拓?fù)洹 ?02
11.5.2 對拓?fù)溥M(jìn)行伸縮  203
11.5.3 從故障中存活下來  205
11.6 流式處理使用場景  205
11.7 如何選擇流式處理框架  206
11.8 總結(jié)  208
附錄A 在其他操作系統(tǒng)上安裝Kafka  209
作者介紹  214
封面介紹  214


前言/序言

  給予一個(gè)技術(shù)書籍作者最好的贊賞莫過于這句話——“如果在一開始接觸這門技術(shù)時(shí)能看到這本書就好了”。在開始寫這本書的時(shí)候,我們就是以這句話作為寫作目標(biāo)。我們開發(fā)Kafka,在生產(chǎn)環(huán)境運(yùn)行 Kafka,幫助很多公司構(gòu)建基于 Kafka 的系統(tǒng),幫助他們管理數(shù)據(jù)管道,積累了很多經(jīng)驗(yàn),但也困惑:“應(yīng)該把哪些東西分享給 Kafka 新用戶,讓他們從新手變成專家?”這本書就是我們?nèi)粘9ぷ髯詈玫膶懻眨哼\(yùn)行 Kafka 并幫助其他人更好地使用 Kafka。
  我們相信,書中提供的這些內(nèi)容能夠幫助 Kafka 用戶在生產(chǎn)環(huán)境運(yùn)行 Kafka 以及基于Kafka 構(gòu)建健壯的高性能應(yīng)用程序。我們列舉了一些非常流行的應(yīng)用場景:用于事件驅(qū)動(dòng)微服務(wù)系統(tǒng)的消息總線、流式應(yīng)用和大規(guī)模數(shù)據(jù)管道。這本書通俗易懂,能夠幫助每一個(gè)Kafka 用戶在任意的架構(gòu)或應(yīng)用場景里使用好 Kafka。書中介紹了如何安裝和配置 Kafka、如何使用 Kafka API、Kafka 的設(shè)計(jì)原則和可靠性保證,以及 Kafka 的一些架構(gòu)細(xì)節(jié),如復(fù)制協(xié)議、控制器和存儲(chǔ)層。我們相信,Kafka 的設(shè)計(jì)原理和內(nèi)部架構(gòu)不僅會(huì)成為分布式系統(tǒng)構(gòu)建者的興趣所在,對于那些在生產(chǎn)環(huán)境部署 Kafka 或使用 Kafka 構(gòu)建應(yīng)用程序的人來說也是非常有用的。越是了解 Kafka,就越是能夠更好地作出權(quán)衡。
  在軟件工程里,條條道路通羅馬,每一個(gè)問題都有多種解決方案。Kafka 為專家級別的用戶提供了巨大的靈活性,而新手則需要克服陡峭的學(xué)習(xí)曲線才能成為專家。Kafka 通常會(huì)告訴你如何使用某個(gè)功能特性,但不會(huì)告訴你為什么要用它或者為什么不該用它。我們會(huì)盡可能地解釋我們的設(shè)計(jì)決策和權(quán)衡背后的緣由,以及用戶在哪些情況下應(yīng)該或不應(yīng)該使用 Kafka 提供的特性。
  讀者對象
  這本書是為使用 Kafka API 開發(fā)應(yīng)用程序的工程師和在生產(chǎn)環(huán)境安裝、配置、調(diào)優(yōu)、監(jiān)控Kafka 的運(yùn)維工程師(也可以叫作 SRE、運(yùn)維人員或系統(tǒng)管理員)而寫的。我們也考慮到了數(shù)據(jù)架構(gòu)師和數(shù)據(jù)工程師,他們負(fù)責(zé)設(shè)計(jì)和構(gòu)建整個(gè)組織的數(shù)據(jù)基礎(chǔ)架構(gòu)。某些章節(jié)(特別是第 3 章、第 4 章和第 11 章)主要面向 Java 開發(fā)人員,并假設(shè)讀者已經(jīng)熟悉基本的Java 語言編程,比如異常處理和并發(fā)編程。其他章節(jié)(特別是第 2 章、第 8 章、第 9 章和第 10 章)則假設(shè)讀者在 Linux 的運(yùn)行、存儲(chǔ)和網(wǎng)絡(luò)配置方面有一定的經(jīng)驗(yàn)。本書的其余部分則討論了一般性的軟件架構(gòu),不要求讀者具備特定的知識。
  另一類可能對本書感興趣的人是那些經(jīng)理或架構(gòu)師,他們不直接使用 Kafka,但會(huì)與使用Kafka 的工程師打交道。他們有必要了解 Kafka 所能提供的保證機(jī)制,以及他們的同事在構(gòu)建基于 Kafka 的系統(tǒng)時(shí)所作出的權(quán)衡。這本書可以成為企業(yè)管理人員的利器,確保他們的工程師在 Kafka 方面訓(xùn)練有素,讓他們的團(tuán)隊(duì)了解他們本該知道的知識。
  排版約定
  本書使用了下列排版約定。
  黑體
  表示新術(shù)語或重點(diǎn)強(qiáng)調(diào)的內(nèi)容。
  等寬字體(constant width)
  表示程序片段,以及正文中出現(xiàn)的變量、函數(shù)名、數(shù)據(jù)庫、數(shù)據(jù)類型、環(huán)境變量、語句和關(guān)鍵字等。
  加粗等寬字體(constant width bold)
  表示應(yīng)該由用戶輸入的命令或其他文本。
  等寬斜體(constant width italic)
  表示應(yīng)該由用戶輸入的值或根據(jù)上下文確定的值替換的文本。
  使用代碼示例
  本書是要幫你完成工作的。一般來說,如果本書提供了示例代碼,你可以把它用在你的程序或文檔中。除非你使用了很大一部分代碼,否則無需聯(lián)系我們獲得許可。比如,用本書的幾個(gè)代碼片段寫一個(gè)程序就無需獲得許可,銷售或分發(fā) O’Reilly 圖書的示例光盤則需要獲得許可;引用本書中的示例代碼回答問題無需獲得許可,將書中大量的代碼放到你的產(chǎn)品文檔中則需要獲得許可。
  我們很希望但并不強(qiáng)制要求你在引用本書內(nèi)容時(shí)加上引用說明。引用說明一般包括書名、作者、出版社和 ISBN。例如“Kafka 權(quán)威指南,作者 Neha Narkhede、Gwen Shapira 和 Todd Palino(O’Reilly),版權(quán)歸 Neha Narkhede、Gwen Shapira 和 Todd Palino 所有,978-1-4919-3616-0”。
  如果你覺得自己對示例代碼的用法超出了上述許可的范圍,歡迎你通過 permissions@ oreilly.com 與我們聯(lián)系。
  O’Reilly Safari
  Safari(原來叫 Safari Books Online)是面向企業(yè)、政府、教育從業(yè)者和個(gè)人的會(huì)員制培訓(xùn)和參考咨詢平臺(tái)。
  些資源來自 250 多家出版機(jī)構(gòu),其中包括 O’Reilly Media、Harvard Business Review、 Prentice Hall Professional、Addison-Wesley Professional、Microsoft Press、Sams、Que、 Peachpit Press、Adobe、Focal Press、Cisco Press、John Wiley & Sons、Syngress、Morgan Kaufmann、IBM Redbooks、Packt、Adobe Press、FT Press、Apress、Manning、New Riders、McGraw-Hill、Jones & Bartlett 和 Course Technology。
  更多信息,請?jiān)L問 http://oreilly.com/safari。
  聯(lián)系我們
  請把對本書的評價(jià)和問題發(fā)給出版社。
  美國:
  O’Reilly Media, Inc.
  1005 Gravenstein Highway North Sebastopol, CA 95472
  中國:
  北京市西城區(qū)西直門南大街 2 號成銘大廈 C 座 807 室(100035)奧萊利技術(shù)咨詢(北京)有限公司
  O’Reilly 的每一本書都有專屬網(wǎng)頁,你可以在那兒找到本書的相關(guān)信息,包括勘誤表、示例代碼以及其他信息。本書的網(wǎng)站地址是 http://oreil.ly/2tVmYjk。
  對于本書的評論和技術(shù)性問題,請發(fā)送電子郵件到:bookquestions@oreilly.com
  要了解更多 O’Reilly 圖書、培訓(xùn)課程、會(huì)議和新聞的信息,請?jiān)L問以下網(wǎng)站:
  http://www.oreilly.com
  我們在 Facebook 的地址如下:http://facebook.com/oreilly
  請關(guān)注我們的 Twitter 動(dòng)態(tài):http://twitter.com/oreillymedia
  我們的 YouTube 視頻地址如下:http://www.youtube.com/oreillymedia
  致謝
  我們想感謝眾多為 Kafka 和它的生態(tài)系統(tǒng)做出貢獻(xiàn)的人。如果沒有他們艱辛的工作,就不會(huì)有這本書的問世。特別感謝 Jay Kreps、Neha Narkhede 和 Jun Rao,以及他們在 LinkedIn的同事和領(lǐng)導(dǎo),他們創(chuàng)造了 Kafka,并把它捐獻(xiàn)給了 Apache 軟件基金會(huì)。
  很多人在早前為本書提供了很多有價(jià)值的反饋,我們非常感激他們?yōu)榇烁冻龅臅r(shí)間,也很欽佩他們的專業(yè)能力,這些人包括:Apurva Mehta、Arseniy Tashoyan、Dylan Scott、 Ewen Cheslack-Postava、Grant Henke、Ismael Juma、James Cheng、Jason Gustafson、Jeff Holoman、Joel Koshy、Jonathan Seidman、Matthias Sax、Michael Noll、Paolo Castagna。我們還想感謝眾多在網(wǎng)站上留下評論和反饋的讀者。
  很多審稿人提供了有價(jià)值的意見,極大改進(jìn)了本書的質(zhì)量。書中的遺留錯(cuò)誤理應(yīng)由我們作者負(fù)責(zé)。
  我們要感謝 O’Reilly 編輯 Shannon Cutt 的鼓勵(lì)、耐心和深謀遠(yuǎn)慮。對于一個(gè)作者來說,與O’Reilly 一起合作是一段非凡的經(jīng)歷——他們所提供的支持,從工具到簽名售書,都是無可匹敵的。我們感謝每一個(gè)參與本書相關(guān)工作的人,很感激他們愿意與我們一起工作。
  另外,我們也想感謝我們的領(lǐng)導(dǎo)和同事,感謝他們在我們寫作這本書的過程中給予的幫助和鼓勵(lì)。
  Gwen 要感謝她的丈夫 Omer Shapira,在她寫書的幾個(gè)月時(shí)間里,他一直給予她支持和耐心。還有她的父親 Lior Shapira,讓她學(xué)會(huì)了如何在困難面前不輕言放棄,盡管這種生活哲學(xué)總是讓她麻煩不斷。
  Todd 要感謝他的妻子 Marcy 和女兒 Bella 及 Kaylee,她們一直在背后默默地支持他。因?yàn)橛辛怂齻兊闹С?,他才有更多的時(shí)間寫作,才能厘清思路,堅(jiān)持到最后。

點(diǎn)此購買 


以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號