Apache Pulsar 2.9.1单集群部署

1. 安装规划

总共3台服务器,在每台服务器上都安装Zookeeper、Pulsar broker、Bookeeper bookie

其中客户端使用包含了所有broker地址的URL与Pulsar集群通信。所有brokers和 bookies都依赖ZooKeeper

2. 依赖安装

安装Java8:请参考centos7同时安装java8和openJdk11、windows同时安装java8和openJdk11
安装Zookeeper:请参考基于Centos7分布式安装Zookeeper3.6.3

3. 下载解压(pulsar1上)

[root@pulsar1 ~]# wget --no-check-certificate https://dlcdn.apache.org/pulsar/pulsar-2.9.1/apache-pulsar-2.9.1-bin.tar.gz
[root@pulsar1 ~]#
[root@pulsar1 ~]# tar -zxvf apache-pulsar-2.9.1-bin.tar.gz
[root@pulsar1 ~]#
[root@pulsar1 ~]# cd apache-pulsar-2.9.1
[root@pulsar1 apache-pulsar-2.9.1]#
[root@pulsar1 apache-pulsar-2.9.1]# ll instances/
总用量 10832
drwxr-xr-x. 2 root root        6 1月  22 2020 deps
-rw-r--r--. 1 root root 11083846 1月  22 2020 java-instance.jar
drwxr-xr-x. 4 root root     4096 1月  22 2020 python-instance
[root@pulsar1 apache-pulsar-2.9.1]# 

其中instances目录下,都是为Pulsar Functions创建的组件

4. 修改配置(pulsar1上)

  1. 修改conf/pulsar_env.sh的内容如下:
PULSAR_MEM=${PULSAR_MEM:-"-Xms512m -Xmx512m -XX:MaxDirectMemorySize=1g"}
  1. 修改conf/bookkeeper.conf的内容如下
zkServers=pulsar1:2181,pulsar2:2181,pulsar3:2181
  1. 修改conf/broker.conf的内容如下
zookeeperServers=pulsar1:2181,pulsar2:2181,pulsar3:2181

configurationStoreServers=pulsar1:2181,pulsar2:2181,pulsar3:2181

webServicePort=8086

clusterName=pulsar-cluster

# 不删除不活跃的topic
brokerDeleteInactiveTopicsEnabled=false
  1. 修改conf/client.conf的内容如下
webServiceUrl=http://pulsar1:8086,pulsar2:8086,pulsar3:8086

brokerServiceUrl=pulsar://pulsar1:6650,pulsar2:6650,pulsar3:6650

5. 安装内置连接器(可选)

暂不安装

6. 安装分层存储卸载程序(可选)

暂不安装

7. 启用Pulsar Function并运行Function(可选)

暂不启用

8. 分发apache-pulsar-2.9.1(pulsar1上)

将apache-pulsar-2.9.1目录分发到pulsar2和pulsar3服务器上

[root@pulsar1 ~]# scp -r apache-pulsar-2.9.1 root@pulsar2:/root
[root@pulsar1 ~]# scp -r apache-pulsar-2.9.1 root@pulsar3:/root

9. 初始化集群元数据(pulsar1)

可以在任何一台pulsar服务器上进行初始化,这里我们在pulsar1上进行初始化

[root@pulsar1 apache-pulsar-2.9.1]# 
[root@pulsar1 apache-pulsar-2.9.1]# bin/pulsar initialize-cluster-metadata \
> --cluster pulsar-cluster \
> --zookeeper pulsar1:2181 \
> --configuration-store pulsar1:2181 \
> --web-service-url http://pulsar1:8086,pulsar2:8086,pulsar3:8086 \
> --broker-service-url pulsar://pulsar1:6650,pulsar2:6650,pulsar3:6650
[root@pulsar1 apache-pulsar-2.9.1]# 

参数说明如下:

  • –zookeeper:只能指定zookeeper集群的一台服务器
  • –configuration-store:只能指定zookeeper集群的一台服务器
  • –broker-service-url:用于与集群中的broker进行交互

通过客户端连接Zookeeper,可以看到已经初始化成功了

[zk: pulsar1:2181,pulsar2:2181,pulsar3:2181(CONNECTED) 0] ls /
[admin, bookies, ledgers, pulsar, stream, zookeeper]
[zk: pulsar1:2181,pulsar2:2181,pulsar3:2181(CONNECTED) 1]

produce和consume topic,最终会在zookeeper下创建如下目录

[admin, bookies, counters, ledgers, loadbalance, managed-ledgers, namespace, pulsar, schemas, stream]

10. 运行(3台服务器)

10.1 启动Bookeeper

[root@pulsar1 apache-pulsar-2.9.1]# 
[root@pulsar1 apache-pulsar-2.9.1]# bin/pulsar-daemon start bookie

如果要停止Bookeeper,运行bin/pulsar-daemon stop bookie即可

使用下列命令可以看到,当前服务器的Bookeeper已经启动成功。检测原理是在本地的bookie创建一个临时的BookKeeper ledger,往里面写一些entries,然后读取它,最后删除这个ledger

[root@pulsar1 apache-pulsar-2.9.1]# 
[root@pulsar1 apache-pulsar-2.9.1]# bin/bookkeeper shell bookiesanity
2022-03-14T11:27:04,757+0800 [main] INFO  org.apache.bookkeeper.tools.cli.commands.bookie.SanityTestCommand - Bookie sanity test succeeded
2022-03-14T11:27:04,757+0800 [main-EventThread] INFO  org.apache.zookeeper.ClientCnxn - EventThread shut down for session: 0x10007a2d9530005
[root@pulsar1 apache-pulsar-2.9.1]#

也可以使用以下方法,在一台服务器上,验证所有的Bookeeper是否启动成功。其中数字3表示集群中Bookeeper的数量。检测原理是在集群上创建和bookie同等数量的ledger,并往里面写一些entries,然后读取它,最后删除这个ledger

[root@pulsar1 apache-pulsar-2.9.1]# bin/bookkeeper shell simpletest --ensemble 3 --writeQuorum 3 --ackQuorum 3 --numEntries 3
......省略部分......
2022-03-14T11:41:28,410+0800 [main] INFO  org.apache.bookkeeper.tools.cli.commands.client.SimpleTestCommand - 3 entries written to ledger 3
......省略部分......
[root@pulsar1 apache-pulsar-2.9.1]#

10.2 启动broker

[root@pulsar1 apache-pulsar-2.9.1]# bin/pulsar-daemon start broker

如果要停止Broker,运行bin/pulsar-daemon stop broker即可

public/default namespace会自动被创建。所有Pulsar的topic都在namespace中进行管理

等所有broker启动完毕,在一台服务器上检验所有broker是否启动成功

[root@pulsar1 apache-pulsar-2.9.1]# bin/pulsar-admin brokers list pulsar-cluster
"pulsar1:8086"
"pulsar2:8086"
"pulsar3:8086"

11. 使用Pulsar

先在命令行启动consume进行消息的消费

[root@pulsar1 apache-pulsar-2.9.1]# 
[root@pulsar1 apache-pulsar-2.9.1]# bin/pulsar-client consume \
> persistent://public/default/test \
> -n 100 \
> -s "consumer-test" \
> -t "Exclusive"
......省略部分......
2022-03-14T13:58:52,117+0800 [pulsar-client-io-1-1] INFO  org.apache.pulsar.client.impl.ConsumerImpl - [persistent://public/default/test][consumer-test] Subscribed to topic on pulsar2/192.168.23.112:6650 -- consumer: 0

参数说明如下:

  • -n:消费的消息条数,消费完了就退出客户端。如果等于0,表示消费所有数据。默认为1
  • -s:指定subscription-name
  • -t:指定subscription-type,默认为Exclusive

pulsar会自动在public/default下创建topic

然后在另一个窗口,启动produce进行消息的产生。

[root@pulsar1 apache-pulsar-2.9.1]# bin/pulsar-client produce \
> persistent://public/default/test \
> -n 1 \
> -m "Hello Pulsar"
......省略部分......
2022-03-14T14:06:38,192+0800 [main] INFO  org.apache.pulsar.client.cli.PulsarClientTool - 1 messages successfully produced
[root@pulsar1 apache-pulsar-2.9.1]#

参数说明如下:

  • -n:发送消息的次数,默认为1
  • -m:发送的消息内容

再次查看consume窗口,可以看到已经获取到了消息

2022-03-14T14:06:36,112+0800 [pulsar-client-io-1-1] INFO  com.scurrilous.circe.checksum.Crc32cIntChecksum - SSE4.2 CRC32C provider initialized
----- got message -----
key:[null], properties:[], content:Hello Pulsar
2022-03-14T14:06:49,805+0800 [pulsar-timer-5-1] INFO  org.apache.pulsar.client.impl.ConsumerStatsRecorderImpl - [persistent://public/default/test] [consumer-test] [86c21] Prefetched messages: 0 --- Consume throughput received: 0.02 msgs/s --- 0.00 Mbit/s --- Ack sent rate: 0.02 ack/s --- Failed messages: 0 --- batch messages: 0 ---Failed acks: 0

12 Pulsar consume不能消费数据解决办法

有的时候pulsar的consume不能消费topic的数据

解决办法:

  1. produce不要往topic发送null空值数据,比如producer.send(null)
  2. 先开启一个consume消费数据,再往topic发送数据。后面这个consume和其它consume就可以消费到数据了
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在MATLAB中实现机械臂的仿真可以使用Robotic System Toolbox来进行。Robotic System Toolbox包含许多工具和函数,可以实现机械臂的建模、控制和仿真。 首先,需要定义机械臂的模型。可以使用robotics.RigidBodyTree类来创建机械臂的刚体树结构。通过添加关节和刚体可以构建机械臂的结构。可以使用函数robotics.RigidBody来创建刚体,并使用函数robotics.Joint来创建关节。 接下来,可以使用robotics.RigidBodyTree类中的函数来定义机械臂的初始状态。可以设置每个关节的初始位置和速度。 然后,可以使用robotics.RigidBodyTree类中的函数来进行机械臂的运动控制。可以使用函数robotics.InverseKinematics来实现逆运动学,根据目标位置和姿态来求解关节角度。可以使用函数robotics.CartesianTrajectory来生成机械臂的轨迹,指定起始和目标位置以及运动时间。 最后,可以使用robotics.RigidBodyTree类中的函数来进行机械臂的仿真。可以使用函数robotics.Rate来指定仿真的频率,然后使用循环来更新机械臂的状态和控制输入,实现机械臂的运动。 以下是一个基本的机械臂仿真的示例代码: ```matlab % 创建机械臂模型 robot = robotics.RigidBodyTree; % 添加机械臂的关节和刚体 % 设置机械臂的初始状态 % 运动控制 % 仿真循环 % 绘制机械臂的运动轨迹 ``` 在实际的机械臂仿真中,可能还需要考虑机械臂的动力学、碰撞检测和路径规划等问题。可以使用Robotic System Toolbox中的其他工具和函数来处理这些问题。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值