近期,Apache Pulsar 社区发布了 Pulsar 2.7.4 版本!新版本涵盖 32 位贡献者提供的改进和错误修复,并提交了 98 次变更。
版本亮点:
OpAddEntry
时可以正确引用 ManagedLedger
。PR-12103OpAddEntry
上不会发生 NPE。PR-12364本博客按项目功能更新情况分组,介绍了 2.7.4 版本最值得关注的进展,如需了解所有性能升级和 bug 修复的完整列表,请查阅 Pulsar 2.7.4 发布注记。
问题
关于 Log4j 的严重漏洞允许攻击者远程执行。该漏洞问题在 CVE-2021-44228 描述和跟踪。
解决方案
将 log4j 升级至 2.17.0 版本。
OpAddEntry
时可以正确引用 ManagedLedger
。问题
此版本之前,在写入失败后,会在后台安排一个任务来强制关闭 ledger 并触发新 ledger 的创建。如果 OpAddEntry
实例已被回收,则可能导致 NPE 或未定义的行为。
解决方案
ManagedLedgerImpl
对象引用被复制到最终变量,后台任务将不依赖于 OpAddEntry
实例的生命周期。
BlobStoreBackedReadHandler
中没有潜在的竞态条件。问题
此版本之前,BlobStoreBackedReadHandler
在读取 offload ledger 时进入无限循环。在读取 entry 和关闭 BlobStoreBackedReadHandler 的操作之间存在竞态条件。
解决方案
在读取 entry 之前添加了状态检查,并在 entryID
大于 lastEntryID
时使 BlobStoreBackedReadHandler
退出循环。
OpAddEntry
上不会发生 NPE。问题
此版本之前,ManagedLedgerBkTest#managedLedgerClosed
测试在一些 asyncAddEntry
操作上关闭了 ManagedLedger 对象,并因 NPE 失败。
解决方案
当 ManagedLedger
通知 OpAddEntry
失败时关闭 OpAddEntry
。这样就正确回收了 OpAddEntry
对象并成功触发失败的回调。
问题
此版本之前,分区的主题名称不能用于设置主题策略。
解决方案
通过在 SystemTopicBasedTopicPoliciesService
中转换分区的主题名称,允许通过分区的主题名称设置主题策略。
问题
此版本之前,由于 acquiredPermits
每秒重置为 0,因此在所有消费者在下一秒开始读取的情况下,调度速率限制器不会生效。
解决方案
将 DispatchRateLimiter
的行为变更为每秒减去 permits
,而不是将 acquiredPermits
重置为 0。消费者暂时停止读取 entry,直到 acquiredPermits
返回的值小于 permits
。
问题
在对持久分区主题进行压力测试时,在执行 unload bundle 操作时会出现 NPE。同时,生产者没有写消息。
解决方案
添加更多安全性检查来修复此问题。
问题
此版本之前,在命名空间被删除后,命名空间 bundle 缓存没有失效。
解决方案
当 bundle 缓存失效时,命名空间策略缓存失效。
问题
此版本之前,删除集群后,复制机和复制客户端没有关闭。复制机的生产者会不断尝试重新连接到已删除的集群。
解决方案
关闭相应的复制机与复制客户端。
问题
此版本之前,如果将 preciseTopicPublishRateLimiterEnable
设置为 true
以进行限制速率,会出现以下问题:
解决方案
brokerService.pulsar().getExecutor()
作为速率限制器实例的调度器。问题
在更新 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 项目的不断发展与前进。