Pulsar源码的环境搭建

635 阅读4分钟

首先我们要准备的jdk环境是JDK17并且需要安装git。maven我原本使用的版本是3.6.1,但是我用的这个版本不知道是版本有点老还是配置的阿里云的原因,maven build的时候一直出错。 以下是我们安装环境的步骤。

将源代码克隆到您的开发机器:

git clone https://github.com/apache/pulsar

假定从项目根目录执行以下命令:

cd pulsar

编译并安装到本地 Maven 仓库:

mvn clean install -DskipTests

这个过程如果不用国内节点的话大概需要两个小时左右。

b1b41da1547475fb0f1dcf6c335a9e4.png 出现这个界面就是安装好了,就可以使用IDEA打开了。

辅助、测试类的模块

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

  • bouncy-castle:一个 Java 库,对默认 Java Cryptographic Extension(JCE)的补充,它比 Sun 提供的默认 JCE 多了许多密码套件和算法。Pulsar 的安全性和加密技术依赖于它。

  • build:一些 CI 以及 docker 的构建脚本。

  • buildtools:主要是包含一些构建时使用的工具,比如我们在 Github 上为 Pulsar 提交了一个 PR,会自动触发测试,由该模块完成。

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

  • deployment:部署相关,比如 k8s 的一些配置文件。

  • dev:里面目前只有 Vagrantfile 文件,主要描述项目所需的机器类型,以及如何配置和提供这些机器。

  • distribution:如果我们执行了编译操作,那么最后的编译产物就会在这个目录下,分为 io(即 connector)、offloaders、server 这三个子模块,server 就是主体的 Pulsar 程序。

  • docker、docker-compose:docker 镜像模块,里面有对应的 Dockerfile。

  • jclouds-shaded、kafka-connect-avro-converter-shaded、pulsar-broker-shaded、pulsar-client-admin-shaded:shaded 模块是使用 maven-shade-plugin 生成的,主要作用:将依赖的 jar 包打包到当前 jar 包中、重命名依赖的 jar 包。

  • managed-ledger:managed-ledger 是 Pulsar 底层存储 BookKeeper 中的概念,相当于一种记录的集合) 缓存中调度消息,除非积压的消息超过这个缓存的大小。 如果积压的消息对于缓存来说太大了,则 Broker 将开始从 BookKeeper 那里读取 Entries(Entry 同样是 BookKeeper 中的概念,相当于一条记录)。

    • pulsar-client-tools-test:CLI 工具测试相关。
  • pulsar-common:Pulsar 的通用模块。Broker 和 Client 都会同时引用的公共模块,里面定义了一些两边都会用到的对象,比如 PulsarApi.proto。

  • pulsar-config-validation:用于校验配置正确性的通用包,在 Function 和 I/O 中会被使用。

  • pulsar-metadata:Pulsar 相关元数据信息。

  • pulsar-testclient:Pulsar 测试的一些客户端。

  • structured-event-log:日志事件相关。

  • testmocks:单元测试的时候,有很多 Mock 的工具类都放在这个模块里。

  • tests:用于测试(比如集成测试、兼容性测试、shade 模块测试等)的模块,都在这个模块中。

功能相关的模块

  • pulsar-broker:最主要的模块,Pulsar 的服务端 Broker。
  • pulsar-broker-auth-athenz:Broker 的 Athenz 身份验证插件。
  • pulsar-broker-auth-sasl:Broker 的 SASL 身份验证插件。
  • pulsar-broker-common:Broker 端的通用模块,被 pulsar-functions、pulsar-websocket 等模块共同使用。例如:身份验证、配置缓存等通用能力。
  • pulsar-client:数据流客户端,通常被业务使用,比如最基础的发布、订阅消息。
  • pulsar-client-1x-base:Pulsar 对 1.x 版本的协议做了兼容,这个是 1.x 版本的协议的客户端。
  • pulsar-client-admin:管理流客户端,用于调用管理相关的接口,比如创建、删除 Topic。
  • pulsar-client-admin-api:管理流客户端相关的接口。
  • pulsar-client-all:单纯用于构建完整的客户端,管理流和数据流都打到一个包里。
  • pulsar-client-api:Client 的通用 API。
  • pulsar-client-auth-athenz:Client 的 Athenz 身份验证插件。
  • pulsar-client-auth-sasl:Client 的 SASL 身份验证插件。
  • pulsar-client-cpp:Pulsar 的 C++ 客户端。
  • pulsar-client-messagecrypto-bc:消息加密工具库。
  • pulsar-client-tools:一些 CLI 工具。
  • pulsar-function-go:Pulsar Function go 语言相关。
  • pulsar-functions:Pulsar Function 的主要实现。
  • pulsar-io:一些具体的 I/O 工具,可以让 Pulsar 的数据和其它软件打通,比如 Kafka、Flink。
  • pulsar-package-management:提供了一种更简单的方法来管理包。比如抽象存储,这样就可以将包存储在任何地方,我们可以将包存储在云上,以支持所有 Pulsar 包(如函数、连接器)的注册表。
  • pulsar-proxy:Pulsar 的代理层。
  • pulsar-sql:Pulsar SQL 的主要实现模块,基于 Presto(Facebook 开发的数据查询引擎),我们可以用 SQL 查询 Pulsar 中的消息。
  • pulsar-transaction:Pulsar 的事务组件。
  • pulsar-websocket:Pulsar 的 WebSocket 通信实现。
  • pulsar-zookeeper-utils:Pulsar 关于 zk 的一些工具类。
  • tiered-storage:offload 的具体实现模块,可以把冷数据卸载到 AWS、Google 等云上。