Apache Pulsar 2.10.0 版本介绍

本文翻译自 StreamNative 博客《What’s New in Apache Pulsar 2.10》,作者为李鹏辉、Dave Duggins,原文地址为 https://streamnative.io/blog/release/2022-05-12-whats-new-in-apache-pulsar-210/。

倍受期待的 Apache Pulsar 2.10.0 版本近期已发布!新版本涵盖 99 位贡献者提供的改进和错误修复,并提交了 800 余次变更。除了之前为大家介绍的减轻 ZooKeeper 依赖 和自动化集群故障转移 特性外,Pulsar 2.10.0 版本还包含十余项重大特性的更改。本博客为你浓缩了 Pulsar 2.10.0 版本发布亮点,一起来看看新版本还有哪些值得关注的特性吧,方便开发者和用户参考。

版本亮点:

  • • PR-13316:在主集群和备份集群之间提供自动故障恢复。(原 PIP:PR-13315[1]

  • • PR-10279:通过向 PartitionedProducer 添加延迟加载功能,仅需更少的生产者即可更有效地使用 broker 内存。

  • • PR-12838:通过接收到的消息中的键值,使用新的 TableView 类型添加主题映射支持。

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

Bug 修复和功能增强

客户端(仅 Java Client 支持)

PR-13316: 实现客户端上的 Pulsar 集群级自动故障转移。

问题:Pulsar 管理员必须手动对集群进行故障转移。

解决方案:添加 Pulsar 集群级别的自动故障转移功能。当检测到故障转移事件时,它会自动无缝地从主集群切换到一个或多个辅助集群;当主集群恢复时,客户端会自动切换回来。

PR-12517: 支持设置跨多个集群的主题策略。

问题:主题策略只对本地集群生效 

解决方案:增加支持设置可以应用给多个集群的主题策略。

  • • 为本地主题策略设置消息的 replicateTo 属性以避免被复制到远程。

  • • 留存支持设置全局参数。

  • • 为 SystemTopicBasedTopicPoliciesService 添加全局主题策略。

生产者

PR-10279: 为分区生产者添加延迟加载功能。

问题:分区数量是根据最高速率生产者设置的,最低速率生产者并不总是需要连接到每个分区,因此额外的生产者会占用 broker 内存。

解决方案:通过为分区生产者引入延迟加载,减少生产者数量以更有效地使用 broker 内存;添加轮询路由模式类来限制分区的数量。

PR-12403: 引入 chunk message ID。

问题:发送分块消息时,生产者返回最后一个分块的 message-id 会导致某些进程出现错误。

解决方案:引入了新的 ChunkMessage-ID 类型。为继承自 MessageIdImpl 的 chunk message-id 增加了两个新方法:getFirstChunkMessageId 和 getLastChunkMessageID。对于其他方法实现,直接调用 lastChunkMessageID,兼容现有的业务逻辑。

Broker

PR-12536:扩展 broker,为企业级集群的运维人员提供更多可控性和灵活性。

问题:企业级 Pulsar 集群运维人员需要更大的灵活性和控制力来拦截 broker 事件(包括 ledger 写入/读取),以进行模板验证、可观测性和访问控制。

解决方案:

  • • 增强 org.apache.pulsar.broker.intercept.BrokerInterceptor 接口以包含用于跟踪的附加事件

  • • 创建了一个新接口 org.apache.pulsar.common.intercept.MessagePayloadProcessor,允许拦截 ledger 读写操作

消费者

PR-10478:重新投递命令添加 epoch。

问题:在旧版本中,拉取和重新投递的操作是异步的,因此客户端消费者可能会收到一条新消息,并根据新的 messageID 执行累积 ack 且无法消费旧消息。

解决方案:Pulsar 客户端通过服务器和客户端消费者的增量 epoch 来同步重新投递和拉取消息操作。

PR-12269:支持 Dispatcher 中的可插入 Entry 过滤器。

问题:旧版本不支持原生消息标记。

解决方案:在 broker 级别实现 Entry 过滤器框架,并在后续即将发布的版本中支持命名空间和主题级别。

PR-13355:在向死信队列发送消息之前创建初始化订阅。

问题:无需命名空间的数据留存策略或死信队列订阅,未处理消息中的死信队列数据即会自动删除。

解决方案:在向死信队列发送消息之前创建初始订阅。当 deadLetterProducer 初始化时,消费者根据 DeadLetterPolicy 设置初始订阅。

PR-13707:为确认超时添加重新投递退避策略。

问题:在 PIP-106[3] 中引入的重新投递退避策略仅适用于否定确认 API。如果使用 ack 超时而不是否定确认 API 来触发消息重新投递,则绕过退避策略。

解决方案:

  • • 为确认超时添加消息重新投递策略。

  • • 向 RedeliveryBackoff 添加警报 NegativeAckBackoff 接口。

  • • 在 ConsumerBuilder 中暴露 AckTimeoutRedeliveryBackoff

PR-13599:(目前修改仅涵盖 Java 客户端)解决设置主题级别 maxMessageSize 时产生分块消息失败的问题。

问题:在旧版本中,如果主题级别 maxMessageSize 设置为 [1],则分块消息生成失败。

解决方案:在 PublishContext 中添加 isChunked。如被分块,则跳过 maxMessageSize 检查。

Function

PR-13205:Pulsar Functions 预加载和释放外部资源。

问题:外部资源初始化和释放或手动完成,或通过使用复杂的初始化逻辑完成。

解决方案:引入 RichFunction 接口,通过提供 setup 和 tearDown API 来扩展 Function

PR-12104:更新身份验证接口来包含异步身份验证方法。

问题:Pulsar 当前的 AuthenticationProvider 接口只暴露了用于验证连接的同步方法。在没有任何依赖网络调用的提供商的情况下,目前功能虽足够使用,但是在某些情况下查看 OAuth2.0 规范时,需要网络调用来验证 token。

解决方案:

AuthenticationProvider

  • • 添加 AuthenticationProvider#authenticateAsync。引入一个调用认证方法的默认实现。

  • • 弃用 AuthenticationProvider#authenticate

  • • 添加 AuthenticationProvider#authenticateHttpRequestAsync

  • • 弃用 AuthenticationProvider#authenticateHttpRequest

AuthenticationState

  • • 添加 AuthenticationState#authenticateAsync

  • • 弃用 AuthenticationState#authenticate并推荐使用 AuthenticationState#authenticateAsync方法。

  • • 弃用 AuthenticationState#isComplete。可以通过从 AuthenticationState#authenticateAsync 的结果推断身份验证完整性来避免此方法。

AuthenticationDataSource

  • • 弃用 AuthenticationDataSource#authenticate。不需要此方法的异步版本。

PR-12838:初始化 TableView 提交。

问题:在许多场景中,应用程序使用 Pulsar 消费者或 reader 从主题中获取所有更新,并使用接收到消息的每个键的最新值构造一个映射。这个操作在构建数据的本地缓存时很常见。社区不提供对 Pulsar 客户端 API 中未包含此访问模式的支持。

解决方案:添加新的 TableView 类型并更新 Pulsar Client。

主题

PR-12818:支持主题元数据(第一部分)——创建具有属性的主题。

问题:无法存储主题元数据。

解决方案:

  • • 在 topics.java 中添加新的存储方法。

  • • 添加两个新的 REST API 路径以减少兼容性问题。

元数据存储

PR-13225:添加了 Etcd MetadataStore 实现。

问题:社区正在努力添加支持非 ZooKeeper 实现的元数据后端。

解决方案:添加对以下的 Etcd 支持:

  • • 批处理读/写请求

  • • 会话监视点

  • • Lease manager

    0 0 投票数
    文章评分

    本文转载自StreamNative,原文链接:https://mp.weixin.qq.com/s/cpVnG654TnHzQvDpcvsx1w。

(0)
上一篇 2022-05-25 16:52
下一篇 2022-05-25 19:22

相关推荐

订阅评论
提醒
guest
0 评论
内联反馈
查看所有评论
0
希望看到您的想法,请您发表评论x