Kafka基礎架構(gòu)與設計_第1頁
Kafka基礎架構(gòu)與設計_第2頁
Kafka基礎架構(gòu)與設計_第3頁
Kafka基礎架構(gòu)與設計_第4頁
Kafka基礎架構(gòu)與設計_第5頁
已閱讀5頁,還剩238頁未讀, 繼續(xù)免費閱讀

付費閱讀全文

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領

文檔簡介

內(nèi)容簡介

本書主要內(nèi)容包括Kafka入門與基礎、Kafka的生產(chǎn)者、Kafka的消費者、深入Kafka消費者、Kafka

的再均衡與分區(qū)分配、Kafka的日志與事務、Spark基礎以及Kafka與Spark的集成及應用等。

本書由多名一線研發(fā)工程師聯(lián)合編寫,結(jié)構(gòu)清晰、案例豐富、通俗易懂、實用性強,適合作為高等

院校計算機相關專業(yè)的程序設計教材,也可作為社會培訓學校的培訓教材。

圖書在版編目(CIP)數(shù)據(jù)

Kafka基礎架構(gòu)與設計/智酷道捷內(nèi)容與產(chǎn)品中心編著.—北京:

中國鐵道出版社有限公司,2022.3

ISBN978-7-113-28829-7

Ⅰ.①K…Ⅱ.①智…Ⅲ.①分布式操作系統(tǒng)Ⅳ.①TP316.4

中國版本圖書館CIP數(shù)據(jù)核字(2022)第020319號

書名:Kafka基礎架構(gòu)與設計

作者:智酷道捷內(nèi)容與產(chǎn)品中心

策劃:汪敏編輯部電話:(010)51873628

責任編輯:汪敏?包寧

封面設計:尚明龍

責任校對:孫?玫

責任印制:樊啟鵬

出版發(fā)行:中國鐵道出版社有限公司(100054,北京市西城區(qū)右安門西街8號)

網(wǎng)址:/51eds/

印刷:三河市宏盛印務有限公司

版次:2022年3月第1版2022年3月第1次印刷

開本:850mm×1168mm1/16印張:15字數(shù):401千

書號:ISBN978-7-113-28829-7

定價:42.00元

版權(quán)所有?侵權(quán)必究

凡購買鐵道版圖書,如有印制質(zhì)量問題,請與本社教材圖書營銷部聯(lián)系調(diào)換。電話:(010)63550836

打擊盜版舉報電話:(010)63549461

前言

Kafka是由Apache軟件基金會開發(fā)的一個開源流處理平臺,它是一種高吞吐量的分布式

發(fā)布訂閱消息系統(tǒng),可以處理消費者在網(wǎng)站中的所有動作流數(shù)據(jù)。這些動作(瀏覽網(wǎng)頁、搜索

和其他行為)是現(xiàn)今用戶上網(wǎng)的常用操作,是了解人們社會行為的關鍵因素,而動作流數(shù)據(jù)通

常是由于吞吐量的要求而通過處理日志和日志聚合來解決的。對于像Hadoop一樣要求實時處

理數(shù)據(jù)的日志數(shù)據(jù)和離線分析系統(tǒng),Kafka是一個可行的解決方案。

本書以“理論+實戰(zhàn)”的方式編寫,共包含40多個實例。首先從Kafka的基本概念入手,

主要從生產(chǎn)端、消費端、服務端三個方面進行全面闡述,內(nèi)容包括Kafka入門與基礎、Kafka

的生產(chǎn)者、Kafka的消費者、深入Kafka消費者、Kafka的再均衡與分區(qū)分配、Kafka的日志與

事務、Spark基礎以及Kafka與Spark的集成及應用等。雖然Kafka的內(nèi)核是使用Scala語言編

寫的,但是本書基本以Java語言作為主要的示例語言,以方便絕大多數(shù)讀者的理解。

本書的每一個知識點都配有同步教學視頻,視頻和圖書完全同步,能幫助讀者快速而全面

地了解每一個知識點的內(nèi)容。本書還免費提供所有案例的源代碼、教學PPT、教學設計及其他

資源,還有和每章內(nèi)容配合使用的8套作業(yè)及難易程度不同的3套試卷,這些資源不僅能方便

讀者學習,更能為讀者以后的工作提供便利。掃描書中的二維碼即可獲得上述資源。

通過閱讀本書,你將:

?可以安裝、配置和運行Kafka;

?可以使用Kafka生產(chǎn)者和消費者來生產(chǎn)消息和消費消息;

?可以構(gòu)建序列化器和反序列化器;

?可以掌握Kafka的分區(qū)策略;

?可以掌握Kafka的日志存儲方式、冪等性和事務;

?可以掌握SparkStreaming的編程;

?可以掌握SparkStreaming、StructStreaming與Kafka的集成方法。

I

Kafka基礎架構(gòu)與設計

本書由北京智酷道捷教育科技有限公司組織多名一線研發(fā)工程師和重慶文理學院數(shù)學與

大數(shù)據(jù)學院的羅章濤老師聯(lián)合編寫。全書共8章,其中,羅章濤編寫了第1~3章(共計12萬

字),北京智酷道捷教育科技有限公司的研發(fā)工程師編寫了第4~8章(共計28萬字)。本書結(jié)

構(gòu)清晰、案例豐富、通俗易懂、實用性強,適合作為高等院校計算機相關專業(yè)的程序設計教材,

也可作為社會培訓學校的培訓教材。

本書配套有教學課件等文檔,讀者可從中國鐵道出版社有限公司網(wǎng)站(http://www.

/51eds)下載。

由于時間有限,書中難免有疏漏及不足之后,敬請廣大讀者批評指正!

編者

2021年11月

II

目錄

?第1章?Kafka入門與基礎..........................................................................................................1

1.1Kafka初識..........................................................................................................................1

1.1.1Kafka的官方解釋......................................................................................................1

1.1.2Kafka的整體架構(gòu)......................................................................................................2

1.1.3消息系統(tǒng)....................................................................................................................2

1.1.4常見的消息系統(tǒng).........................................................................................................3

1.1.5Kafka的設計理念......................................................................................................4

1.1.6Kafka的設計要點......................................................................................................5

1.1.7Kafka的應用場景......................................................................................................5

1.2Kafka的基本術(shù)語...............................................................................................................5

1.2.1Kafka的主要術(shù)語......................................................................................................5

1.2.2Kafka的第一類基本術(shù)語...........................................................................................6

1.2.3Kafka的第二類基本術(shù)語...........................................................................................9

1.3Kafka的安裝與部署..........................................................................................................12

1.3.1Kafka的環(huán)境準備....................................................................................................12

1.3.2Kafka在Linux上的安裝.........................................................................................12

1.3.3Kafka集群安裝的操作步驟......................................................................................13

1.4Kafka的集群規(guī)劃.............................................................................................................20

1.4.1Kafka的集群考慮....................................................................................................20

1.4.2Kafka服務端的主要參數(shù).........................................................................................20

小結(jié)...........................................................................................................................................20

習題...........................................................................................................................................21

?第2章?Kafka的生產(chǎn)者...........................................................................................................22

2.1Kafka生產(chǎn)者初識.............................................................................................................22

2.1.1主題的基本操作.......................................................................................................22

2.1.2Kafka發(fā)送消息的流程.............................................................................................26

2.1.3Kafka的內(nèi)部流程....................................................................................................27

2.1.4生產(chǎn)者的基本操作...................................................................................................27

2.2生產(chǎn)者的基本開發(fā)............................................................................................................28

2.2.1Kafka生產(chǎn)者客戶端支持的語言..............................................................................28

I

Kafka基礎架構(gòu)與設計目錄

2.2.2Kafka生產(chǎn)者的開發(fā)流程.........................................................................................28

2.2.3Kafka生產(chǎn)者分區(qū)策略.............................................................................................30

2.3生產(chǎn)者發(fā)送消息的方式.....................................................................................................33

2.3.1Kafka消息發(fā)送的方式.............................................................................................33

2.3.2Kafka的異常............................................................................................................34

2.3.3Kafka的生產(chǎn)者重要配置.........................................................................................40

2.4生產(chǎn)者的多線程開發(fā).........................................................................................................41

2.4.1Kafka的多線程使用場景.........................................................................................41

2.4.2Kafka的多線程開發(fā)方式.........................................................................................41

小結(jié)...........................................................................................................................................46

習題...........................................................................................................................................46

?第3章?Kafka的消費者...........................................................................................................47

3.1生產(chǎn)者的自定義組件.........................................................................................................47

3.1.1消息的發(fā)送流程.......................................................................................................47

3.1.2Kafka的自定義組件開發(fā).........................................................................................48

3.2Kafka消費者初識.............................................................................................................57

3.2.1Kafka消費者概述....................................................................................................57

3.2.2消費者與分區(qū)的關系................................................................................................58

3.2.3消費者的基本操作...................................................................................................58

3.2.4消費者offset............................................................................................................62

3.3消費者開發(fā)入門................................................................................................................63

3.4消費者的自定義組件.........................................................................................................68

小結(jié)...........................................................................................................................................71

習題...........................................................................................................................................71

?第4章?深入Kafka消費者......................................................................................................72

4.1序列化和反序列化............................................................................................................72

4.1.1認識Protobuf...........................................................................................................72

4.1.2Protobuf的安裝和序列化方法.................................................................................73

4.1.3Protobuf開發(fā)序列化和反序列化器..........................................................................76

4.2Kafka自動提交.................................................................................................................81

4.2.1Kafka的位移提交以及版本存在的問題...................................................................81

4.2.2Kafka的消息重復和消息丟失..................................................................................81

4.2.3Kafka消費的位移管理.............................................................................................82

4.2.4Kafka的位移提交方式.............................................................................................83

4.3Kafka手動提交.................................................................................................................85

4.3.1Kafka的手動提交方式和參數(shù)..................................................................................85

4.3.2Kafka的同步提交....................................................................................................88

4.3.3同步提交和異步提交的差異.....................................................................................94

II

目錄

4.3.4Kafka的異步提交....................................................................................................94

4.4Kafka控制消費者.............................................................................................................96

小結(jié)...........................................................................................................................................98

習題...........................................................................................................................................98

?第5章?Kafka的再均衡與分區(qū)分配........................................................................................99

5.1Kafka特定位移消費..........................................................................................................99

5.1.1Kafka的消費者位移重置.........................................................................................99

5.1.2Kafka的指定偏移量開發(fā)流程................................................................................100

5.2Kafka的再均衡...............................................................................................................104

5.2.1Kafka的再均衡和觸發(fā)條件....................................................................................105

5.2.2Kafka再均衡的generation和監(jiān)聽器.....................................................................105

5.3Kafka的分區(qū)策略...........................................................................................................108

5.3.1Kafka的分區(qū)分配策略...........................................................................................109

5.3.2Kafka的RangAssignor...........................................................................................109

5.3.3Kafka的RoundRobinAssignor...............................................................................110

5.3.4Kafka的StickyAssignor.........................................................................................111

5.3.5Kafka的自定義分區(qū)策略.......................................................................................113

小結(jié).........................................................................................................................................118

習題.........................................................................................................................................118

?第6章?Kafka的日志與事務..................................................................................................120

6.1Kafka日志存儲...............................................................................................................120

6.1.1Kafka的日志..........................................................................................................120

6.1.2Kafka的日志格式..................................................................................................120

6.1.3日志文件的存儲關系..............................................................................................123

6.1.4Kafka的日志回滾..................................................................................................125

6.1.5Kafka的日志查找..................................................................................................126

6.1.6Kafka的日志清理..................................................................................................128

6.2Kafka的可靠性...............................................................................................................130

6.2.1Kafka的可靠性機制...............................................................................................130

6.2.2LEO和HW的更新機制.........................................................................................131

6.2.3Kafka的HW與LEO更新流程.............................................................................132

6.3Kafka的冪等性...............................................................................................................133

6.3.1Kafka的消息語義..................................................................................................133

6.3.2Kafka的冪等性原理...............................................................................................134

6.4Kafka的事務...................................................................................................................135

6.4.1Kafka的事務概念..................................................................................................135

6.4.2生產(chǎn)者和消費者并存的事務場景...........................................................................140

小結(jié).........................................................................................................................................142

III

Kafka基礎架構(gòu)與設計

習題.........................................................................................................................................142

?第7章?Spark基礎................................................................................................................144

7.1Spark基礎知識...............................................................................................................144

7.1.1Spark應用..............................................................................................................144

7.1.2Spark的核心抽象...................................................................................................145

7.1.3Spark的核心抽象與各組件關系............................................................................146

7.1.4理解RDD編程.......................................................................................................147

7.1.5Spark的術(shù)語..........................................................................................................150

7.1.6Spark的運行原理...................................................................................................151

7.1.7WordCount任務劃分..............................................................................................152

7.1.8Spark的運行架構(gòu)...................................................................................................152

7.1.9Spark的下載..........................................................................................................155

7.1.10Spark的源碼編譯.................................................................................................155

7.2SparkStreaming...............................................................................................................157

7.2.1SparkStreaming基礎..............................................................................................157

7.2.2Scala連接MySQL.................................................................................................159

小結(jié).........................................................................................................................................163

習題.........................................................................................................................................163

?第8章?Kafka與Spark的集成及應用..................................................................................165

8.1Kafka集成SparkStreaming.............................................................................................165

8.1.1Kafka與SparkStreaming的集成方式....................................................................165

8.1.2SparkStreaming獲取Kafka數(shù)據(jù)的方式................................................................166

8.1.3SparkStreaming與Kafka的集成............................................................................169

8.2Kafka集成StructStreaming.............................................................................................178

8.2.1StructStreaming和SparkStreaming的對比............................................................178

8.2.2StructStreaming基于sparksql引擎........................................................................179

8.2.3StructStreaming編程模型.......................................................................................179

8.2.4MicroBatch和ContinuousProcessing...................................................................180

8.2.5StructStreaming基礎..............................................................................................182

8.2.6StructStreaming的OutputModes...........................................................................185

8.2.7StructStreaming與Kafka.......................................................................................188

小結(jié).........................................................................................................................................193

習題.........................................................................................................................................193

練一練參考答案.................................................................................................................195

習題參考答案....................................................................................................................219

IV

第1章

Kafka入門與基礎

學習目標視頻

?了解Kafka的主要架構(gòu)。

?了解Kafka的設計原理。

?了解Kafka的應用場景。

掌握的基本術(shù)語。Kafka的

?Kafka設計和應用

?掌握Kafka集群的搭建方法。

?掌握規(guī)劃Kafka集群的方法。

本章首先學習Kafka的架構(gòu),然后了解Kafka的基本開發(fā),接著學習Kafka的設計理念和原

理,最后學習Kafka集群在生產(chǎn)上的監(jiān)控和運維。

?1.1??Kafka初識

本節(jié)主要圍繞三個問題展開:第一個是Kafka的角色,在一個大的系統(tǒng)或者架構(gòu)中,了視頻

解引入Kafka的原因以及Kafka在系統(tǒng)中是什么角色,起到什么作用;第二個是Kafka的設

計理念,學習Kafka適合大數(shù)據(jù)場景的原因;第三個是學習Kafka的應用場景。

1.1.1Kafka的官方解釋

Kafka是由Apache軟件基金會開發(fā)的一個開源流處理平臺,使用Scala和Java編寫。Kafka課程

目標

Kafka的目的是通過Hadoop的并行加載機制來統(tǒng)一線上和離線的消息處理,也是為了通過集

群提供實時的消息。

1.Kafka的官方定義

關于Kafka,官方給出的定義是ApacheKafka?isadistributedstreamingplatform,意思就是Kafka

是一個分布式的流平臺。這里包括了兩層含義,第一說明Kafka是一個分布式的系統(tǒng),第二從長遠角

度來看Kafka是一個流處理平臺,主要處理流式數(shù)據(jù)。

2.分布式流平臺的三大角色

分布式流平臺中的三大角色是指Kafka可以用來做什么。下面分別介紹這三個主要的角色以及它

們代表的含義。

(1)Publishandsubscribetostreamsofrecords,similartoamessagequeueorenterprisemessaging

system,意思是Kafka有發(fā)布訂閱式的一些流記錄,類似消息隊列或者企業(yè)級的消息系統(tǒng)。這表明

Kafka可以當作一個消息系統(tǒng)使用,也就是常說的消息隊列或者消息中間件。

(2)Storestreamsofrecordsinafault-tolerantdurableway,意思是Kafka可以用容錯的方式存儲

1

Kafka基礎架構(gòu)與設計第1章Kafka入門與基礎

流式數(shù)據(jù)。這表明Kafka可以當作一個存儲系統(tǒng)使用,這個存儲系統(tǒng)有兩個特點:第一,相對于內(nèi)存

系統(tǒng)而言具有持久化的功能,數(shù)據(jù)可以被持久化,降低了數(shù)據(jù)丟失的風險;第二,通過多副本的機制

保證系統(tǒng)的容錯性,比如其中一個副本丟失,還有其他副本可以使用。

(3)Processstreamsofrecordsastheyoccur,意思是Kafka可以處理流式數(shù)據(jù)。這表明Kafka可

以當作一個流處理平臺使用。Kafka可以結(jié)合自身的流處理組件Streaming進行流處理。

1.1.2Kafka的整體架構(gòu)

下面圍繞Kafka的整體架構(gòu)進一步了解Kafka的三個角色,如圖1-1所示。第一,從圖中可以看

到Kafka可以作為流處理平臺(KafkaStreamsApp),KafkaCluster是一個Kafka的集群,通過Kafka

StreamsApp可以處理流式數(shù)據(jù)。第二,Kafka作為消息系統(tǒng),它有一個生產(chǎn)者(KafkaProducer),系

統(tǒng)中的消息可以通過生產(chǎn)者傳遞到Kafka。Kafka還有一個消費者(KafkaConsumer),可以把消息從

Kafka中讀?。ɑ蛘呦M)出來發(fā)送到下一個系統(tǒng)。從Kafka的生產(chǎn)到消費的整個過程中,Kafka起到

了消息系統(tǒng)的作用。第三,Kafka作為存儲系統(tǒng),無論是生產(chǎn)還是消費產(chǎn)生的數(shù)據(jù),Kafka會把這些數(shù)

據(jù)持久化到日志文件中。

圖1-1Kafka的整體架構(gòu)

MirrorMaker可以理解為兩個Kafka集群之間的數(shù)據(jù)同步,使用MirrorMaker可以把Kafka集群

1中的數(shù)據(jù)同步到Kafka集群2中。這個組件實際上就是對生產(chǎn)者和消費者API的封裝。Kafka的連

接器(KafkaConnectSource)可以連接不同的數(shù)據(jù)源,關于KafkaConnectSource和KafkaProducer

的區(qū)別將在后續(xù)部分進行講解。這就是Kafka的整體架構(gòu)和功能。

1.1.3消息系統(tǒng)

從前面的Kafka整體架構(gòu)中了解到Kafka可以作為消息系統(tǒng)使用,本節(jié)主要講解消息系統(tǒng)的含義

2

第1章Kafka入門與基礎

以及Kafka作為消息系統(tǒng)所具備的作用。

1.消息系統(tǒng)簡介

消息系統(tǒng)(又稱消息引擎)可以在不同的應用之間傳遞消息,比如要想把應用A中的數(shù)據(jù)傳遞到

應用B上,就可以通過消息系統(tǒng)。應用A先把消息傳遞到消息系統(tǒng)中,然后通過消息系統(tǒng)接收消息再

傳遞到應用B中。

2.消息系統(tǒng)的核心作用

為什么應用A不能直接將消息傳遞給應用B,必須通過消息系統(tǒng)呢?接下來解答這個疑惑。消息

系統(tǒng)起到的作用如下:

(1)解耦。假設從系統(tǒng)A到系統(tǒng)B需要傳遞消息,在A中需要寫一個對接到B的接口,把消息

M傳遞到B中。隨著業(yè)務的增長又增加了一個系統(tǒng)C,此時在A中再開發(fā)一個對接到C的接口即可。

但隨著業(yè)務的不斷增長,為了避免接口的不斷增加,浪費用戶的時間,可以引入消息系統(tǒng),讓A直接

對接消息系統(tǒng)。A可以直接把消息傳遞到消息系統(tǒng)中,其他需要消息的系統(tǒng)可以直接從消息系統(tǒng)中讀

取。這就實現(xiàn)了系統(tǒng)之間的解耦。

(2)異步。比如有一個快遞員A需要把不同的快遞(m1、m2、m3)送到不同的客戶(C1、C2、

C3)手中。如果客戶不在指定的地點,快遞就無法配送成功,這時可以引入一個中間平臺(快遞柜),

快遞員A可以將快遞投遞到這個中間平臺,客戶有時間的時候再從這個中間平臺將快遞取出來。這種

機制就是異步,通過這種方式可以明顯地提升消息傳遞的效率。

(3)錯峰與流控。假設有兩臺機器,客戶端A和服務器端B。A每天都要向B發(fā)送消息,B可以

承受的并發(fā)量是1萬,在高峰期的時候消息數(shù)量會遠遠高于B所能承受的并發(fā)量,而平時的流量卻比

較低。這種情況下就可以引入一個消息中間件,高峰期的時候A可以把消息傳遞給中間件,B可以從

中間件中分批消費。即當生產(chǎn)者生產(chǎn)數(shù)據(jù)的速度大于消費者消費的速度時,可以使用消息中間件解決

問題。

(4)最終一致性。在A傳遞消息到B的過程中可以保證數(shù)據(jù)的一致性。

在實際的業(yè)務應用場景中,如果遇到以上這幾種情況,可以考慮引入消息系統(tǒng)來解決這些問題。

1.1.4常見的消息系統(tǒng)

常見的消息系統(tǒng)(消息中間件)有兩種:一種是隊列模型;另外一種是發(fā)布與訂閱模型。在了解

了消息系統(tǒng)的作用之后,接下來介紹這兩種模型的具體含義和區(qū)別。

1.隊列模型

隊列模型包括生產(chǎn)者和消費者。生產(chǎn)者負責生產(chǎn)各種不同的消息,并傳送到隊列中。消費者負責

消費隊列中的各種消息。隊列模型如圖1-2所示。

消費者消費了某一消息,就表示把隊列中的該消息刪除了。在隊列模型中每一個消息只能被一個

消費者消費,比如消息M1被應用3消費之后,就不能被應用4消費了,同樣的,消息M6被應用4

消費之后,就不能被應用3

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論