共计 2441 个字符,预计需要花费 7 分钟才能阅读完成。
平时在 Pulsar 交换群中,咱们发现大家在接触和应用 Pulsar 的过程中,会重复遇到相相似的问题。为了更高效地解决大家这些“高频疑难”,同时也对提出优质问题的敌人表示感谢,咱们特地建设了 FAQ 知识库,以便于收集及解答大家的疑难。
咱们将定期收集筛选社群内提出的高频问题,由社区专家甄别筛选出其中优质的发问进行答复,整合优化后分享给社区的小伙伴们作为遇到问题时的优先参考,心愿能够帮忙大家解决应用 Pulsar 过程中的问题。
上面来看看本次收集的问题吧:
Broker 重启、Topic 调配
问题 1:Broker 重启,原来绑定的 Topic 会主动复原还是会调配到其余 Broker 上?
解答:当生产者 / 消费者客户端须要持续向某个 Topic 发送 / 接管音讯时,会首先执行 lookup 申请,lookup 会依照 loadbalance 策略找到指标 Broker 节点(以后是 load 最低的节点),将对应 bundle onLoad 到指标 Broker。待 onLoad 实现后,这个 Broker 就能够持续为 Topic 提供读写服务了。
对应的源码为:ServerCnx#handleLookup
。
ZooKeeper 端口
问题 2:Pulsar 默认应用的 ZooKeeper 配置文件中 metrics 端口设成了 8000,而非 ZooKeeper 默认的 7000。ZooKeeper 和 BooKkeeper metrics 端口抵触。
解答:从 Pulsar 开始裸露 ZooKeeper metric 开始,应用的默认端口就是 8000,所以当应用最新版本(3.6.3)的 ZooKeeper 时,为了和之前的端口保持一致,就将 ZooKeeper metric 的端口从默认 7000 改为 8000。
这里的确会存在和 BookKeeper metric 端口抵触的问题,如果是在同一台机器上混布 BookKeeper 和 Zookeeper 的话,倡议批改其中一个端口。能够通过 export PULSAR_EXTRA_OPTS=-Dstats_server_port=8002
批改 ZooKeeper metrics 端口号。
Topic 相干
topic 级别限速
问题 3:Pulsar 反对 topic 级别的流量限速吗?
解答:反对。能够调用 bin/pulsar-admin topics set-dispatch-rate
和 bin/pulsar-admin topic set-publish-rate
来配置限速规定。
Unload topic
问题 4:Unload topic 时,如何实现 topic owner 转移到新 Broker,topic 和 bundle 绑定,以及 broker 转移时呈现 bundle owner 的转移?
解答:
- Unload topic 并不会导致 Topic ownership 产生转移,只会敞开以后 topic,再由客户端触发从新加载。
- 批改 topic 的 ownership 须要 unload topic 所在的 namespace bundle,如此从新加载 namespace bundle,会将 namespace bundle 加载到其余的 broker 上,也就相当于 topic 转移到了其余的 broker 上。
topic message
问题 5:Topic 中的 message 如何与 key 对应?该局部元数据存储的地位在哪?
解答:BookKeeper 有两个概念,ledger 和 entry。一个 ledger 由 entry 组成;一个 entry 对应一个 entryId,这个是惟一的。
在 Pulsar 中,每个 message 存成一个 entry,Entry 被存储胜利时,bookie 会告知用户一个的惟一 ID 即 entryId,这个是没有额定元数据存储的。详情可参考 BookKeeper 的 concept。
Pulsar 客户端
问题 6:Pulsar 客户端 admin Url 是否反对多个配置多个?
解答:目前暂不反对,可通过反向代理服务,比方 Nginx,以达到雷同的目标。
Pulsar 消息压缩
问题 7:Pulsar 的音讯最大限度默认为 5MB,该数值是否为压缩加密之后的值?那么压缩之前是多少?
解答:
- Topic 的压缩是由客户端发送命令实现的。这里说的 Pulsar 最大音讯限度不是指压缩加密后的音讯;
- 音讯大小 5MB 指服务接管到的数据包大小,是压缩后的大小,因为压缩是在客户端进行的;
maxMessageSize = Commands.DEFAULT_MAX_MESSAGE_SIZE;
// 默认的音讯最大尺寸 = 5 1024 1024,这里的设置指的是 Producer 能够发送的最大音讯尺寸(default message size for transfer);byte [] data = new byte[dataLength - 12];
最大能够发送的数据局部是Commands.DEFAULT_MAX_MESSAGE_SIZE - 12
,12 指的是 entryId 和 length 所占字节数。
Pulsar 强程序性
问题 8:如何实现 Pulsar 的强程序性保障?
解答:
- Pulsar 的音讯程序性基于分区(Partition),每个分区对应一个 managed ledger,它治理一组 BookKeeper ledgers,同时只存在一个沉闷的 ledger。而每个 ledger 的写入程序性是通过 BookKeeper 来保障的;
- 对于 Pulsar 客户端针对谬误场景而进行音讯主动重发导致的乱序,默认为无奈保障,除非开启音讯去重。例如:发送 1 2 3,客户端发现 2 的发送失败,重发 2,此时程序的定义不再是 1 2 3,而是 1 2 3 2。而去重是基于音讯自带的序列号(sequence id)的,即会回绝第二次 2 的发送。
以上就是第 5 期社区 FAQ 汇总,在此感激参加社群日常发问与解答的小伙伴们。让咱们期待下一期的 FAQ 内容吧!
相干举荐
- 社区知识库|常见问答 FAQ 汇合第 4 期
- 社区知识库|常见问答 FAQ 汇合第 3 期
- 社区知识库|常见问答 FAQ 汇合第 2 期
关注 公众号「Apache Pulsar」,获取更多技术干货
退出 Apache Pulsar 中文交换群 👇🏻