乐趣区

关于apache:特性预览Apache-顶级项目-Apache-Pulsar-261-版本

在正式分享 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。

退出移动版