Pulsar分布式消息系统-docker-compose
1.说明
Apache Pulsar 是 Apache 软件基金会顶级项目,是下一代云原生分布式消息流平台,集消息、存储、轻量化函数式计算为一体。该系统源于 Yahoo,最初在 Yahoo 内部开发和部署,支持 Yahoo 应用服务平台 140 万个主题,日处理超过 1000 亿条消息。Pulsar 于 2016 年由 Yahoo 开源并捐赠给 Apache 软件基金会进行孵化,2018 年成为 Apache 软件基金会顶级项目。
Pulsar 作为下一代云原生分布式消息流平台,支持多租户、持久化存储、多机房跨区域数据复制,具有强一致性、高吞吐以及低延时的高可扩展流数据存储特性,内置诸多其他系统商业版本才有的特性,是云原生时代解决实时消息流数据传输、存储和计算的最佳解决方案。
![](https://img2023.cnblogs.com/blog/1173200/202303/1173200-20230328165254323-1735975801.png)
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
![](https://img2023.cnblogs.com/blog/1173200/202303/1173200-20230328165405851-591289752.png)
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
![](https://img2023.cnblogs.com/blog/1173200/202303/1173200-20230328165440700-1876704920.png)
本文来自博客园,作者:王竹笙,转载请注明原文链接:https://www.cnblogs.com/edeny/p/17101181.html