<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          聊聊 Pulsar:編譯 Pulsar 源碼并搭建源碼環(huán)境

          共 4303字,需瀏覽 9分鐘

           ·

          2022-03-19 04:22

          一、環(huán)境準(zhǔn)備

          老周這里編譯 Pulsar 的版本是 2.9.1,也是 Pulsar 目前最新的版本。

          • JDK:1.8.0_241

          • Maven:3.6.1

          • Pulsar:apache-pulsar-2.9.1-src.tar.gz

          二、源碼編譯

          編譯&安裝命令:

          mvn?install?-DskipTests

          執(zhí)行完上述的 maven 命令后,發(fā)現(xiàn) managed-ledger 模塊編譯報(bào)錯(cuò),如下:


          點(diǎn)進(jìn)去發(fā)現(xiàn)是 proto 包下的 MLDataFormats 類中的存在靜態(tài)類與源碼中的存在沖突,導(dǎo)致編譯失敗,所以我手動(dòng)的導(dǎo)入正確的 proto 包下的類。

          再次進(jìn)行編譯:


          額,又編譯失敗,很明顯可以看出這是 test 包下的測(cè)試類,但我上面的 mvn install -DskipTests 命令,不是會(huì)跳過(guò)測(cè)試類進(jìn)行編譯嗎?這就要說(shuō)下這兩者的區(qū)別了:

          mvn install -Dmaven.test.skip=true 測(cè)試類不會(huì)生成.class 文件
          mvn install -DskipTests 測(cè)試類會(huì)生成.class文件

          測(cè)試類不想導(dǎo)入正確的 proto 包中類的話。我們就下面這個(gè)命令來(lái)編譯安裝:

          mvn?install?-Dmaven.test.skip=true

          這次就能忽略測(cè)試類進(jìn)行相應(yīng)的編譯以及安裝:


          當(dāng)你看到 BUILD SUCCESS 表示編譯成功了。

          三、Pulsar 的目錄結(jié)構(gòu)

          3.1 壓縮包的目錄結(jié)構(gòu)


          • bin:包含所有的 CLI 工具,包括 pulsar-admin、pulsar-client、pulsar、bookkeeper 等。

          • conf:包含所有的配置文件,包括 client、broker、bookkeeper、zookeeper 的配置等,CLI 工具的配置文件也都在里面。

          • examples:包含 Java 和 Python 使用 pulsar-function 的例子。

          • instances:包含 Java 實(shí)例的 jar 包和 Python 實(shí)例的 py 文件。

          • lib:所有 Pulsar 編譯后的 jar 包都在這里。

          • licenses:許可證信息,可以忽略。

          3.2 源碼的目錄結(jié)構(gòu)


          你是不是也有和我一樣的感受,這些模塊感覺(jué)亂七八糟,是的,沒(méi)錯(cuò),社區(qū)也一直在做模塊的一些優(yōu)化,一些非必要的模塊開(kāi)始被移除、合并到其它模塊中去。

          3.2.1 輔助、測(cè)試類的模塊

          • bin:包含所有的 CLI 工具,包括 pulsar-admin、pulsar-client、pulsar、bookkeeper 等。

          • bouncy-castle:一個(gè) Java 庫(kù),對(duì)默認(rèn) Java Cryptographic Extension(JCE)的補(bǔ)充,它比 Sun 提供的默認(rèn) JCE 多了許多密碼套件和算法。Pulsar 的安全性和加密技術(shù)依賴于它。

          • build:一些 CI 以及 docker 的構(gòu)建腳本。

          • buildtools:主要是包含一些構(gòu)建時(shí)使用的工具,比如我們?cè)?Github 上為 Pulsar 提交了一個(gè) PR,會(huì)自動(dòng)觸發(fā)測(cè)試,由該模塊完成。

          • conf:包含所有的配置文件,包括 client、broker、bookkeeper、zookeeper 的配置等,CLI 工具的配置文件也都在里面。

          • deployment:部署相關(guān),比如 k8s 的一些配置文件。

          • dev:里面目前只有 Vagrantfile 文件,主要描述項(xiàng)目所需的機(jī)器類型,以及如何配置和提供這些機(jī)器。

          • distribution:如果我們執(zhí)行了編譯操作,那么最后的編譯產(chǎn)物就會(huì)在這個(gè)目錄下,分為 io(即 connector)、offloaders、server 這三個(gè)子模塊,server 就是主體的 Pulsar 程序。

          • docker、docker-compose:docker 鏡像模塊,里面有對(duì)應(yīng)的 Dockerfile。

          • jclouds-shaded、kafka-connect-avro-converter-shaded、pulsar-broker-shaded、pulsar-client-admin-shaded:shaded 模塊是使用 maven-shade-plugin 生成的,主要作用:將依賴的 jar 包打包到當(dāng)前 jar 包中、重命名依賴的 jar 包。

          • managed-ledger:managed-ledger 是 Pulsar 底層存儲(chǔ) BookKeeper 中的概念,相當(dāng)于一種記錄的集合) 緩存中調(diào)度消息,除非積壓的消息超過(guò)這個(gè)緩存的大小。如果積壓的消息對(duì)于緩存來(lái)說(shuō)太大了,則 Broker 將開(kāi)始從 BookKeeper 那里讀取 Entries(Entry 同樣是 BookKeeper 中的概念,相當(dāng)于一條記錄)。

          • pulsar-client-tools-test:CLI 工具測(cè)試相關(guān)。

          • pulsar-common:Pulsar 的通用模塊。Broker 和 Client 都會(huì)同時(shí)引用的公共模塊,里面定義了一些兩邊都會(huì)用到的對(duì)象,比如 PulsarApi.proto。

          • pulsar-config-validation:用于校驗(yàn)配置正確性的通用包,在 Function 和 I/O 中會(huì)被使用。

          • pulsar-metadata:Pulsar 相關(guān)元數(shù)據(jù)信息。

          • pulsar-testclient:Pulsar 測(cè)試的一些客戶端。

          • structured-event-log:日志事件相關(guān)。

          • testmocks:?jiǎn)卧獪y(cè)試的時(shí)候,有很多 Mock 的工具類都放在這個(gè)模塊里。

          • tests:用于測(cè)試(比如集成測(cè)試、兼容性測(cè)試、shade 模塊測(cè)試等)的模塊,都在這個(gè)模塊中。

          3.2.2 功能相關(guān)的模塊

          • pulsar-broker:最主要的模塊,Pulsar 的服務(wù)端 Broker。

          • pulsar-broker-auth-athenz:Broker 的 Athenz 身份驗(yàn)證插件。

          • pulsar-broker-auth-sasl:Broker 的 SASL 身份驗(yàn)證插件。

          • pulsar-broker-common:Broker 端的通用模塊,被 pulsar-functions、pulsar-websocket 等模塊共同使用。例如:身份驗(yàn)證、配置緩存等通用能力。

          • pulsar-client:數(shù)據(jù)流客戶端,通常被業(yè)務(wù)使用,比如最基礎(chǔ)的發(fā)布、訂閱消息。

          • pulsar-client-1x-base:Pulsar 對(duì) 1.x 版本的協(xié)議做了兼容,這個(gè)是 1.x 版本的協(xié)議的客戶端。

          • pulsar-client-admin:管理流客戶端,用于調(diào)用管理相關(guān)的接口,比如創(chuàng)建、刪除 Topic。

          • pulsar-client-admin-api:管理流客戶端相關(guān)的接口。

          • pulsar-client-all:?jiǎn)渭冇糜跇?gòu)建完整的客戶端,管理流和數(shù)據(jù)流都打到一個(gè)包里。

          • pulsar-client-api:Client 的通用 API。

          • pulsar-client-auth-athenz:Client 的 Athenz 身份驗(yàn)證插件。

          • pulsar-client-auth-sasl:Client 的 SASL 身份驗(yàn)證插件。

          • pulsar-client-cpp:Pulsar 的 C++ 客戶端。

          • pulsar-client-messagecrypto-bc:消息加密工具庫(kù)。

          • pulsar-client-tools:一些 CLI 工具。

          • pulsar-function-go:Pulsar Function go 語(yǔ)言相關(guān)。

          • pulsar-functions:Pulsar Function 的主要實(shí)現(xiàn)。

          • pulsar-io:一些具體的 I/O 工具,可以讓 Pulsar 的數(shù)據(jù)和其它軟件打通,比如 Kafka、Flink。

          • pulsar-package-management:提供了一種更簡(jiǎn)單的方法來(lái)管理包。比如抽象存儲(chǔ),這樣就可以將包存儲(chǔ)在任何地方,我們可以將包存儲(chǔ)在云上,以支持所有 Pulsar 包(如函數(shù)、連接器)的注冊(cè)表。

          • pulsar-proxy:Pulsar 的代理層。

          • pulsar-sql:Pulsar SQL 的主要實(shí)現(xiàn)模塊,基于 Presto(Facebook 開(kāi)發(fā)的數(shù)據(jù)查詢引擎),我們可以用 SQL 查詢 Pulsar 中的消息。

          • pulsar-transaction:Pulsar 的事務(wù)組件。

          • pulsar-websocket:Pulsar 的 WebSocket 通信實(shí)現(xiàn)。

          • pulsar-zookeeper-utils:Pulsar 關(guān)于 zk 的一些工具類。

          • tiered-storage:offload 的具體實(shí)現(xiàn)模塊,可以把冷數(shù)據(jù)卸載到 AWS、Google 等云上。

          四、環(huán)境驗(yàn)證

          我們?cè)谠创a中新建 pulsar-riemann-test 一個(gè)自己的測(cè)試模塊


          /**
          ?*?@author:?微信公眾號(hào)【老周聊架構(gòu)】
          ?*/

          public?class?PulsarClientTest?{
          ????public?static?void?main(String[]?args)?throws?PulsarClientException?{
          ????????PulsarClient?client?=?PulsarClient.builder()
          ????????????????.listenerThreads(1)
          ????????????????.ioThreads(1)
          ????????????????.serviceUrl("pulsar://127.0.0.1:6650")
          ????????????????.build();
          ????????System.out.println(client.toString());
          ????}
          }

          先寫個(gè) PulsarClientTest 測(cè)試類,然后跑一下,打印出日志,沒(méi)有報(bào)錯(cuò)的話,說(shuō)明這個(gè) Pulsar 源碼環(huán)境是 ok 的。

          org.apache.pulsar.client.impl.PulsarClientImpl@5a4aa2f2




          歡迎大家關(guān)號(hào)構(gòu)Java術(shù)棧的原理、源碼分析、架構(gòu)以及各種互聯(lián)網(wǎng)高并發(fā)、高性能、高可用的解決方案。

          瀏覽 105
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評(píng)論
          圖片
          表情
          推薦
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  国产黄色视频网站在线观看 | 婷婷久久5月天 | 日韩无码免费高清 | 91免费三级片网站 | 成人小说在线观看 |