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
Stats & Monitoring
- 在
topicStats
中添加 backlogSize
。PR-5914
- 在 consumer 统计信息中,显示
lastConsumedTimestamp
和 lastAckedTimestamp
信息。PR-6051
- 改进 Topic 中 backlogSize 的统计。PR-6700
Security
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
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
优化改进
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
下载链接
This post was originally published by Guangning E on Apache Pulsar blog.