2020 年 04 月 23 日,Apache Pulsar 正式发布了 2.5.1 版本。
Apache Pulsar 2.5.1 版本合并了社区的 131 个 PR,修复了大量漏洞,涵盖 Broker、客户端、Pulsar Functions、connectors 等,进一步丰富和完善了 Pulsar 作为一个云原生流数据平台的能力。
在这篇文章中,我们将会为大家详细解读 2.5.1 中修复、改进的特性。
01 漏洞修复
Broker
-
修复在禁用自动创建 topic 的时候,在 partitioned topic 上创建 consumer。[PR-5572]
-
修复 consumer 统计数据中的 negative unack 的消息。[PR-5929]
-
修复无法创建或更新包含 global 的集群的租户。[PR-6275]
-
当 topic 名称与分区名称一致时,避免获取分区元数据。[PR-6339]
-
支持使用现有 topic 名称的 substring 创建分区 topic。[PR-6478]
-
修复因运行 topic compaction 导致的内存泄露问题。[PR-6485]
-
解决在 batch 模式下创建 topic 时,Admin 的`getLastMessageId` 无法获取 `batchIndex` 的问题。[PR-6511]
-
修复无法将只包含一个分区的 topic 升级成为包含多个分区的 topic 问题。[PR-6560]
-
修复 putShema() 运行中产生的 `BadVersionException` 异常情况。[PR-6683]
-
在 `Policies` class 中,重新启用 `clusterDispatchRate` 字段,用于设置 topic-level 排空速率,以便实现新老版本的兼容性。[PR-6176]
-
在 broker.conf 文件中显示 BookKeeper `explicit lac` 的配置信息,以便用户使能 `explicitLacInterval`,获取 Pulsar SQL 中的最新消息。[PR-5822]
-
支持在命名空间使能或禁用消息延迟发送的功能。[PR-5915]
-
避免在现有的分区 topic上创建同名的 regular topic。[PR-5943]
-
修复 cursor 重置问题,避免出现 `InvalidCursorPosition Exception` 问题。[PR-6120]
-
修复 BrokerService 中的 Timeout API 调用,为在 BrokerService 中创建的所有 futures 设置 deadline。[PR-6235]
-
修复 `PersistentTopicsBase` 的一些 async 方法问题。[PR-6483]
Pulsar Proxy
-
修正 Pulsar proxy 线程执行器名称。[PR-6460]
-
修复已发布消息的日志问题。[PR-6474]
-
修复 Pulsar proxy 到 Functions worker 的路由问题。[PR-6486]
Stats & Monitoring
-
在 `topicStats` 中添加 `backlogSize`。[PR-5914]
-
在 consumer 统计信息中,显示 `lastConsumedTimestamp` 和 `lastAckedTimestamp` 信息。[PR-6051]
-
改进 Topic 中 backlogSize 的统计。[PR-6700]
Security
-
修复发布 buffer 限制不生效的问题。[PR-6431]
-
修复 `authenticationData` 无法初始化的问题。[PR-6440]
-
为二进制连接验证 token。[PR-6233]
-
修复在 Standalone 模式下使能 TLS 后,namespace 创建失败的问题。[PR-6457]
-
为 topic 提供更多颗粒度许可。[PR-6504]
Pulsar Schema
-
修复在 `HttpLookupService` 获取 schema 版本问题。[PR-6193]
-
为 topic 生成的 consumer 设置独立的 schema。[PR-6356]
-
修复错误的 Avro schema。[PR-6406]
-
修复 Functions 中 Avro scheme 解码错误问问题。[PR-6662]
-
为 `SchemaDefinitionBuilderImpl.java` 添加验证。[PR-6405]
Pulsar Functions
-
修复 Window Functions 部署问题。[PR-6246]
-
在 `PulsarSinkEffectivelyOnceProcessor` 中移除 `future.join()` 参数。[PR-6361]
Java client
-
修复即使当队列值设置为 0 时,可用的 permit 值大于 1 的问题。[PR-6106]
-
修复 broker 客户端 TLS 设置错误问题。[PR-6128]
-
修复当为 batch topic 启动 reader 时,reader 读取 batch topic 中的第一条消息的问题。[PR-6345]
-
修复 `hasMessageAvailable()`。[PR-6362]
-
删除重复的 key,以便发送属性。[PR-6390]
-
修复由于两次调度发现任务,而导致 multitopic 发现终止的问题。[PR-6407]
-
修复发送失败时的 deadlock 问题。[PR-6488]
-
删除重复的 `cnx` 方法。[PR-6490]
-
使用 `System.nanoTime()` 计算运行时间。[PR-6454]
C++ client
-
修复 MacOS 平台上 C++ 库的静态链接问题。[PR-5581]
-
修复 ExecutorService destructor 的内存损坏问题。[PR-6270]
-
修复 NegativeAcksTracker 如何处理已取消的定时器事件问题。[PR-6272]
-
修复当 Pulsar 客户端关闭时可能产生的 deadlock 问题。[PR-6277]
-
修复在 Windows 平台上搭建 CMake 时遇到的问题,主要包括为与 Windows 版本相匹配的 zlib、protobuf、curl 库提供更多库名。[PR-6336]
-
利用时间分区修复 `UnAckedMessageTracker` 问题。将 `acktimeout` 划分为几个时间分区,这样用户就可以定义再发送周期。[PR-6391]
-
修复将已确认消息作为未确认消息再次发送的问题。由于将 `acktimeout` 划分为几个时间分区,一些已确认消息作为未确认消息会被再次发送。[PR-6498]
-
当消息列表为空时,避免调用 `redeliverMessages()`,否则导致立即发送所有未确认消息。[PR-6480]
-
在 Debian 或 RPM 中再提供一个 `libpulsarwithdeps.a`,以避免安全问题。[PR-6458]
Python Client
-
修复无法找到 enum34 包的问题。[PR-6401]
-
支持在 Python 3.8上安装 Pulsar 客户端。[PR-6741]
Pulsar Websocket
-
修复 WebSocket 无法设置正确的集群数据的问题。[PR-6102]
Kubernetes
-
在 `values-mini.yaml` 文件中,明确说明 `BOOKIE_MEM` 和 `BOOKIE_GC`。[PR-6340]
-
将自动修复特性的 configmap 中的 `PULSAR_MEM` 改为 `BOOKIE_MEM`,解决执行自动修复时,提示的 `could not find or load main clas` 问题。[PR-6373]
-
在 `proxy-deployment.yaml` helm 模版中,定义一个新的 init container,解决因未启动 Broker 就启动 proxy 带来的 HTTP 403 问题。[PR-6158]
-
为 dashboard-ingress 添加缺失的检查。[PR-6160]
-
确保为 Bookie 设置了 JVM 内存和 GC 选项。[PR-6201]
-
修复运行 Kubernetes 时,使用缺省 `functionAuthProvider` 的问题。[PR-6203]
Adaptors
确保总是可以从缓存中获取已启动的 Pulsar 客户端。当缓存中的 Pulsar 客户端被关闭后,PulsarConsumerSource 重用 Pulsar client 时会产生异常情况并不断报错。[PR-6436]
02 优化改进
Broker
-
支持从 broker 缓存中移除已关闭的 producer,以便创建新的 producer,并有助于避免消息发布失败。[PR-5988]
-
支持删除已被读取所有信息,且没有活跃的 producer 或 consumer 的 topic。[PR-6077]
-
添加一条信息,用以说明在启动组件时如何立即刷新日志。[PR-6078]
-
支持将资源利用率输出至日志。[PR-6152]
-
引入 maxMessagePublishBufferSizeInMB 配置,避免 broker 内存溢出(OOM)。[PR-6178]
-
配置 `getNumberOfEntriesInBacklog(boolean isPrecise)`和 `msg_backlog_non_delayed` 参数,获取 backlog 的准确数量和不包含延迟消息的 backlog 的数量。[PR-6310]
-
当禁用自动创建 topic 功能时,不允许 Admin 自动创建订阅。[PR-6685]
ZooKeeper
-
支持在为 partitioned topic 创建分区时,在本地 ZooKeeper 创建受管 ledger 路径。[PR-6189]
-
将 ZooKeeper 升级至 3.5.7 版本。[PR-6329]
-
支持在取消调用发生异常的 `Future` 之前,关闭 ZooKeeper。[PR-6399]
Client
-
将 `BatchMessageIdImpl` 的 `acker` 参数设置为 `transient`,避免其打破序列化。[PR-6064]
-
使用 `JSONAssert` 参数并修改相关的 JSON 测试断言,以便提供更稳定的测试。[PR-6247]
Managed Ledger
-
增加 `OpAddEntry` 状态设置,避免不同的 ledger handle 使用同一个 OpAddEntry。[PR-5942]
Pulsar Admin
-
允许租户管理员管理订阅权限。[PR-6122]
03 下载链接
-
Pulsar 2.5.1 的下载链接:
https://pulsar.apache.org/download/ -
Pulsar 项目链接:
https://pulsar.incubator.apache.org/ -
Pulsar GitHub 代码库:
http://github.com/apache/pulsar -
Pulsar Slack channel:
https://apache-pulsar.herokuapp.com/ -
Pulsar 邮件列表:
https://pulsar.incubator.apache.org/contact/