這是一本從實踐角度解讀Apache Pulsar相關組件、工作原理和落地實踐的專業(yè)指導書。本書主要面向的是初中級讀者,從基礎概念講起,逐漸擴展到基本操作、核心技術、常用工具及典型應用等。本書共分為10章:第1章主要介紹與Apache Pulsar相關的基礎知識,比如發(fā)展歷史、適用場景、優(yōu)勢與不足,以及與消息隊列框架相關的知識等。第2章主要介紹Apache Pulsar的核心概念和架構。第3~9章主要介紹進行實操必須具備的內容,比如Apache Pulsar安裝部署的方法、基本操作、核心組件、高級特性、輸入/輸出、Pulsar SQL、運維方法等。第10章是實操落地的方法,包括Pulsarde 應用模式、flink配合實現(xiàn)實時處理、構建實時消息管道得具體實踐等。
騰訊軟件工程師、Apache Pulsar社區(qū)貢獻者親自執(zhí)筆。本書基于Apache Pulsar 2.10,從實踐、原理兩個層面對Pulsar的使用、組件、架構、特性和生態(tài)進行深入解讀,為了幫助讀者快速上手,其中不僅包含大量案例,還有很多直接指導讀者上手的經驗和技巧。因為其實用性強,所以得到了很多業(yè)界專家的推薦。
Preface?前 言
為什么要寫本書
Pulsar是一個集消息傳遞、消息存儲、輕量化函數(shù)式計算于一體的云原生流數(shù)據(jù)平臺。Pulsar提供數(shù)據(jù)存儲與消費能力,憑借優(yōu)秀的架構設計、強大的可擴展性,在消息隊列、流數(shù)據(jù)處理等多個領域被廣泛使用。
筆者最初接觸Pulsar時其社區(qū)版本是2.4,彼時的Pulsar已嶄露頭角。但當時關于Pulsar的中文資料相當少,更不用說中文圖書了,很多問題需要通過求助于社區(qū)和閱讀源碼來解決。那時的Pulsar雖然優(yōu)秀,但是對于初學者來說學習與使用成本較高。在實際項目中,筆者及團隊伙伴使用Pulsar構建了數(shù)據(jù)服務,也發(fā)掘出Pulsar在工程實踐中的價值。筆者在學習與工作的過程中有意識地整理了大量與Pulsar相關的資料。
Pulsar在2016年發(fā)布了第一個社區(qū)版本,經過多年的發(fā)展,越來越多的頭部公司使用Pulsar來構建消息服務。截至本書寫作時,Pulsar已經迭代到2.10版本,功能日益完善,社區(qū)生態(tài)方興未艾。通過Pulsar,你不僅可以構建消息隊列服務,還可以構建可靠的、高吞吐量的大數(shù)據(jù)應用,甚至可以為金融場景提供高可靠、高性能的服務支持。
很高興有機會將自己學習與實踐Pulsar的經驗整理成冊。希望本書能夠幫助初學者盡快上手Pulsar,并構建出更加穩(wěn)健的服務。
讀者對象
根據(jù)對Pulsar使用需求的不同,本書的讀者群可以分為如下幾類。
希望系統(tǒng)學習Pulsar并快速上手使用的初學者。
希望掌握Pulsar的核心運行原理及高級應用的中高級開發(fā)者。
Pulsar運維人員。
Pulsar愛好者,如Pulsar開源社區(qū)愛好者、對Pulsar感興趣的其他人員等。
本書特色
本書從應用實踐入手,注重理論與實踐的結合,可讓讀者在快速上手應用的基礎上了解其背后的原理。在介紹基礎理論的同時,本書重點介紹如何基于理論快速構建出穩(wěn)定的Pulsar服務,以及依靠豐富的Pulsar生態(tài)構建出以Pulsar為核心的一系列數(shù)據(jù)服務。
如何閱讀本書
本書共11章,各章的主要內容如下。
第1章的目標是幫讀者整體認識Pulsar。本章不僅對Pulsar的背景和特性進行了介紹,還對比了其他幾種開源消息隊列工具。
第2章介紹Pulsar的基本概念與架構。通過對本章的學習,讀者可以建立對Pulsar原理和構成的全局認識,為學習后續(xù)內容打下基礎。
第3章介紹Pulsar的安裝與部署過程。通過對本章的學習,讀者可以在分布式、單機、容器化等多種環(huán)境下完成Pulsar的部署。
第4章以Java語言為例,介紹Pulsar API的基本使用方法。通過對本章的學習,讀者能夠具備Pulsar客戶端開發(fā)的基本能力。
第5章介紹Pulsar中Broker、BookKeeper、ManagedLedger以及與主題管理相關的核心組件的工作原理。學完本章,讀者可以掌握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章介紹生產環(huán)境中使用Pulsar所需完成的安全配置,以及Pulsar運維所需監(jiān)控和管理工具,最后還介紹了集群管理的相關知識。
第10章介紹如何將Pulsar與Flink結合,以及如何利用Flink的計算能力構建實時計算
服務。
第11章介紹與Pulsar應用實踐相關的經驗,包括Pulsar應用模式、Pulsar與Spark集成、Pulsar數(shù)據(jù)庫的變更數(shù)據(jù)捕獲(CDC)和Pulsar可靠性優(yōu)先場景等內容。
本書各章內容相對獨立,對于初學者來說,建議從前到后依序閱讀;對于有一定基礎的讀者來說,建議根據(jù)自身情況有選擇地閱讀。
前 言
基礎篇
第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 云原生架構 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 生產與消費 18
第2章 Pulsar的基本概念和架構
詳解 20
2.1 Pulsar的基本概念 20
2.1.1 多租戶與命名空間 20
2.1.2 主題 21
2.1.3 生產者 22
2.1.4 消費者與訂閱 24
2.1.5 消息的保留與過期 27
2.2 Pulsar的邏輯架構 28
2.2.1 主題的配置管理 29
2.2.2 主題的數(shù)據(jù)流轉 30
2.2.3 主題的數(shù)據(jù)存儲 31
2.3 Pulsar物理架構 32
2.3.1 物理架構概述 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 源碼的結構與編譯 52
3.5.1 源碼結構 52
3.5.2 源碼編譯 52
第4章 Pulsar的基本操作 54
4.1 生產者開發(fā) 54
4.1.1 生產者概覽 54
4.1.2 構建客戶端對象 56
4.1.3 構建生產者 58
4.1.4 數(shù)據(jù)發(fā)送路由規(guī)則 60
4.1.5 分批發(fā)送 63
4.1.6 分塊發(fā)送 64
4.1.7 生產者攔截器 64
4.2 消費者開發(fā) 65
4.2.1 構建消費者 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主題管理架構 106
5.4.2 生產者原理 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)原理及關鍵
流程 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 分層存儲的設計 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邏輯結構與
應用場景 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 使用內置的P