Pulsar[2]-多台Linux服务器搭建集群

0 缘起

1)记录搭建完整测试环境集群全过程
2)为在测试环境对 Pulsar 进行功能测试做准备


1 准备资源

1)3台 Linux 裸机服务器,配置4G,2核
2)JDK8 运行环境
3)Pulsar 安装包
你在 Pulsar 官网下载最新版本的 Pulsar 安装包
(这里是以2.2.0版本为例)

http://pulsar.apache.org/zh-CN/download/

在这里插入图片描述


2 说明

1)Pulsar 集群搭建的最小组成需要3个组件集群,ZooKeeper 集群;Broker 集群(Broker 就是 Pulsar 的自身实例);BookKeeper 集群。

2)Pulsar 的安装包(apache-pulsar-2.2.0-bin-tar.gz) 已包含了搭建集群所需的各个组件库。无需单独下载 ZooKeeper 安装包和 BookKeeper 安装包。

3)3台 Linux 服务器IP,分别为 10.0.100.60 和 10.0.100.70 ,10.0.100.80。

4)如果是在内网测试环境搭建集群,为了避免防火墙带来的端口开启繁琐,建议把服务器防火墙关闭。


3 搭建集群的组成

1)zk 集群(3个 ZooKeeper 节点组成)
2)bookie 集群(3个 BookKeeper 节点组成)
3)broker 集群(3个 Pulsar 节点组成)


4 JDK 安装

1)Linux 裸机服务器,自行安装JDK(要求JDK8及以上版本)。
2)JDK8 安装过程(已安装请忽略)

(1)JDK8 下载地址(我用的安装包 jdk-8u201-linux-x64.tar.gz)

https://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html

(2)把安装包上传至 Linux 服务器文件目录(我的 Linux 目录如下,上传至此)

/home/admin/jdk-8u201-linux-x64.tar.gz

(3)新建文件夹目录 java,并把 JDK 安装包(jdk-8u201-linux-x64.tar.gz)解压到此目录。

cd /usr

sudo -u root mkdir java

cp /home/admin/jdk-8u201-linux-x64.tar.gz    /usr/java/

cd java/

tar -zxvf jdk-8u201-linux-x64.tar.gz

(4)编辑配置文件,配置环境变量

# 编辑配置文件
vim /etc/profile

# 配置文件中添加以下配置信息
JAVA_HOME=/usr/java/jdk1.8.0_201
CLASSPATH=$JAVA_HOME/lib/
PATH=$PATH:$JAVA_HOME/bin
export PATH JAVA_HOME CLASSPATH

(5)使配置文件生效

source /etc/profile

(6)检查JDK 安装是否成功,若显示 JDK 版本即安装成功

java -version

在这里插入图片描述

(7)另外两台服务器按照以上步骤进行相同操作。


5 集群环境部署准备(准备 ZooKeeper,Broker,Bookie 安装包)

(1)创建三个文件夹:zookeepers;brokers;bookies

# 工作目录下创建三个文件夹 zookeepers;brokers;bookies
cd /home/admin

mkdir zookeepers
mkdir brokers
mkdir bookies

(2)下载 Pulsar 安装包后,上传至 Linux 服务器,解压安装包(这里以2.2.0 版本为例)

# 解压安装包
tar -zxvf apache-pulsar-2.2.0-bin.tar.gz

(3)把解压后的文件分别复制到3个文件夹

# 把解压后的文件分别复制到3个文件夹
cp -ir  /home/admin/apache-pulsar-2.2.0/*    /home/admin/zookeepers/
cp -ir  /home/admin/apache-pulsar-2.2.0/*     /home/admin/brokers/
cp -ir  /home/admin/apache-pulsar-2.2.0/*     /home/admin/bookies/

(4)另外两台服务器按照以上步骤进行相同操作。


6 ZooKeeper 配置部署

(1)新建文件目录,并写入配置

# 新建文件目录
mkdir -p data/zookeeper

# 新建文件myid,写入值1
echo 1 > data/zookeeper/myid

在这里插入图片描述
:另外两台服务器,操作如下,myid 文件内容分别写入2 ;3

# 服务器2
mkdir -p data/zookeeper
echo 2 > data/zookeeper/myid

# 服务器3
mkdir -p data/zookeeper
echo 3 > data/zookeeper/myid

(2)对 zookeeper.conf 文件进行配置
在这里插入图片描述

# 指定 dataDir 目录
dataDir=/home/admin/data/zookeeper

# zookeeper 节点地址
server.1=10.0.100.60:2888:3888
server.2=10.0.100.70:2888:3888
server.3=10.0.100.80:2888:3888

:另外两台服务器,对 zookeeper.conf 文件进行完全相同的配置

(3)进入 zookeepers 目录,执行启动命令
在这里插入图片描述
执行启动命令:

# 进入 zookeepers 目录
cd /home/admin/zookeepers
# 执行后台运行命令
bin/pulsar-daemon start zookeeper

(4)验证 ZooKeeper 节点启动成功

# 进入 zookeepers 目录
cd /home/admin/zookeepers
# 执行 zookeeper 客户端连接命令
bin/pulsar zookeeper-shell

在这里插入图片描述
在这里插入图片描述
:Enter 键进入命令行界面后,可完全使用 ZooKeeper 的各种命令,如 ls; get 等命令。quit 命令退出命令行界面。

(5)另外两台服务器 ZooKeeper 节点部署做相同操作,接下来初始化集群元数据只需要在一个 ZooKeeper 节点执行一次即可

(6)初始化集群元数据
在这里插入图片描述

# 进入 zookeepers 目录
cd /home/admin/zookeepers

# 执行命令初始化集群元数据
bin/pulsar initialize-cluster-metadata \
--cluster pulsar-cluster \
--zookeeper 10.0.100.60:2181 \
--configuration-store 10.0.100.60:2181 \
--web-service-url http://pulsar.cluster.com:8080 \
--web-service-url-tls https://pulsar.cluster.com:8443 \
--broker-service-url pulsar://pulsar.cluster.com:6650 \
--broker-service-url-tls pulsar+ssl://pulsar.cluster.com:6651

(7) 查看集群元数据是否初始化成功

# 进入 zookeepers 目录
cd /home/admin/zookeepers
# 执行 ZooKeeper 客户端连接命令
bin/pulsar zookeeper-shell
# Enter键,使用 ZooKeeper 命令查看 
ls /
# 看到如下图所内容,表示初始化成功

在这里插入图片描述


7 BooKkeeper 配置部署

(1)修改配置文件 bookkeeper.conf

# 进入bookie 配置文件目录
cd /home/admin/bookies/conf
# 编辑 bookkeeper.conf 文件
vim bookkeeper.conf
# advertisedAddress 修改为服务器对应的ip,在另外两台服务器也做对应的修改
advertisedAddress=10.0.100.60
# 修改以下两个文件目录地址
journalDirectories=/home/admin/bookies/tmp/journal
ledgerDirectories=/home/admin/bookies/tmp/ledger
# 修改zk地址和端口信息
zkServers=10.0.100.60:2181,10.0.100.70:2181,10.0.100.80:2181

(2)初始化元数据并执行启动命令

# 先执行初始化元数据命令;再执行启动命令
# 进入 bookies 目录
cd  /home/admin/bookies
# 执行初始化元数据命令;若出现提示,输入 Y,继续(只需在一个bookie节点执行一次)
bin/bookkeeper shell metaformat
# 以后台进程启动bookie
bin/pulsar-daemon start bookie

(3)按照上面所述,启动另外两个 bookie 节点。

(4)验证bookie 是否启动成功

# 进入 bookies 目录
cd  /home/admin/bookies
# 验证是否启动成功
bin/bookkeeper shell bookiesanity
# 出现如下显示,表示启动成功

在这里插入图片描述

8 Broker 配置部署

(1)修改配置文件 broker.conf

# 进入配置文件目录
cd /home/admin/brokers/conf
# 编辑 broker.conf 文件
# 修改集群名,和 ZooKeeper 里初始化元数据时指定的集群名(--cluster pulsar-cluster)相同
clusterName=pulsar-cluster
# 修改如下两个配置,指定的都是 ZooKeeper 集群地址和端口号
zookeeperServers=10.0.100.60:2181,10.0.100.70:2181,10.0.100.80:2181 
configurationStoreServers=10.0.100.60:2181,10.0.100.70:2181,10.0.100.80:2181
# 修改如下参数为本服务器ip地址,另外两个 broker 节点配置文件也做对应修改
advertisedAddress=10.0.100.60

(2)执行命令,启动broker节点

# 进入 brokers 目录
cd /home/admin/brokers
# 以后台进程启动 broker
bin/pulsar-daemon start broker

(3)按照上面所述,对另外两个 broker 节点也做对应配置,并启动broker 节点

(4)查看集群中 brokers 节点信息,验证 broker 是否都启动成功

# 进入任一个 broker 目录
cd /home/admin/brokers
# 查看集群 brokers 节点情况
bin/pulsar-admin brokers list pulsar-cluster

至此,集群 ZooKeeper,Broker,Bookie 节点启动完毕,集群部署成功!接下来可以进行 HelloWorld 测试!


9 HelloWorld 测试 Pulsar

(1)依次创建集群、租户、命名空间、分区 topic、并为命名空间指定集群名。

# 进入 brokers 目录,选取任一个 broker 节点执行命令即可
cd /home/admin/brokers
# 创建集群(集群名:pulsar-cluster)
./bin/pulsar-admin clusters create --url http://pulsar.cluster.com:8080  pulsar-cluster
# 创建租户(租户名:my-tenant)
./bin/pulsar-admin tenants create my-tenant
# 创建命名空间(命名空间名:my-tenant/my-namespace,它指定了租户my-tenant)
./bin/pulsar-admin namespaces create my-tenant/my-namespace
# 创建持久性分区topic(topic全名:persistent://my-tenant/my-namespace/my-topic;分区数为 3)
./bin/pulsar-admin topics create-partitioned-topic persistent://my-tenant/my-namespace/my-topic -p 3
# 更新命名空间为其指定集群名
./bin/pulsar-admin namespaces set-clusters my-tenant/my-namespace --clusters pulsar-cluster

(2)生产者,消费者测试 demo。

(1 maven依赖

<dependency>
    <groupId>org.apache.pulsar</groupId>
    <artifactId>pulsar-client</artifactId>
    <!--指定你的实际版本号-->
    <version>{pulsar.version}</version>
</dependency>

(2 生产者

public class PulsarProducerDemo {
    // 连接集群 broker
    private static String localClusterUrl = "pulsar://10.0.100.60:6650";

    public static void main(String[] args) {
        try {
            Producer<byte[]> producer = getProducer();
            String msg = "hello world pulsar!";

            Long start = System.currentTimeMillis();
            MessageId msgId = producer.send(msg.getBytes());
            System.out.println("spend=" + (System.currentTimeMillis() - start) + ";send a message msgId = " + msgId.toString());
        } catch (Exception e) {
            System.err.println(e);
        }
    }

    public static Producer<byte[]> getProducer() throws Exception {
        PulsarClient client;
        client = PulsarClient.builder().serviceUrl(localClusterUrl).build();
        Producer<byte[]> producer = client.newProducer().topic("persistent://my-tenant/my-namespace/my-topic").producerName("producerName").create();
        return producer;
    }
}

(3 消费者

public class PulsarConsumerDemo {
    private static String localClusterUrl = "pulsar://10.0.100.60:6650";
    public static void main(String[] args) {
        try {
            //将订阅消费者指定的主题消息
            Consumer<byte[]> consumer = getClient().newConsumer()
                    .topic("persistent://my-tenant/my-namespace/my-topic")
                    .subscriptionName("my-subscription")
                    .subscribe();
            while (true) {
                Message msg = consumer.receive();
                System.out.printf("consumer-Message received: %s. \n", new String(msg.getData()));
                // 确认消息,以便broker删除消息
                consumer.acknowledge(msg);
            }
        } catch (Exception e) {
            System.out.println(e);
        }
    }

    public static PulsarClient getClient() throws Exception {
        PulsarClient client;
        client = PulsarClient.builder().serviceUrl(localClusterUrl).build();
        return client;
    }
}

在这里插入图片描述

  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 8
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

不甩锅的码农

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值