写点什么

社区知识库|常见问答 FAQ 集合第 4 期:消息保留及延迟、Broker、Pulsar 权限等相关问题

作者:Apache Pulsar
  • 2022 年 1 月 19 日
  • 本文字数:2541 字

    阅读完需:约 8 分钟

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


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


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

消息保留

问题 1:在 Pulsar 的消息保留机制里,Pulsar 的消息被一个消费者 Ack 后就会进入保留策略。那么在多个消费者订阅了一个 Topic、某条消息的部分消费者 Ack 的情况下,这条消息是否会进入保留策略?

解答:只有消息在所有订阅里都被 ACK,才会进一步由保留策略处理。对于同一个订阅,由哪个消费者进行 ACK 不重要,只要被 ACK 一次,在这个订阅里消息就是已经被 ACK 的状态。具体可参考:https://pulsar.apache.org/docs/en/cookbooks-retention-expiry/#retention-policies

重试次数

问题 2:Pulsar 支持参数配置重试次数吗?

解答:不支持。Pulsar 按照时间来进行退避重试策略,和重试次数机制类似。客户端内部的重试策略是用的退避(backoff)机制,可以配置 ClientBuilder 的 backoff 参数来控制。


 /**     * Set the duration of time for a backoff interval.     *     * @param duration the duration of the interval     * @param unit the time unit in which the duration is defined     * @return the client builder instance     */    ClientBuilder startingBackoffInterval(long duration, TimeUnit unit);
/** * Set the maximum duration of time for a backoff interval. * * @param duration the duration of the interval * @param unit the time unit in which the duration is defined * @return the client builder instance */
复制代码


从生产者的角度,可以在 ProducerBuilder 中配置总的 send timeout。

    /**     * Set the send timeout <i>(default: 30 seconds)</i>.     *     * <p>If a message is not acknowledged by the server before the sendTimeout expires, an error will be reported.     *     * <p>Setting the timeout to zero, for example {@code setTimeout(0, TimeUnit.SECONDS)} will set the timeout     * to infinity, which can be useful when using Pulsar's message deduplication feature, since the client     * library will retry forever to publish a message. No errors will be propagated back to the application.     *     * @param sendTimeout     *            the send timeout     * @param unit     *            the time unit of the {@code sendTimeout}     * @return the producer builder instance     */    ProducerBuilder<T> sendTimeout(int sendTimeout, TimeUnit unit)
复制代码

Pulsar Perf

问题 3:用 Pulsar Perf 来生产数据,但是无积压。

解答:在 Pulsar Perf 生产数据之前先创建 Subscription。

压测工具

问题 4:如何对 Pulsar 压测呢?使用什么工具?

解答:Pulsar 压测工具目前有 Pulsar Perf 和 OpenMessaging Benchmark,使用详情参考以下链接:

  • https://pulsar.apache.org/docs/en/performance-pulsar-perf/

  • http://openmessaging.cloud/docs/benchmarks/

消息延迟

问题 5:Pulsar 服务端默认支持延迟投递吗?

解答:Delay message 只在 Shared(共享)订阅模式生效。如果未生效,需要首先检查订阅模式是不是 Shared(共享),Pulsar 本身默认 Exclusive(独占) 订阅模式;同时应避免 delay message 在 KeyShared(键共享) 模式下生效,Delay message 和 Key_Shared 语义是违背的。

Broker 宕机

问题 6:如果 Broker 宕机,消息如何通知到下一个 broker?

解答:Broker 本身无状态。

  • Broker 在宕机时,不会主动通知其他 broker,分布在这个 broker 上的所有 bundle(bundle 是 topic 集合,是 Pulsar topic 进行负载均衡的最小单位)都会执行 unload 操作,unload 操作的流程:

  1. 关闭 unload 中所有 topic 的生产者、消费者和复制机;

  2. 关闭 Managedledger。当所有 bundle 都 unload 完成后,这个 broker 就可以正常退出。


  • 如果是 broker 异常退出,这个 broker 上的所有 bundle 也会被强行去掉对应归属,即这个 bundle 不在归属于这个 Broker。


当生产者或消费者客户端需要继续向某个 topic 发送/接收消息时,会首先执行 lookup 请求,会按照 loadbalance 策略找到目标 broker 节点(当前是 load 最低的节点),将对应 bundle onLoad 到目标 broker。待 onLoad 完成后,这个 broker 就可以继续为该 topic 提供读写服务了。


另外,Broker 在 ZooKeeper 上的一些临时节点信息,会主动删除;或因为超时而断开、其他 Broker 监听后,会进行相应的操作。

Compaction 限流

问题 7:磁盘占用很严重,磁盘清理文件的速度远远跟不上写的速度,调整了 BookKeeper 参数 gcWaitTime、majorCompactionInterval、minorCompactionInterval 效果不明显,是否还有其他解决方案?

解答:Compaction 有一个限流策略,从你的描述来看,应该是 Compaction 比较慢,可以调整 isThrottleByBytes=true,并且增加 compactionRateByBytes 的限流阈值。

# Throttle compaction by bytes or by entries.isThrottleByBytes=false
# Set the rate at which compaction will readd entries. The unit is adds per second.compactionRateByEntries=1000
# Set the rate at which compaction will readd entries. The unit is bytes added per second.compactionRateByBytes=1000000
复制代码

Pulsar 权限

问题 8:Pulsar 权限相关资料。

解答:

  • 视频:https://www.bilibili.com/video/BV1T741147B6?p=10

  • 文档:https://pulsar.apache.org/docs/en/security-overview/

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

相关推荐

用户头像

Apache Pulsar

关注

下一代云原生分布式消息流平台 2017.10.17 加入

Apache 软件基金会顶级项目,集消息、存储、轻量化函数式计算为一体,采用计算与存储分离架构设计,支持多租户、持久化存储、多机房跨区域数据复制,具有强一致性、高吞吐、低延时及高可扩展流数据存储特性。

评论

发布
暂无评论
社区知识库|常见问答 FAQ 集合第 4 期:消息保留及延迟、Broker、Pulsar 权限等相关问题