1.Pulsar 基本介绍
1.1.背景
Apache Pulsar的功能与特性:
1、多租户模式
2、灵活的消息系统
3、云原生架构
4、segmented Sreams(分片流)
5、支持跨地域复制
1.2.优势
1、Pulsar 不仅可以如同 Kafka 一样处理高速率实时场景,还能支持传统的标准消息队列模式,例如多消费者和失效备援订阅及延时消息等。很多公司常常会在 Kafka 和 MQ 之间做选择,这是因为在实时流式架构中,消息用例可被分为两类:队列和流。而 Pulsar 最优秀的地方正在于此,它将队列和流合二为一,统一为消息传递模型(producer-topic-subscription-consumer)!一个 Pulsar 系统,直接让你拥有 RabbitMQ + RocketMQ + Kafka 的各项特性!
2、Pulsar 采用云原生架构,它的架构设计能够充分利用分布式且能弹性扩容云端资源,快速告别性能不足,集群扩容缩容非常方便。
3、采用多租户的管理,分层结构管理topic,租户(团队)–>Namespace(团队产品)–>topic,可以根据租户来进行资源隔离和授权,一个大的集群里面支持整个公司的业务,一个平台实现数据共享。
4、支持跨地域复制,多个Pulsar cluster 可以双向复制,且多Pulsar cluster offset可以同步到多个集群。Kafka 仅支持单项复制。
5、Consumer 可以动态扩容缩容,处理队列消息积压,Kafka受限于分区,动态缩容很复杂,且一个分区近支持一个Consumer处理,扩容Kafka分区需要程序重启适配。
1.3.缺点
1、Pulsar 一些大厂有过测试,读写性能只有Kafka的一半左右,主要是Pulsar设计之初就是强一致、不丢数据
2、大部分技术团队储备薄弱,无生产实践经验
Pulsar官方性能测试场景少有些片面(同步、异步,不同ack机制不一样,多大的批,一条数据多大,延时和吞吐量都是相反的)
2. kafka目前存在的痛点
Pulsar 诞生之初就一直拿Kafka 做对比,并且最大的竞争对手也是Kafka,这里列出了一些Kafka的缺点,在pulsar中都有比较好的解决方法。
1、Kafka 很难进行扩展,因为 Kafka 把消息持久化在 broker 中,迁移主题分区时,需要把分区的数据完全复制到其他 broker 中,这个操作非常耗时。
2、当需要通过更改分区大小以获得更多的存储空间时,会与消息索引产生冲突,打乱消息顺序。因此,如果用户需要保证消息的顺序,Kafka 就变得非常棘 手了。
3、如果分区副本不处于 ISR(同步)状态,那么 leader 选取可能会紊乱。一般地,当原始主分区出现故障时,应该有一个 ISR 副本被征用,但是这点并 不能完全保证。若在设置中并未规定只有 ISR 副本可被选为 leader 时,选出一个处于非同步状态的副本做 leader,这比没有 broker 服务该 partition 的情况更糟糕。
4、使用 Kafka 时,你需要根据现有的情况并充分考虑未来的增量计划,规划 broker、主题、分区和副本的数量,才能避免 Kafka 扩展导致的问题。这是 理想状况,实际情况很难规划,不可避免会出现扩展需求。
5、Kafka 集群的分区再均衡会影响相关生产者和消费者的性能。
6、发生故障时,Kafka 主题无法保证消息的完整性(特别是遇到第 3 点中的情况,需要扩展时极有可能丢失消息)。
7、众所周知,Kafka 原生的跨地域复制机制(MirrorMaker)有问题,即使只在两个数据中心也无法正常使用跨地域复制。因此,甚至 Uber 都不得不创建 另一套解决方案来解决这个问题,并将其称为 uReplicator (https://eng.uber.com/ureplicator/)。
8、Kafka 没有原生的多租户功能来实现租户的完全隔离,它是通过使用主题授权等安全功能来完成的
3.pulsar 架构介绍
单个Pulsar集群由以下三部分组成:
- 多个 broker 负责处理和负载均衡 producer 发出的消息,并将这些消息分派给 consumer;Broker 与 Pulsar 配 置存储交互来处理相应的任务,并将消息存储在 BookKeeper 实例中(又称 bookies);Broker 依赖 ZooKeeper 集群处理特定的任务,等等。
- 多个 bookie 的 BookKeeper 集群负责消息的持久化存储。
- 一个zookeeper集群,用来处理多个Pulsar集群之间的协调任务。
3.1.Brokers介绍
- 一个 HTTP 服务器, 它暴露了 REST 系统管理接口以及在生产者和消费者之间进行 Topic查找的API。
- 一个调度分发器, 它是异步的TCP服务器,通过自定义 二进制协议应用于所有相关的数据传输。
出于性能考虑,消息通常从Managed Ledger缓存中分派出去,除非积压超过缓存大小。如果积压的消息对于缓存来说太 大了, 则Broker将开始从BookKeeper那里读取Entries(Entry同样是BookKeeper中的概念,相当于一条记录)。
3.2.Zookeeper的元数据存储
Pulsar使用Apache Zookeeper进行元数据存储、集群配置和协调
- 配置存储: 存储租户,命名域和其他需要全局一致的配置项
- 每个集群有自己独立的ZooKeeper保存集群内部配置和协调信息,例如归属信息,broker负载报告,BookKeeper ledger信息(这个是BookKeeper本身所依赖的)等等
3.3.bookKeeper持久化存储
Pulsar用 Apache bookKeeper作为持久化存储。 bookKeeper是一个分布式的预写日志(WAL)系统,有如下几个特性特别适合Pulsar的应用场景:
1、使pulsar能够利用独立的日志,称为ledgers. 可以随着时间的推移为topic创建多个Ledgers
2、它为处理顺序消息提供了非常有效的存储
3、保证了多系统挂掉时Ledgers的读取一致性
4、提供不同的Bookies之间均匀的IO分布的特性
5、它在容量和吞吐量方面都具有水平伸缩性。能够通过增加bookies立即增加容量到集群中,并提升吞吐量
6、Bookies被设计成可以承载数千的并发读写的ledgers。 使用多个磁盘设备 (一个用于日志,另一个用于一般存 储) ,这样Bookies可以将读操作的影响和对于写操作的延迟分隔开。
- Pulsar Broker可以创建ledeger,添加内容到ledger和关闭ledger。
- 当一个ledger被关闭后,除非明确的要写数据或者是因为写入器挂掉导致ledger关闭,ledger只会以只读模式打开。
- 最后,当ledger中的条目不再有用的时候,整个ledger可以被删除(ledger分布是跨Bookies的)。
3.4.Pulsar 代理 (可选)
Pulsar客户端和Pulsar集群交互的一种方式就是直连Pulsar brokers。然而,在某些情况下,这种直连既不可行也不可 取,因为客户端并不知道broker的地址。 例如在云环境或者Kubernetes以及其他类似的系统上面运行Pulsar,直连 brokers就基本上不可能了。
4.pulsar 分布式模式部署
4.1.部署说明
搭建 Pulsar 集群至少需要 3 个组件:ZooKeeper 集群、BookKeeper 集群和 broker 集群(Broker 是 Pulsar 的自身实例)。这 三个集群组件如下:
- ZooKeeper 集群(3 个 ZooKeeper 节点组成)
- bookie 集群(也称为 BookKeeper 集群,3 个 BookKeeper 节点组成)
- broker 集群(3 个 Pulsar 节点组成)
4.2.zookeeper搭建
docker run --privileged=true -d --name zookeeper -p 2181:2181 -d zookeeper:latest
图省事:这里Zookeeper使用docker安装一个节点,线上需要使用三个节点
4.3.pulsar 安装配置
cd /opt/module/ wget https://archive.apache.org/dist/pulsar/pulsar-2.8.1/apache-pulsar-2.8.1-bin.tar.gz tar xf apache-pulsar-2.8.1-bin.tar.gz ln -s apache-pulsar-2.8.1 pulsar
(2)bookkeeper配置
]# vim pulsar/conf/bookkeeper.conf #设置成本机的IP地址,这里的pulsar01配置了hosts advertisedAddress=pulsar01 journalDirectory=/data/bookkeeper/journal ledgerDirectories=/data/bookkeeper/ledgers zkServers=pulsar01:2181
(3)修改broker集群的配置文件
]# vim pulsar/conf/broker.conf # 配置集群名称 clusterName=pulsar-cluster # 配置zookeeper集群地址 zookeeperServers=pulsar01 # 配置zookeeper集群地址 configurationStoreServers=pulsar01 # 设置成本机IP地址 advertisedAddress=pulsar01
(4)将配置好的pulsar目录推送到pulsar02和pulsar03节点
(5)pulsar02和pulsar03节点修改broker和bookkeeper地址为本机IP
4.4.pulsar初始化
注意:pulsar 初始化之前需要保障zookeeper集群是正常运行
初始化集群步骤如下:
cd /opt/module/pulsar/bin/ ./pulsar initialize-cluster-metadata \ --cluster pulsar-cluster \ --zookeeper pulsar01:2181 \ --configuration-store pulsar01:2181 \ --web-service-url http://pulsar01:8080,pulsar02:8080,pulsar03:8080 \ --web-service-url-tls https://pulsar01:8443,pulsar02:8443,pulsar03:8443 \ --broker-service-url pulsar://pulsar01:6650,pulsar02:6650,pulsar03:6650 \ --broker-service-url-tls pulsar+ssl://pulsar01::6651,pulsar02:6651,pulsar03:6651
初始化bookkeeper集群:若出现提示输入Y/N,输入Y即可
./bookkeeper shell metaformat
初始化操作,仅需要执行一次即可
4.5.
1、 启动bookkeeper服务(三个节点都执行启动命令)
cd /opt/module/pulsar/bin/ ./pulsar-daemon start bookie
验证是否启动
./bookkeeper shell bookiesanity
提示:Bookie sanity test succeeded 则认为启动成功
./pulsar-daemon start broker
验证是否启动:
[root@pulsar01 bin]# ./pulsar-admin brokers list pulsar-cluster "pulsar02:8080" "pulsar03:8080" "pulsar01:8080"
4.6.pulsar 集群测试
在pulsar的bin目录下, 专门提供了一个pulsar-client的客户端工具, Pulsar-Clinet工具允许使用者在运行的集群中消费并发送消息到 Pulsar Topic中
模拟开启消费者监听数据:
./pulsar-client consume persistent://public/default/test -s "consumer-test"
模拟生产一条数据:
./pulsar-client produce persistent://public/default/test --messages "hello-pulsar"
5.pulsar 可视化管理工具
(1)下载安装
wget https://archive.apache.org/dist/pulsar/pulsar-manager/pulsar-manager-0.2.0/apache-pulsar-manager-0.2.0-bin.tar.gz tar xf apache-pulsar-manager-0.2.0-bin.tar.gz cd pulsar-manager/ # 这里需要二次解压 tar -xvf pulsar-manager.tar
(2)dist包复制到pulsar-manager目录下更名为ui
cp -r dist/ pulsar-manager/ui
(3)启动pulsar-manager
./bin/pulsar-manager
(4)初始化超级用户密码
CSRF_TOKEN=$(curl http://pulsar01: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://pulsar01:7750/pulsar-manager/users/superuser \ -d '{"name": "pulsar", "password": "pulsar", "description": "test", "email": "username@test.org"}'
(5)访问验证
(6)使用
点击 new Enirconment 构建新环境,连接pulsar
转载请注明:西门飞冰的博客 » Pulsar介绍和集群部署