本文翻译自 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

    相关阅读

  • • 博文推荐|Apache Pulsar 轻装上阵:迈向轻 ZooKeeper 时代

  • • 博客推荐|详解 Apache Pulsar 2.10 新特性——自动化集群故障转移

  • • 直播回顾| Apache Pulsar 2.10.0 新特性概览

引用链接

[1] PR-13315: https://github.com/apache/pulsar/issues/13315
[2] Pulsar 2.10.0 发布注记: https://pulsar.apache.org/release-notes/#placeholder
[3] PIP-106: https://github.com/apache/pulsar/issues/12858


▼ 关注「Apache Pulsar」,获取更多技术干货 ▼

项目动态|Apache Pulsar 2.10.0 版本介绍相关推荐

  1. 项目动态 | Apache Pulsar 2.7.3 版本介绍

    本文原文作者是 StreamNative 工程师丛搏.刘昱.译者刘梓霖,传智教育工程师. 关于 Apache Pulsar Apache Pulsar 是 Apache 软件基金会顶级项目,是下一代云 ...

  2. 项目动态|Apache Pulsar 2.8.1 版本发布

    本文原文作者是 StreamNative 工程师陈航.刘昱. 关于 Apache Pulsar Apache Pulsar 是 Apache 软件基金会顶级项目,是下一代云原生分布式消息流平台,集消息 ...

  3. Apache Pulsar 2.6.1 版本正式发布:2.6.0 功能增强版,新增 OAuth2 支持

    在 Apache Pulsar 2.6.0 版本发布后的 2 个月,2020 年 8 月 21 日,Apache Pulsar 2.6.1 版本正式发布! Apache Pulsar 2.6.1 修复 ...

  4. Apache Pulsar 2.7.1 版本正式发布!

    作者:StreamNative 文档工程师刘昱.软件工程师张勇. 关于 Apache Pulsar Apache Pulsar 是 Apache 软件基金会顶级项目,是下一代云原生分布式消息流平台,集 ...

  5. Apache Flink 1.10.0 发布 | 云原生生态周报 Vol. 38

    作者 | 徐迪.陈俊.敖小剑.宋进超 业界要闻 Apache Flink 1.10.0 发布 作为 Flink 社区迄今为止规模最大的一次版本升级,Flink 1.10 容纳了超过 200 位贡献者对 ...

  6. Apache发布NetBeans 10.0,增强对JDK 11的支持

    Apache软件基金会最近发布了NetBeans 10.0,主要特性包括增强对JDK 11的支持.添加对JUnit 5的支持以及重新集成了PHP.JavaScript和Groovy模块.在路线图上,A ...

  7. OpenKruise v0.10.0 版本发布:新增应用弹性拓扑管理、应用防护等能力

    简介:阿里云开源的云原生应用自动化管理套件.CNCF Sandbox 项目 -- OpenKruise,今天发布 v0.10.0 新版本,这也会是 OpenKruise v1.0 之前的最后一个 mi ...

  8. 乐鑫esp8266学习rtos3.0笔记第9篇:整理分享那些我在项目中常用的esp8266 rtos3.0版本的常见驱动,Button按键长短按、PWM平滑调光等。(附带demo)

    本系列博客学习由非官方人员 半颗心脏 潜心所力所写,仅仅做个人技术交流分享,不做任何商业用途.如有不对之处,请留言,本人及时更改. 1. Esp8266之 搭建开发环境,开始一个"hello ...

  9. 关于安卓开发计步器在安卓10.0版本无法显示步数问题

      由于某种原因,要做一个安卓的简单计步器,只有一点JAVA知识的我参照了[二克拉梦想 ]这个大佬的CSDN博客和github,制作了 一个简单的安卓计步器.   首先万分感谢大佬的付出让我节省了很多 ...

最新文章

  1. 基于vivado的fir ip核的重采样设计与实现
  2. 玩具租赁到底在解决用户什么痛点?
  3. cudnn的下载地址
  4. java文件重命名有趣实验
  5. Sublime Text 3安装GoSublime
  6. (八大方法、逐层深入,有你一定没见过的)使用INSERT语句向表中插入数据
  7. H1作业(字符串和字节串)
  8. android apk 防止反编译技术加壳技术(转)
  9. fscokopen 中执行超时 使用stream_set_timeout设置超时
  10. python难学吗-python语言好学吗
  11. iphone软件创富密码之 启动Xcode创建工程
  12. 在 Mac 上的 Pages 文稿中如何设定影片和图像格式?
  13. vsftpd的参数说明和虚拟用户配置
  14. react 跨域—— jsonp 跨域
  15. 网站PV,UV是什么意思?
  16. mysql的四大常用语句_SQL四大基本语句
  17. 思科实验-生成树协议STP
  18. Gluster文件系统
  19. 2022-2028年全球与中国插座行业市场深度调研及投资预测分析
  20. 数据分析出的 2000年以来高分华语电影前50名

热门文章

  1. Npm 安装提示 EUNSUPPORTEDPROTOCOL 错误
  2. 快速以管理员的身份运行cmd的方法
  3. 这个时代,“寒门再难处贵子”【转载】
  4. ibatis中iterate的用法(conjunction=or ,) .
  5. jQuery+PHP+Ajax动态数字统计展示实例
  6. 【UE4】HUD(蓝图)
  7. 【03】Linux笔记
  8. 计算机access分数比例,[access查询]关于分数段统计问题
  9. opencv将图像处理之后显示在label上(Mat转化为qimage)转换之后label显示全黑
  10. about 日问输入法