這是一本從實踐角度解讀Apache Pulsar相關(guān)組件、工作原理和落地實踐的專業(yè)指導書。本書主要面向的是初中級讀者,從基礎(chǔ)概念講起,逐漸擴展到基本操作、核心技術(shù)、常用工具及典型應用等。本書共分為10章:第1章主要介紹與Apache Pulsar相關(guān)的基礎(chǔ)知識,比如發(fā)展歷史、適用場景、優(yōu)勢與不足,以及與消息隊列框架相關(guān)的知識等。第2章主要介紹Apache Pulsar的核心概念和架構(gòu)。第3~9章主要介紹進行實操必須具備的內(nèi)容,比如Apache Pulsar安裝部署的方法、基本操作、核心組件、高級特性、輸入/輸出、Pulsar SQL、運維方法等。第10章是實操落地的方法,包括Pulsarde 應用模式、flink配合實現(xiàn)實時處理、構(gòu)建實時消息管道得具體實踐等。
騰訊軟件工程師、Apache Pulsar社區(qū)貢獻者親自執(zhí)筆。本書基于Apache Pulsar 2.10,從實踐、原理兩個層面對Pulsar的使用、組件、架構(gòu)、特性和生態(tài)進行深入解讀,為了幫助讀者快速上手,其中不僅包含大量案例,還有很多直接指導讀者上手的經(jīng)驗和技巧。因為其實用性強,所以得到了很多業(yè)界專家的推薦。
Preface?前 言
為什么要寫本書
Pulsar是一個集消息傳遞、消息存儲、輕量化函數(shù)式計算于一體的云原生流數(shù)據(jù)平臺。Pulsar提供數(shù)據(jù)存儲與消費能力,憑借優(yōu)秀的架構(gòu)設(shè)計、強大的可擴展性,在消息隊列、流數(shù)據(jù)處理等多個領(lǐng)域被廣泛使用。
筆者最初接觸Pulsar時其社區(qū)版本是2.4,彼時的Pulsar已嶄露頭角。但當時關(guān)于Pulsar的中文資料相當少,更不用說中文圖書了,很多問題需要通過求助于社區(qū)和閱讀源碼來解決。那時的Pulsar雖然優(yōu)秀,但是對于初學者來說學習與使用成本較高。在實際項目中,筆者及團隊伙伴使用Pulsar構(gòu)建了數(shù)據(jù)服務,也發(fā)掘出Pulsar在工程實踐中的價值。筆者在學習與工作的過程中有意識地整理了大量與Pulsar相關(guān)的資料。
Pulsar在2016年發(fā)布了第一個社區(qū)版本,經(jīng)過多年的發(fā)展,越來越多的頭部公司使用Pulsar來構(gòu)建消息服務。截至本書寫作時,Pulsar已經(jīng)迭代到2.10版本,功能日益完善,社區(qū)生態(tài)方興未艾。通過Pulsar,你不僅可以構(gòu)建消息隊列服務,還可以構(gòu)建可靠的、高吞吐量的大數(shù)據(jù)應用,甚至可以為金融場景提供高可靠、高性能的服務支持。
很高興有機會將自己學習與實踐Pulsar的經(jīng)驗整理成冊。希望本書能夠幫助初學者盡快上手Pulsar,并構(gòu)建出更加穩(wěn)健的服務。
讀者對象
根據(jù)對Pulsar使用需求的不同,本書的讀者群可以分為如下幾類。
希望系統(tǒng)學習Pulsar并快速上手使用的初學者。
希望掌握Pulsar的核心運行原理及高級應用的中高級開發(fā)者。
Pulsar運維人員。
Pulsar愛好者,如Pulsar開源社區(qū)愛好者、對Pulsar感興趣的其他人員等。
本書特色
本書從應用實踐入手,注重理論與實踐的結(jié)合,可讓讀者在快速上手應用的基礎(chǔ)上了解其背后的原理。在介紹基礎(chǔ)理論的同時,本書重點介紹如何基于理論快速構(gòu)建出穩(wěn)定的Pulsar服務,以及依靠豐富的Pulsar生態(tài)構(gòu)建出以Pulsar為核心的一系列數(shù)據(jù)服務。
如何閱讀本書
本書共11章,各章的主要內(nèi)容如下。
第1章的目標是幫讀者整體認識Pulsar。本章不僅對Pulsar的背景和特性進行了介紹,還對比了其他幾種開源消息隊列工具。
第2章介紹Pulsar的基本概念與架構(gòu)。通過對本章的學習,讀者可以建立對Pulsar原理和構(gòu)成的全局認識,為學習后續(xù)內(nèi)容打下基礎(chǔ)。
第3章介紹Pulsar的安裝與部署過程。通過對本章的學習,讀者可以在分布式、單機、容器化等多種環(huán)境下完成Pulsar的部署。
第4章以Java語言為例,介紹Pulsar API的基本使用方法。通過對本章的學習,讀者能夠具備Pulsar客戶端開發(fā)的基本能力。
第5章介紹Pulsar中Broker、BookKeeper、ManagedLedger以及與主題管理相關(guān)的核心組件的工作原理。學完本章,讀者可以掌握Pulsar的運行原理。
第6章介紹事務、消息隊列協(xié)議、分層存儲等Pulsar高級特性的原理與使用方法。
第7章介紹Pulsar Function與Pulsar I/O,以及如何依靠Pulsar Function這一輕量級計算引擎實現(xiàn)簡單的數(shù)據(jù)處理功能。
第8章介紹Pulsar SQL和Trino。通過對本章的學習,讀者可以了解Pulsar SQL的使用與配置方法,以及Trino Pulsar連接器的實現(xiàn)原理。
第9章介紹生產(chǎn)環(huán)境中使用Pulsar所需完成的安全配置,以及Pulsar運維所需監(jiān)控和管理工具,最后還介紹了集群管理的相關(guān)知識。
第10章介紹如何將Pulsar與Flink結(jié)合,以及如何利用Flink的計算能力構(gòu)建實時計算
服務。
第11章介紹與Pulsar應用實踐相關(guān)的經(jīng)驗,包括Pulsar應用模式、Pulsar與Spark集成、Pulsar數(shù)據(jù)庫的變更數(shù)據(jù)捕獲(CDC)和Pulsar可靠性優(yōu)先場景等內(nèi)容。
本書各章內(nèi)容相對獨立,對于初學者來說,建議從前到后依序閱讀;對于有一定基礎(chǔ)的讀者來說,建議根據(jù)自身情況有選擇地閱讀。
前 言
基礎(chǔ)篇
第1章 Pulsar概述 2
1.1 Pulsar是什么 2
1.2 Pulsar的優(yōu)勢 3
1.2.1 Pulsar不只是消息隊列 4
1.2.2 存儲與計算分離 4
1.2.3 云原生架構(gòu) 5
1.2.4 Pulsar的存儲特性 6
1.2.5 消息傳輸協(xié)議 8
1.2.6 消費方式 8
1.2.7 豐富的功能與生態(tài) 9
1.3 消息隊列對比 9
1.3.1 消息隊列簡介 10
1.3.2 性能與可靠性 11
1.3.3 功能特性對比 14
1.4 快速體驗 17
1.4.1 下載安裝 17
1.4.2 單機服務啟動 17
1.4.3 生產(chǎn)與消費 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 消費者與訂閱 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ù)存儲 31
2.3 Pulsar物理架構(gòu) 32
2.3.1 物理架構(gòu)概述 32
2.3.2 核心組件與服務 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 集群搭建實戰(zhàn) 44
3.3 Docker部署 47
3.3.1 Docker單機部署 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)建客戶端對象 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ā) 65
4.2.1 構(gòu)建消費者 65
4.2.2 數(shù)據(jù)確認 68
4.2.3 消費者攔截器 72
4.2.4 消費者監(jiān)聽器 72
4.3 Reader開發(fā) 73
4.4 模式管理 74
4.4.1 模式類型 75
4.4.2 自動模式 78
4.4.3 模式管理 79
原理篇
第5章 Pulsar核心組件原理 84
5.1 Broker原理 84
5.1.1 通信協(xié)議層 84
5.1.2 主題查找服務 89
5.1.3 租戶與命名空間管理 90
5.1.4 負載管理 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 訂閱與消費者原理 110
5.4.4 消息生存時間與持久化
控制 114
第6章 Pulsar高級特性 115
6.1 Pulsar事務 115
6.1.1 消息隊列事務隔離級別 116
6.1.2 Pulsar事務簡介 117
6.1.3 Pulsar事務的使用方法 118
6.1.4 Pulsar事務實現(xiàn)原理及關(guān)鍵
流程 119
6.2 消息隊列協(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 分層存儲 130
6.3.1 分層存儲的設(shè)計 130
6.3.2 分層存儲的使用 131
6.3.3 分層存儲的原理 133
6.4 消息延遲傳遞 133
6.5 主題壓縮 134
6.5.1 主題壓縮應用 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)與
應用場景 140
7.2 Pulsar Function應用實踐 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運行流程 150
7.3.2 Function Worker組件工作
原理 152
7.3.3 Pulsar運行時 153
7.4 Pulsar I/O 154
7.4.1 Pulsar I/O概述 154
7.4.2 使用內(nèi)置的P