Pulsar分布式消息系统-docker-compose

 

1.说明

Apache Pulsar 是 Apache 软件基金会顶级项目,是下一代云原生分布式消息流平台,集消息、存储、轻量化函数式计算为一体。该系统源于 Yahoo,最初在 Yahoo 内部开发和部署,支持 Yahoo 应用服务平台 140 万个主题,日处理超过 1000 亿条消息。Pulsar 于 2016 年由 Yahoo 开源并捐赠给 Apache 软件基金会进行孵化,2018 年成为 Apache 软件基金会顶级项目。
Pulsar 作为下一代云原生分布式消息流平台,支持多租户、持久化存储、多机房跨区域数据复制,具有强一致性、高吞吐以及低延时的高可扩展流数据存储特性,内置诸多其他系统商业版本才有的特性,是云原生时代解决实时消息流数据传输、存储和计算的最佳解决方案。

 

Apache Pulsar 提供了统一的消费模型,支持 Stream(如 Kafka)和 Queue(如 RabbitMQ)两种消费模型, 支持 exclusive、failover 和 shared 三种消费模式。同时,Pulsar 提供和 Kafka 兼容的 API,以及 Kafka-On-Pulsar(KoP) 组件来兼容 Kafka 的应用程序,KoP 在 Pulsar Broker 中解析 Kafka 协议,用户不用改动客户端的任何 Kafka 代码就能直接使用 Pulsar
目前,Apache Pulsar 已经应用部署在国内外众多大型互联网公司和传统行业公司,案例分布在人工智能、金融、电信运营商、直播与短视频、物联网、零售与电子商务、在线教育等多个行业,如美国有线电视网络巨头 Comcast、Yahoo!、腾讯、中国电信、中国移动、BIGO、VIPKID 等。
目前 Apache Pulsar 项目原生核心贡献者已组成创业公司 StreamNative,进一步为 Apache Pulsar 提供更好的企业级服务支持与生态建设。

2.端口映射

 

序号 服务 docker 端口映射 备注
1 pulsar 8082:8080  
2 6650:6650  
3 dashboard 81:80  
4 pulsar-manager 9527:9527  
7750:7750  

3.部署

部署目录统一放在: /data/insightone/middleware/

内网部署

Pulsar-standalone模式

# 克隆项目
git clone https://git.insightone.cn/middleware/pulsar.git
cd pulsar-standalone

创建数据日志目录

mkdir -p data/ dbdata/ logs/
# 给目录赋予权限
chmod -R 777 data/ dbdata/ logs/ conf/ ssl/ mgconf

修改 application.properties

spring.cloud.refresh.refreshable=none
server.port=7750

# configuration log
logging.path=
logging.file=pulsar-manager.log

# DEBUG print execute sql
logging.level.org.apache=INFO

修改 standalone.conf

vim standalone.conf
# 修改服务名
# Name of the cluster to which this broker belongs to
clusterName=pulsar-service-1
# 启动端口号,地址
brokerServicePort=6650
# Port to use to server HTTP request
webServicePort=8080
# 启动地址
# Hostname or IP address the service binds on, default is 0.0.0.0.
bindAddress=0.0.0.0
# 修改客户端上传文件大小KB
nettyMaxFrameSizeBytes=525312000
maxMessageSize=524288000

修改 docker-compose.yaml

# 配置bookie内存
environment:
  - BOOKIE_MEM=" -Xms1g -Xmx1g -XX:MaxDirectMemorySize=2g"
# 配置容器名称
container_name: pulsar_service_1
启动容器
# 赋予所有sh脚本启动权限
cd pulsar
chmod a+x pulsar*/*.sh
./start.sh 

Pulsar-cluster模式

修改 application.properties

spring.cloud.refresh.refreshable=none
server.port=7750
# configuration log
logging.path=
logging.file=pulsar-manager.log
# DEBUG print execute sql
logging.level.org.apache=INFO

修改broker.conf

# Zookeeper集群地址
zookeeperServers=zk1:2181,zk2:2181,zk3:2181
# 存储
configurationStoreServers=zk1:2181,zk2:2181,zk3:2181
# 启动端口
brokerServicePort=6650
# 启动地址
bindAddress=0.0.0.0
# 服务名
clusterName=pulsar-cluster-1
# Broker data port
brokerServicePort=6650
# 上传文件大小
maxMessageSize=524288000

修改proxy.conf

# Zookeeper集群地址
zookeeperServers=zk1:2181,zk2:2181,zk3:2181
# 存储
configurationStoreServers=zk1:2181,zk2:2181,zk3:2181
bindAddress=0.0.0.0
# 服务端口
servicePort=6650

 修改zookeeper.conf

客户端端口
# 启动端口
clientPort=2181
# 集群端口
# zookeper servers
server.1=zk1:2888:3888
server.2=zk2:2888:3888
server.3=zk3:2888:3888

 修改docker-compose-cluster.yaml

# 修改服务占用参数
limits:
  cpus: '0.50'
memory: 1024M

 离线部署

下载全部镜像 https://deploystore.insightone.cn/middleware/pulsar/images/
#导入镜像
sh load_image.sh
下载项目 https://deploystore.insightone.cn/middleware/pulsar/project/
# 解压项目并启动
unzip pulsar.zip
# 赋予项目执行权限
cd pulsar
chmod a+x pulsar*/*.sh
# 1.启动 pulsar-standalone
cd pulsar/pulsar-standalone
./start.sh
# 2.启动 pulsar-cluster
cd pulsar/pulsar-cluster
./start.sh
PS: 运行完成可以根据内网部署参数修改对应参数。

 3. manager创建账号密码

# 创建token
CSRF_TOKEN=$(curl http://localhost:7750/pulsar-manager/csrf-token)
# 创建账号
curl -H 'X-XSRF-TOKEN: $CSRF_TOKEN' \
-H 'Cookie: XSRF-TOKEN=$CSRF_TOKEN;' \
-H "Content-Type: application/json" -X PUT http://localhost:7750/pulsar-manager/users/superuser \
-d '{"name": "admin", "password": "pulsar123", "description": "dev", "email": "jianyang@dongjian.com"}'
创建成功 {"message":"Add super user success, please login"}

manager页面添加环境

Service_URL=http://standalone:8080
访问 http://xxxxx:9527 url处填写 http://xxxxx:8080 即可
提示: 填写容器ip+端口 http://172.18.0.13:8080 或 http://standalone:8080

5.Token配置

配置密钥对

# cluster模式
docker exec pulsar_cluster_pulsar-proxy_1 bash -c "bin/pulsar tokens create-secret-key --output /pulsar/ssl/my-secret.key"
# standalone模式
docker exec standalone bash -c "bin/pulsar tokens create-secret-key --output /pulsar/ssl/my-secret.key"

 生成用于超级管理员的 token

# 创建对应的账户token
docker exec pulsar_cluster_pulsar-proxy_1 bash -c "bin/pulsar tokens create --secret-key /pulsar/ssl/my-secret.key --subject admin"
docker exec standalone bash -c "bin/pulsar tokens create --secret-key /pulsar/ssl/my-secret.key --subject admin"

配置集群broker的 broker.conf

broker的配置和官网描述的有所不同,注意不要配置错误,否则无法使用。
集群中的每个节点的broker的配置都要修改,并且将 public.key文件分发到各个节点。
brokerClientAuthenticationParameters配置的为超级管理员的token
# 开启认证
authenticationEnabled=true
# 认证提供者
authenticationProviders=org.apache.pulsar.broker.authentication.AuthenticationProviderToken
# 开启授权
authorizationEnabled=true
# 超级管理员
superUserRoles=admin
# broker Client 使用等认证插件
brokerClientAuthenticationPlugin=org.apache.pulsar.client.impl.auth.AuthenticationToken
# broker Client 通讯使用的 token(需要 admin role)
brokerClientAuthenticationParameters={"token":"eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJhZG1pbiJ9.zok9qhSqPuyb2fdfFO0Dro1e4sWsr5O63hrbjLnLkPs"}
# 使用 tokenPublicKey 的公钥文件位置
tokenSecretKey=/pulsar/ssl/my-secret.key
配置proxy.conf
authenticationEnabled=true
authenticationProviders=org.apache.pulsar.broker.authentication.AuthenticationProviderToken
brokerClientAuthenticationPlugin=org.apache.pulsar.client.impl.auth.AuthenticationToken
#my-proxy-role角色的token
brokerClientAuthenticationParameters={"token":"eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJhZG1pbiJ9.2efNTlaN2jWMbUZ8CZclUV0HfW3sIijq1OxABWZrcg4"}
tokenSecretKey=/pulsar/ssl/my-secret.key
5.重启
sh stopr.sh
sh start.sh 

验证

  • python验证脚本
vim client_test.py
import pulsar
from pulsar import Client, AuthenticationToken
client = Client('pulsar://192.168.3.158:6650', authentication=AuthenticationToken('eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJhZG1pbiJ9.zok9qhSqPuyb2fdfFO0Dro1e4sWsr5O63hrbjLnLkPs'))
#client = Client('pulsar://192.168.3.158:6650'))
producer = client.create_producer('my-topic1')
producer.send(('a'*1024*1024*60).encode('utf-8'))
client.close()
  • 安装Python3环境依赖包

# 指定国内清华源安装更快
pip3 install pulsar-client pulsar -i https://pypi.tuna.tsinghua.edu.cn/simple
  • 给脚本赋予执行权限

# 赋权
chmod a+x client_test.py
# 验证
python3 client_test.py
posted @ 2023-02-08 11:32  王竹笙  阅读(456)  评论(0编辑  收藏  举报