sharetwitterlinkedIn

Apache Pulsar 2.7.4 版本发布

December 29, 2021
head img

近期,Apache Pulsar 社区发布了 Pulsar 2.7.4 版本!新版本涵盖 32 位贡献者提供的改进和错误修复,并提交了 98 次变更。

版本亮点:

  • 将 Log4j 升级至 2.17.0 版本 - CVE-2021-45105; PR-13392
  • 回收 OpAddEntry 时可以正确引用 ManagedLedgerPR-12103
  • 当 ManagedLedger 关闭时,在 OpAddEntry 上不会发生 NPE。PR-12364

本博客按项目功能更新情况分组,介绍了 2.7.4 版本最值得关注的进展,如需了解所有性能升级和 bug 修复的完整列表,请查阅 Pulsar 2.7.4 发布注记

Bug 修复和功能增强

PR-13392:将 log4j 升级至2.17.0 版本 - CVE-2021-45105.

  • 问题

    关于 Log4j 的严重漏洞允许攻击者远程执行。该漏洞问题在 CVE-2021-44228 描述和跟踪。

  • 解决方案

    将 log4j 升级至 2.17.0 版本。

PR-12103:回收 OpAddEntry 时可以正确引用 ManagedLedger

  • 问题

    此版本之前,在写入失败后,会在后台安排一个任务来强制关闭 ledger 并触发新 ledger 的创建。如果 OpAddEntry 实例已被回收,则可能导致 NPE 或未定义的行为。

  • 解决方案

    ManagedLedgerImpl 对象引用被复制到最终变量,后台任务将不依赖于 OpAddEntry 实例的生命周期。

PR-12123BlobStoreBackedReadHandler中没有潜在的竞态条件。

  • 问题

    此版本之前,BlobStoreBackedReadHandler 在读取 offload ledger 时进入无限循环。在读取 entry 和关闭 BlobStoreBackedReadHandler 的操作之间存在竞态条件。

  • 解决方案

    在读取 entry 之前添加了状态检查,并在 entryID 大于 lastEntryID 时使 BlobStoreBackedReadHandler 退出循环。

PR-12364:当 ManagedLedger 关闭时,在 OpAddEntry 上不会发生 NPE。

  • 问题

    此版本之前,ManagedLedgerBkTest#managedLedgerClosed 测试在一些 asyncAddEntry 操作上关闭了 ManagedLedger 对象,并因 NPE 失败。

  • 解决方案

    ManagedLedger 通知 OpAddEntry 失败时关闭 OpAddEntry。这样就正确回收了 OpAddEntry 对象并成功触发失败的回调。

PR-11294:通过分区的主题名称正确设置主题策略。

  • 问题

    此版本之前,分区的主题名称不能用于设置主题策略。

  • 解决方案

    通过在 SystemTopicBasedTopicPoliciesService 中转换分区的主题名称,允许通过分区的主题名称设置主题策略。

PR-8611:调度速率限制器对消费者生效。

  • 问题

    此版本之前,由于 acquiredPermits 每秒重置为 0,因此在所有消费者在下一秒开始读取的情况下,调度速率限制器不会生效。

  • 解决方案

    DispatchRateLimiter 的行为变更为每秒减去 permits,而不是将 acquiredPermits 重置为 0。消费者暂时停止读取 entry,直到 acquiredPermits 返回的值小于 permits

PR-11310:执行 unload bundle 操作时不会发生 NPE。

  • 问题

    在对持久分区主题进行压力测试时,在执行 unload bundle 操作时会出现 NPE。同时,生产者没有写消息。

  • 解决方案

    添加更多安全性检查来修复此问题。

PR-11346:修复命名空间 bundle 缓存的不一致行为。

  • 问题

    此版本之前,在命名空间被删除后,命名空间 bundle 缓存没有失效。

  • 解决方案

    当 bundle 缓存失效时,命名空间策略缓存失效。

PR-11342:删除集群后关闭复制机和复制客户端。

  • 问题

    此版本之前,删除集群后,复制机和复制客户端没有关闭。复制机的生产者会不断尝试重新连接到已删除的集群。

  • 解决方案

    关闭相应的复制机与复制客户端。

PR-10384:发布速率限制器按预期生效。

  • 问题

    此版本之前,如果将 preciseTopicPublishRateLimiterEnable 设置为 true以进行限制速率,会出现以下问题:

    • 将限制从有界限制更改为无界限制时,更新的限制不会设置边界。
    • 每个主题会为每个限制器实例创建一个调度线程。
    • 当主题被卸载或操作关闭时,主题不发布调度线程。
    • 更新限制不会关闭与被替换的限制器实例相关的调度线程。
  • 解决方案

    • 在创建新的限制器实例之前清理以前的限制器实例。
    • 使用 brokerService.pulsar().getExecutor() 作为速率限制器实例的调度器。
    • 添加用于主题关闭(卸载)的资源清理 hook。

PR-12015:如果无法更新 ZNode 列表,则清理新创建的 ledger。

  • 问题

    在更新 ZNode 列表时,ZooKeeper 会抛出异常并且不会清理已创建的 ledger。新创建的 ledger 未编入主题 managedLedger 列表的索引,因此无法作为主题保留清除。此外,如果抛出 ZNode 版本不匹配异常,ZNode 数量会在 ZooKeeper 中增加。

  • 解决方案

    当 ZNode 列表更新失败时,无论何种异常类型,都从 broker 缓存和 BookKeeper 中删除已创建的 ledger。

新版本试用

欢迎大家下载 Pulsar 2.7.4,即刻试用!

参与其中

Pulsar 项目的成长来源于社区,也扎根于社区。一次次新版本的筹备与发布离不开社区伙伴们的贡献。你是否愿意成为其中的一员呢?参与开源,可以获得公司及社区内外的认可,结交来自各个领域、志同道合的小伙伴;同时也可以提高个人影响力,促进个人发展。参与开源不是码农的专属,社区、文档等各个方面都可以让大家发挥一技之长。

作为全球性开源项目,截至目前,Apache Pulsar 已拥有 480 名贡献者、10.2 K+ Star 、2.6 K+ Fork 。我们为大家提供了参与指南,欢迎越来越多的小伙伴助力 Apache Pulsar 项目的不断发展与前进。

© 北京原流科技有限公司Apache、Apache Pulsar、Apache BookKeeper、Apache Flink 及相关开源项目名称均为 Apache 软件基金会商标。条款隐私