這是一本從實(shí)踐角度解讀Apache Pulsar相關(guān)組件、工作原理和落地實(shí)踐的專業(yè)指導(dǎo)書。本書主要面向的是初中級(jí)讀者,從基礎(chǔ)概念講起,逐漸擴(kuò)展到基本操作、核心技術(shù)、常用工具及典型應(yīng)用等。本書共分為10章:第1章主要介紹與Apache Pulsar相關(guān)的基礎(chǔ)知識(shí),比如發(fā)展歷史、適用場景、優(yōu)勢與不足,以及與消息隊(duì)列框架相關(guān)的知識(shí)等。第2章主要介紹Apache Pulsar的核心概念和架構(gòu)。第3~9章主要介紹進(jìn)行實(shí)操必須具備的內(nèi)容,比如Apache Pulsar安裝部署的方法、基本操作、核心組件、高級(jí)特性、輸入/輸出、Pulsar SQL、運(yùn)維方法等。第10章是實(shí)操落地的方法,包括Pulsarde 應(yīng)用模式、flink配合實(shí)現(xiàn)實(shí)時(shí)處理、構(gòu)建實(shí)時(shí)消息管道得具體實(shí)踐等。
騰訊軟件工程師、Apache Pulsar社區(qū)貢獻(xiàn)者親自執(zhí)筆。本書基于Apache Pulsar 2.10,從實(shí)踐、原理兩個(gè)層面對(duì)Pulsar的使用、組件、架構(gòu)、特性和生態(tài)進(jìn)行深入解讀,為了幫助讀者快速上手,其中不僅包含大量案例,還有很多直接指導(dǎo)讀者上手的經(jīng)驗(yàn)和技巧。因?yàn)槠鋵?shí)用性強(qiáng),所以得到了很多業(yè)界專家的推薦。
Preface?前 言
為什么要寫本書
Pulsar是一個(gè)集消息傳遞、消息存儲(chǔ)、輕量化函數(shù)式計(jì)算于一體的云原生流數(shù)據(jù)平臺(tái)。Pulsar提供數(shù)據(jù)存儲(chǔ)與消費(fèi)能力,憑借優(yōu)秀的架構(gòu)設(shè)計(jì)、強(qiáng)大的可擴(kuò)展性,在消息隊(duì)列、流數(shù)據(jù)處理等多個(gè)領(lǐng)域被廣泛使用。
筆者最初接觸Pulsar時(shí)其社區(qū)版本是2.4,彼時(shí)的Pulsar已嶄露頭角。但當(dāng)時(shí)關(guān)于Pulsar的中文資料相當(dāng)少,更不用說中文圖書了,很多問題需要通過求助于社區(qū)和閱讀源碼來解決。那時(shí)的Pulsar雖然優(yōu)秀,但是對(duì)于初學(xué)者來說學(xué)習(xí)與使用成本較高。在實(shí)際項(xiàng)目中,筆者及團(tuán)隊(duì)伙伴使用Pulsar構(gòu)建了數(shù)據(jù)服務(wù),也發(fā)掘出Pulsar在工程實(shí)踐中的價(jià)值。筆者在學(xué)習(xí)與工作的過程中有意識(shí)地整理了大量與Pulsar相關(guān)的資料。
Pulsar在2016年發(fā)布了第一個(gè)社區(qū)版本,經(jīng)過多年的發(fā)展,越來越多的頭部公司使用Pulsar來構(gòu)建消息服務(wù)。截至本書寫作時(shí),Pulsar已經(jīng)迭代到2.10版本,功能日益完善,社區(qū)生態(tài)方興未艾。通過Pulsar,你不僅可以構(gòu)建消息隊(duì)列服務(wù),還可以構(gòu)建可靠的、高吞吐量的大數(shù)據(jù)應(yīng)用,甚至可以為金融場景提供高可靠、高性能的服務(wù)支持。
很高興有機(jī)會(huì)將自己學(xué)習(xí)與實(shí)踐Pulsar的經(jīng)驗(yàn)整理成冊(cè)。希望本書能夠幫助初學(xué)者盡快上手Pulsar,并構(gòu)建出更加穩(wěn)健的服務(wù)。
讀者對(duì)象
根據(jù)對(duì)Pulsar使用需求的不同,本書的讀者群可以分為如下幾類。
希望系統(tǒng)學(xué)習(xí)Pulsar并快速上手使用的初學(xué)者。
希望掌握Pulsar的核心運(yùn)行原理及高級(jí)應(yīng)用的中高級(jí)開發(fā)者。
Pulsar運(yùn)維人員。
Pulsar愛好者,如Pulsar開源社區(qū)愛好者、對(duì)Pulsar感興趣的其他人員等。
本書特色
本書從應(yīng)用實(shí)踐入手,注重理論與實(shí)踐的結(jié)合,可讓讀者在快速上手應(yīng)用的基礎(chǔ)上了解其背后的原理。在介紹基礎(chǔ)理論的同時(shí),本書重點(diǎn)介紹如何基于理論快速構(gòu)建出穩(wěn)定的Pulsar服務(wù),以及依靠豐富的Pulsar生態(tài)構(gòu)建出以Pulsar為核心的一系列數(shù)據(jù)服務(wù)。
如何閱讀本書
本書共11章,各章的主要內(nèi)容如下。
第1章的目標(biāo)是幫讀者整體認(rèn)識(shí)Pulsar。本章不僅對(duì)Pulsar的背景和特性進(jìn)行了介紹,還對(duì)比了其他幾種開源消息隊(duì)列工具。
第2章介紹Pulsar的基本概念與架構(gòu)。通過對(duì)本章的學(xué)習(xí),讀者可以建立對(duì)Pulsar原理和構(gòu)成的全局認(rèn)識(shí),為學(xué)習(xí)后續(xù)內(nèi)容打下基礎(chǔ)。
第3章介紹Pulsar的安裝與部署過程。通過對(duì)本章的學(xué)習(xí),讀者可以在分布式、單機(jī)、容器化等多種環(huán)境下完成Pulsar的部署。
第4章以Java語言為例,介紹Pulsar API的基本使用方法。通過對(duì)本章的學(xué)習(xí),讀者能夠具備Pulsar客戶端開發(fā)的基本能力。
第5章介紹Pulsar中Broker、BookKeeper、ManagedLedger以及與主題管理相關(guān)的核心組件的工作原理。學(xué)完本章,讀者可以掌握Pulsar的運(yùn)行原理。
第6章介紹事務(wù)、消息隊(duì)列協(xié)議、分層存儲(chǔ)等Pulsar高級(jí)特性的原理與使用方法。
第7章介紹Pulsar Function與Pulsar I/O,以及如何依靠Pulsar Function這一輕量級(jí)計(jì)算引擎實(shí)現(xiàn)簡單的數(shù)據(jù)處理功能。
第8章介紹Pulsar SQL和Trino。通過對(duì)本章的學(xué)習(xí),讀者可以了解Pulsar SQL的使用與配置方法,以及Trino Pulsar連接器的實(shí)現(xiàn)原理。
第9章介紹生產(chǎn)環(huán)境中使用Pulsar所需完成的安全配置,以及Pulsar運(yùn)維所需監(jiān)控和管理工具,最后還介紹了集群管理的相關(guān)知識(shí)。
第10章介紹如何將Pulsar與Flink結(jié)合,以及如何利用Flink的計(jì)算能力構(gòu)建實(shí)時(shí)計(jì)算
服務(wù)。
第11章介紹與Pulsar應(yīng)用實(shí)踐相關(guān)的經(jīng)驗(yàn),包括Pulsar應(yīng)用模式、Pulsar與Spark集成、Pulsar數(shù)據(jù)庫的變更數(shù)據(jù)捕獲(CDC)和Pulsar可靠性優(yōu)先場景等內(nèi)容。
本書各章內(nèi)容相對(duì)獨(dú)立,對(duì)于初學(xué)者來說,建議從前到后依序閱讀;對(duì)于有一定基礎(chǔ)的讀者來說,建議根據(jù)自身情況有選擇地閱讀。
前 言
基礎(chǔ)篇
第1章 Pulsar概述 2
1.1 Pulsar是什么 2
1.2 Pulsar的優(yōu)勢 3
1.2.1 Pulsar不只是消息隊(duì)列 4
1.2.2 存儲(chǔ)與計(jì)算分離 4
1.2.3 云原生架構(gòu) 5
1.2.4 Pulsar的存儲(chǔ)特性 6
1.2.5 消息傳輸協(xié)議 8
1.2.6 消費(fèi)方式 8
1.2.7 豐富的功能與生態(tài) 9
1.3 消息隊(duì)列對(duì)比 9
1.3.1 消息隊(duì)列簡介 10
1.3.2 性能與可靠性 11
1.3.3 功能特性對(duì)比 14
1.4 快速體驗(yàn) 17
1.4.1 下載安裝 17
1.4.2 單機(jī)服務(wù)啟動(dòng) 17
1.4.3 生產(chǎn)與消費(fèi) 18
第2章 Pulsar的基本概念和架構(gòu)
詳解 20
2.1 Pulsar的基本概念 20
2.1.1 多租戶與命名空間 20
2.1.2 主題 21
2.1.3 生產(chǎn)者 22
2.1.4 消費(fèi)者與訂閱 24
2.1.5 消息的保留與過期 27
2.2 Pulsar的邏輯架構(gòu) 28
2.2.1 主題的配置管理 29
2.2.2 主題的數(shù)據(jù)流轉(zhuǎn) 30
2.2.3 主題的數(shù)據(jù)存儲(chǔ) 31
2.3 Pulsar物理架構(gòu) 32
2.3.1 物理架構(gòu)概述 32
2.3.2 核心組件與服務(wù) 35
第3章 Pulsar安裝與部署 39
3.1 依賴環(huán)境 39
3.1.1 安裝Java 39
3.1.2 Pulsar安裝包 40
3.2 分布式部署 42
3.2.1 資源分配規(guī)劃 42
3.2.2 集群搭建實(shí)戰(zhàn) 44
3.3 Docker部署 47
3.3.1 Docker單機(jī)部署 47
3.3.2 Docker分布式部署 48
3.4 Kubernetes部署 48
3.4.1 minikube環(huán)境安裝 48
3.4.2 Helm Chart安裝 49
3.4.3 在Kubernetes中使用
Pulsar 51
3.5 源碼的結(jié)構(gòu)與編譯 52
3.5.1 源碼結(jié)構(gòu) 52
3.5.2 源碼編譯 52
第4章 Pulsar的基本操作 54
4.1 生產(chǎn)者開發(fā) 54
4.1.1 生產(chǎn)者概覽 54
4.1.2 構(gòu)建客戶端對(duì)象 56
4.1.3 構(gòu)建生產(chǎn)者 58
4.1.4 數(shù)據(jù)發(fā)送路由規(guī)則 60
4.1.5 分批發(fā)送 63
4.1.6 分塊發(fā)送 64
4.1.7 生產(chǎn)者攔截器 64
4.2 消費(fèi)者開發(fā) 65
4.2.1 構(gòu)建消費(fèi)者 65
4.2.2 數(shù)據(jù)確認(rèn) 68
4.2.3 消費(fèi)者攔截器 72
4.2.4 消費(fèi)者監(jiān)聽器 72
4.3 Reader開發(fā) 73
4.4 模式管理 74
4.4.1 模式類型 75
4.4.2 自動(dòng)模式 78
4.4.3 模式管理 79
原理篇
第5章 Pulsar核心組件原理 84
5.1 Broker原理 84
5.1.1 通信協(xié)議層 84
5.1.2 主題查找服務(wù) 89
5.1.3 租戶與命名空間管理 90
5.1.4 負(fù)載管理 92
5.2 BookKeeper原理 94
5.2.1 BookKeeper簡介 94
5.2.2 BookKeeper的使用 100
5.3 ManagedLedger組件 100
5.3.1 ManagedLedger簡介 101
5.3.2 消息積壓的配額管理 102
5.3.3 消息的保留與清理 103
5.3.4 消息的寫入 104
5.3.5 消息的緩存與讀取 104
5.4 主題管理 105
5.4.1 Pulsar主題管理架構(gòu) 106
5.4.2 生產(chǎn)者原理 108
5.4.3 訂閱與消費(fèi)者原理 110
5.4.4 消息生存時(shí)間與持久化
控制 114
第6章 Pulsar高級(jí)特性 115
6.1 Pulsar事務(wù) 115
6.1.1 消息隊(duì)列事務(wù)隔離級(jí)別 116
6.1.2 Pulsar事務(wù)簡介 117
6.1.3 Pulsar事務(wù)的使用方法 118
6.1.4 Pulsar事務(wù)實(shí)現(xiàn)原理及關(guān)鍵
流程 119
6.2 消息隊(duì)列協(xié)議層 122
6.2.1 協(xié)議處理器 122
6.2.2 Pulsar上的Kafka簡介 125
6.2.3 Pulsar上的Kafka使用 126
6.2.4 Pulsar上的Kafka工作
原理 128
6.3 分層存儲(chǔ) 130
6.3.1 分層存儲(chǔ)的設(shè)計(jì) 130
6.3.2 分層存儲(chǔ)的使用 131
6.3.3 分層存儲(chǔ)的原理 133
6.4 消息延遲傳遞 133
6.5 主題壓縮 134
6.5.1 主題壓縮應(yīng)用 135
6.5.2 主題壓縮原理 135
第7章 Pulsar Function與
Pulsar I/O 137
7.1 Pulsar Function簡介 137
7.1.1 Pulsar Function編程模型 137
7.1.2 Pulsar Function邏輯結(jié)構(gòu)與
應(yīng)用場景 140
7.2 Pulsar Function應(yīng)用實(shí)踐 141
7.2.1 Pulsar Function的部署與
使用 141
7.2.2 自定義Pulsar Function
開發(fā) 146
7.2.3 Pulsar Function語義支持 148
7.3 Pulsar Function原理 150
7.3.1 Pulsar Function運(yùn)行流程 150
7.3.2 Function Worker組件工作
原理 152
7.3.3 Pulsar運(yùn)行時(shí) 153
7.4 Pulsar I/O 154
7.4.1 Pulsar I/O概述 154
7.4.2 使用內(nèi)置的P