sharetwitterlinkedIn

Apache Pulsar 2.5.1 版本发布,详解修复与改进

April 23, 2020
head img

2019 年 04 月 23 日,Apache Pulsar 正式发布了 2.5.1 版本。

Apache Pulsar 2.5.1 版本合并了社区的 131 个 PR,修复了大量漏洞,涵盖 Broker、客户端、Pulsar Functions、connectors 等,进一步丰富和完善了 Pulsar 作为一个云原生流数据平台的能力。在这篇文章中,我们将会为大家详细解读 2.5.1 中修复、改进的特性。这其中包括:

漏洞修复

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 中添加 backlogSizePR-5914
  • 在 consumer 统计信息中,显示 lastConsumedTimestamplastAckedTimestamp 信息。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_MEMBOOKIE_GCPR-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

优化改进

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

  • BatchMessageIdImplacker 参数设置为 transient,避免其打破序列化。PR-6064
  • 使用 JSONAssert 参数并修改相关的 JSON 测试断言,以便提供更稳定的测试。PR-6247

Managed Ledger

  • 增加 OpAddEntry 状态设置,避免不同的 ledger handle 使用同一个 OpAddEntry。PR-5942

Pulsar Admin

  • 允许租户管理员管理订阅权限。PR-6122

下载链接


This post was originally published by Guangning E on Apache Pulsar blog.

© 北京原流科技有限公司Apache、Apache Pulsar、Apache BookKeeper、Apache Flink 及相关开源项目名称均为 Apache 软件基金会商标。条款隐私