特性预览:Apache 顶级项目 Apache Pulsar 2.6.1 版本
在正式分享 2.6.1 版本更新细节之前,冉小龙首先为我们分享了两个相关 PIP 的内容。
一个是 PIP-47 中关于「基于时间来进行版本更新」的计划。该 PIP 提出后,从 2.5.0 版本到目前即将发布的 2.6.1 版本中,时间更短、发布频率更高成为最突出的特点。同时反馈周期快,基本是每三个月更新一个大版本。这样用户也可以大概了解版本的一个更新周期,增进了项目透明度。
另一个是 PIP-69 中计划在 Go Client 中集成 schema 相关的功能和特性,更多详情介绍可以参考下方:https://github.com/apache/pulsar/wiki/PIP-69%3A-Schema-design-for-Go-client。
版本更新情况
此次 2.6.1 版本更新接收了来自社区的 112 次 commits,覆盖 broker、Pulsar Functions、Go Function、Pulsar SQL、Schema、Java/CPP Client 等层面。同时截止目前 Apache Pulsar 项目已有 6400+ star、1500+ fork,以及即将超过 300 人的 contributor 数量。
接下来就简单介绍一些 2.6.1 版本中的更新功能吧。
修复 Key_Shared 中 stick hash range 冲突的问题
Key_Shared 订阅模式可以保证用户在订阅到某个 topic 时,可以指定 producer message key。消息会根据指定 key 的不同,通过 hash range 有序发送到不同的 consumer。

此 PR 主要是在 broker 端添加一个 check 机制,来避免 stick hash range 冲突。Stick hash range 的范围是 0-65535,导致该错误的主要原因是因为在 broker 端,没有对 stick hash range 中的 start 和 end 位置进行检查。
正常情况下,是不允许 start 大于 end 的位置。在 2.6.1 中,我们加入了相应的 check 机制,来避免出现 range 冲突的问题。

在 Key_Shared 中对 payload 进行解压缩
一般为了节约网络带宽,在创建 producer 时,会根据不同场景选择不同的压缩类型。Consumer 端使用了 Key_Shared 订阅模型来订阅 topic,在消息中,标注消息的重要字段可能是 payload 字段。
在之前版本中是没有针对在 Key_Shared 订阅模式下对 payload 进行解压缩的功能,此 PR 则是填补了这项功能。

修复在关闭 consumer 时的竞态条件

根据上图左边圈出来的部分可以看出,message backlog 一直处于增加的状态。Backlog 就是在消息生产—消费过程中,没有被 consumer 消费掉的消息堆积,正常情况下,producer 生产消息与 consumer 消费消息的速率大致是一样的。但是从上图中的递增状态的 backlog 就表明了,消息生产消费过程中出现了消费不均衡状态。
此 PR 修复了当宕机重启后,消息生产消费错开产生的竞态条件,做法就是在中间加一些检查机制。在 consumer 要打开一个连接时,添加状态检查,如果当前 connection 的状态为 closing 或者 closed 状态时,我们不需要发送 subscribe 的 command 到 broker 即可。

使用标准主机名作为 worker 的默认值

在 Java 8 和 Java 11 中,Get Hostname 返回的值是不一样的。即 Java 8 中返回的是标准主机名,Java 11 中返回的是简单主机名。此 PR 就是在 Java 11 中添加了可以获取标准主机名的方法.

修复 2.6.0 引入的向后兼容问题
在 pulsar 的整个版本迭代中,向后兼容是一个很重要的保证。同时在是否合并 PR 的过程中也是一个十分重要的决定因素。
此 PR 中提到的向后兼容问题是由于在 2.5.0 中支持了一个功能,允许多个 Pulsar cluster 去使用同一个 BookKeeper 的 cluster,所以在 2.5.0 的 broker 中,会响应带有 BookKeeperMetadataServiceUri 的请求,但是 client 返回的结果却是 null。
所以当 Function worker 和 broker 分开部署时,把 Function worker 和 broker 单独从 2.5.0 更新到 2.6.0 时,会返回空指针异常。
修复的方式就是在初始化 Function worker 时,对 BookKeeperMetadataServiceUri 的 value 进行检查,判断它是否为 null。
优化 Pulsar Function 的加密配置
在之前的版本中,Function worker 与 TLS 相关的配置文件/文档等介绍不太全面,此 PR 就是对此问题进行了同步优化。
主要是在 TLS transport encryption、Authentication Provider 和 Authorization Provider 上进行了部分修改,可以大致参考下图。

更多关于授权和认证相关的内容,可以参考之前 TGIP-CN 的直播 ️ 深入了解 Pulsar 认证和授权机制。
在 pulsar-perf 中支持 tlsAllowInsecureConnectio
此 PR 在 ./bin/pulsar-perf produce命令中增加了允许不信任连接的功能,作用于 producer、consumer 和 reader 端。
处理在创建非持久性 cursor 时的错误

上图中,当用户在创建非持久性 cursor 失败时,会返回一个 NPE 的 exception,这是因为当创建非持久性 cursor 失败时,我们仍然会去创建一个 subscription instance 对象。
这将导致该 topic 的引用计数加一,当用户想要删除这个 topic 时,由于引用计数没有被清零,所以即使使用 --force 强制去删除,也删除不掉,导致 topic 引用技术增加。
此 PR 就是在创建非持久性 cursor 失败的时候,返回一个 failedFuture 对象,而不是去创建一个 subscription instance。
创建新 ledger 时引发 NPE 而导致生产者卡死的问题
由于无法解析网络地址,因此在创建 ledger 时会引发 NPE。如果在添加超时任务之前引发了 NPE,则超时机制不起作用。无法解析的网络地址在 Kubernetes 环境中很常见。当 bookie pod 或工作程序节点重新启动时,可能会发生这种情况。
此 PR 的解决逻辑在于三个层面,即捕获 NPE Exception、触发超时任务时执行回调策略、以及检测 CreationLedger 的状态。
完善 Window Function 相关的文档
在整个流处理数据中,经常需要以聚合方式进行数据收集和处理,通常以时间或者是数据数量为计量单位来进行,这种每个集合就属于 window。

在 Pulsar Functions 中,window function 主要有三个重要概念。
- Trigger(触发器):决定当前 window 何时被计算/执行/删除等操作。每个 window 都有相应触发器去追踪状态。
- Evictor(过滤器):当 window 被 trigger 触发后,在 Window Function 处理之前会删除窗口中不重要的元素。需要注意的是,Evictor 不是一个必需因素,可存在可不存在。
- Watermark(衡量线):属于数据本身的隐藏属性,设定一些机制,保证在某些条件下必须触发某些状态。
增添 OAuth2 功能
OAuth2 属于 2.6.1 版本中新增的一个大功能。当前 Pulsar 支持的 Authentication Providers 主要有以下几种:
- TLS Authentication
- Athenz
- Kerbos
- JSON Web Token Authentication
整个 OAuth2 相当于授权框架/授权标准,它可以使用第三方应用程序/客户端获得 HTTP 服务上的账户信息权限访问,通过用户信息委派给托管用户信息的一些服务器进行工作。简单来说就是为外部应用提供一个授权流程,更偏向于个人定制化特色,具体操作步骤如下图:

目前支持 OAuth2 功能的主要有:
- Java Client(Client 版本在 2.6.1 及以上)
- CPP Client
- Go Client
- pulsar-admin
- pulsar-perf
- pulsar-client
- pulsarctl(CLI && admin API)
总结
此次直播主要在 Pulsar 版本更新细节中简明扼要地分享了几个重要细节,2.6.1 版本也将在未来几天内正式发布上线,敬请期待。更多直播细节可点击下方视频回放观看:https://v.qq.com/x/page/y3137om2z9z.html。
特性预览:Apache 顶级项目 Apache Pulsar 2.6.1 版本的更多相关文章
- Apache 顶级项目 Apache Pulsar 成长回顾
关于 Apache Pulsar Apache Pulsar 是 Apache 软件基金会顶级项目,是下一代云原生分布式消息流平台,集消息.存储.轻量化函数式计算为一体,采用计算与存储分离架构设计,支 ...
- Dubbo下一站:Apache顶级项目
导读: 近日,在Apache Dubbo开发者沙龙杭州站的活动中,阿里巴巴中间件技术专家曹胜利(展图)向开发者们分享了Dubbo2.7版本的规划. 本文将为你探秘 Dubbo 2.7背后的思考和实现方 ...
- 盘点 35 个 Apache 顶级项目,我拜服了…
Apache 软件基金会 Apache 软件基金会,全称:Apache Software Foundation,简称:ASF,成立于 1999 年 7 月,是目前世界上最大的最受欢迎的开源软件基金会, ...
- 我给 Apache 顶级项目提了个 Bug
这篇文章记录了给 Apache 顶级项目 - 分库分表中间件 ShardingSphere 提交 Bug 的历程. 说实话,这是一次比较曲折的 Bug 跟踪之旅.10月28日,我们在 GitHub 上 ...
- C# 9.0 新特性预览 - 顶级语句
C# 9.0 新特性预览 - 顶级语句 前言 随着 .NET 5 发布日期的日益临近,其对应的 C# 新版本已确定为 C# 9.0,其中新增加的特性(或语法糖)也已基本锁定,本系列文章将向大家展示它们 ...
- C# 9.0 新特性预览 - init-only 属性
C# 9.0 新特性预览 - init-only 属性 前言 随着 .NET 5 发布日期的日益临近,其对应的 C# 新版本已确定为 C# 9.0,其中新增加的特性(或语法糖)也已基本锁定,本系列文章 ...
- C# 9.0 新特性预览 - 类型推导的 new
C# 9.0 新特性预览 - 类型推导的 new 前言 随着 .NET 5 发布日期的日益临近,其对应的 C# 新版本已确定为 C# 9.0,其中新增加的特性(或语法糖)也已基本锁定,本系列文章将向大 ...
- C# 9.0 新特性预览 - 空参数校验
C# 9.0 新特性预览 - 空参数校验 前言 随着 .NET 5 发布日期的日益临近,其对应的 C# 新版本已确定为 C# 9.0,其中新增加的特性(或语法糖)也已基本锁定,本系列文章将向大家展示它 ...
- Windows Phone 8.1SDK新特性预览
前言 Windows Phone 8.1的预览版将在近期推送,WP 8.1的SDK也已经进入到RC阶段,可以从这里安装.本次更新的SDK被直接集成到了VS2013Update2里面,不再是单独的 ...
随机推荐
- 使用Flask开发简单接口(2)--POST请求接口
今天我们继续学习如何使用Flask开发POST接口:用户注册接口和用户登录接口. request接收参数 当我们在页面发出一个POST请求,请求传到服务器时,需要如何拿到当前请求的数据呢?在Flask ...
- 【小白学AI】八种应对样本不均衡的策略
文章来自:微信公众号[机器学习炼丹术] 目录 1 什么是非均衡 2 8种解决办法 2.1 重采样(四种方法) 2.2 调整损失函数 2.3 异常值检测框架 2.4 二分类变成多分类 2.5 EasyE ...
- Spring Cloud Data Flow用Shell来操作,方便建立CICD
1 前言 欢迎访问南瓜慢说 www.pkslow.com获取更多精彩文章! 之前我们用两篇文章讲解了Spring Cloud Data Flow,例子都是用UI操作的,但我们在Linux系统上经常是无 ...
- spring security 简介+实战
过滤器链: 依赖: security 功能列表: 一.登录验证.权限验证 1.1 httpbasic验证 1.2form验证 建立数据需要遵循RBAC模型 用户表要参考UserDetail创建 实例类 ...
- 在Swoole上加速Laravel应用
Swoole是用于PHP的生产级异步编程框架.它是用纯C语言编写的PHP扩展,它使PHP开发人员可以在PHP中编写高性能,可伸缩的并发TCP,UDP,Unix套接字,HTTP,WebSocket服务, ...
- CentOS 7.0防火墙设置
CentOS 7.0默认使用的是firewall作为防火墙,这里改为iptables防火墙.1.关闭firewall:systemctl stop firewalld.servicesystemctl ...
- IndexFlatL2、IndexIVFFlat、IndexIVFPQ三种索引方式示例
上文针对Faiss安装和一些原理做了简单说明,本文针对标题所列三种索引方式进行编码验证. 首先生成数据集,这里采用100万条数据,每条50维,生成数据做本地化保存,代码如下: import numpy ...
- BN系列-未完待续
BN.LN.IN.GN Cross-Iteration Batch Normalization 因为有时候我们的计算能力有限,所以BN设置的比较小,这样BN效果就比较差. 因此我们将最近几次的batc ...
- JVM初探(三):类加载机制
一.概述 我们知道java代码会被编译为.class文件,这里class文件中的类信息最终还是需要jvm加载以后才能使用. 事实上,虚拟机把描述类的数据从Class文件加载到内存,并对数据进行校验,转 ...
- Storcli64 工具操作指南
1.1 介绍 storcli64可对LSIRAID卡基本操作进行管理,本文主要是对LSIRAID卡常使用到的命令进行介绍 1.2 基本语法 获取控制器号:storcli64 /call show al ...