关于 FAQ 知识库

平时在 Pulsar 交流群中,我们发现大家在接触和使用 Pulsar 的过程中,会反复遇到相类似的问题。为了更高效地解决大家这些“高频疑问”,同时也对提出优质问题的朋友表示感谢,我们特别建立了 FAQ 知识库,以便于收集及解答大家的疑问。

我们将定期收集筛选社群内提出的高频问题,由社区专家甄别筛选出其中优质的提问进行回答,整合优化后分享给社区的小伙伴们作为遇到问题时的优先参考,希望可以帮助大家解决使用 Pulsar 过程中的问题。

下面来看看本期收集的问题吧:

统计 Topic 下消息条数

问题 1: 如何使用统计 Topic 下所有的消息条数(非 Entry 条数 )?

解答:目前还没有这个特性,可以根据当前 Message Index 的特性来支持 Message Level 的 Backlog。相对来说,对于 Exclusive (独占)和 Failover (灾备)模式的处理会简单一些,对于支持单条消息不连续签收的订阅来说会比较复杂一些。

百万量级 Topic 配置

问题 2: 百万量级 Topic 下如何配置 Bookies、Broker 以及硬件?

解答:容量评估需要结合消息的大小/业务中实际可以接收的 Batch 大小等因素。假如一个消息 100 Bytes,一个客户端发送,客户端每 2ms 打包发送,数据写两个副本,那基本 2 台机器就够了,但是这明显不符合实际的应用场景。对于 Pulsar 来讲容量评估主要考虑几个方面的因素:

  1. 消息吞吐量:直接决定对网卡和磁盘的需求,硬件支持的最大吞吐必须要 >= 期望的吞吐;
  2. 实际 Batch 的影响:决定了对 CPU 的需求,这个要根据具体的测试数据来,通过设置不同 Batch 大小做一些 Benchmark,再根据实际业务的情况来做评估;
  3. Topic 数量:决定对 Metadata Service 的需求,如果有几千个/几万个 Topic,那不用太考虑这个方面的影响;如果几十万及以上的 Topic,那要给 ZooKeeper 一些比较好的资源,尤其是在磁盘上,比如 Log Data 和 Data 分开,尽量使用 Nvme SSD 等。

相关配置:

  • Broker 配置:主要配置是网卡和 CPU,建议使用万兆网卡,Broker 会并行写多个副本到 Bookie,所以单个 Broker 能够承载的写入带宽要除以副本数。
  • Bookie 配置:主要配置是网卡和磁盘,建议使用万兆网卡,Journal 盘如果使用 HDD 要关闭同步刷盘,不然刷盘的延迟会直接影响写入的吞吐。

以上只是一些比较常规的考虑因素和建议,容量评估还是要结合实际的测试结果得出。社区也有不少简单好用的工具,比如 Pulsar 自带的 Pulsar-perf 或者 Openmessaging Benchmark, 可以容易的在指定的 Pulsar 集群上进行性能测试。

磁盘被写满如何清理文件

问题 3: Pulsar 磁盘被写满后需要清理哪些文件?

解答:清理 Bookie 不能通过直接清理文件的方式进行,这会导致整个 Bookie 状态的不一致,并且一旦文件被删除可能会导致不可逆的灾难。

处理这个文件需视环境而定。如果是测试环境或者不会关心数据丢失的其他环境,那么可以直接使用 Admin 删除掉集群的所有的 Topic,然后逐个 Bookie 节点触发手动 GC curl,Bookie 就可以逐渐释放磁盘空间。

如果是线上环境,肯定是不能直接把 Topic 都删除掉的。首先,优先考虑扩容保证服务不会中断,然后根据 Topic 使用的存储大小来检查是哪些 Topic 占用了大量的存储空间。Pulsar 的机制是 Subscription 没有 Ack 的消息是不会被删除掉的。因此如果发现是某些不用的 Subscription 导致 Topic 数据无法删除,可以检查 Subscription 是不是还再用/可以清理掉。总之,找出那些可以清理数据的 Topic,让不用的数据过期或被删除,然后再到 Bookie 节点触发手动 GC 来清理数据。

消费位点与 Ack

问题 4: Pulsar 新接入的消费者,都是从最新开消费吗?

解答:如果没有订阅过,就从最新开始消费。

问题 5: 哪个参数可以指定消费位点的?

解答:ConsumerBuilder#subscriptionInitialPosition。默认是 latest,可以改成 earliest。如果已经订阅过,如何改动都是最新。需要改的话用 Consumer#seek 来改变位置。

问题 6: 默认消息被 Ack,如果没有保留策略那么就会被立即删除、无法回溯?

解答:标记为删除不是立即删除。如果没有被实际删除的话可以 Seek 回溯。

BookKeeper Ledger 写满

问题 7: 单个 Ledger 目录写满,但是其他目录空闲。

解答:BookKeeper PR-2121 已通过避免 entry 日志停止压缩解决该问题,请确保使用 4.10 或以上版本的 BookKeeper。

微服务场景-实例订阅

问题 8: 在微服务场景中,可能一个服务有多个实例。这些实例都使用不同的订阅名称吗?

解答:每个订阅在 Pulsar 中对可以读取一份完整的 Topic 数据。根据你的使用场景,如果你希望每个实例都拿到一份完整的 Topic 数据,每个实例应该使用不同的订阅名称;如果不同的实例共享一份 Topic 数据,则应该使用同一个订阅名称。大多数场景会是后者。

以上就是第 2 期社区 FAQ 汇总,在此感谢参与社群日常提问与解答的小伙伴们。让我们期待下一期的 FAQ 内容吧!

相关推荐

关注公众号「Apache Pulsar」,获取干货与动态

加入 Apache Pulsar 中文交流群 👇🏻


ApachePulsar
192 声望939 粉丝

Apache软件基金会顶级项目,下一代云原生分布式消息系统