作者 StreamNative 文档工程师刘昱、软件工程师张勇。
关于 Apache Pulsar
Apache Pulsar 是 Apache 软件基金会顶级项目,是下一代云原生分布式消息流平台,集消息、存储、轻量化函数式计算为一体,采用计算与存储分离架构设计,支持多租户、持久化存储、多机房跨区域数据复制,具有强一致性、高吞吐、低延时及高可扩展性等流数据存储特性。
GitHub 地址:http://github.com/apache/pulsar/
在 Apache Pulsar 2.6.3 版本发布后的 2 个月,2021 年 3 月 18 日,Apache Pulsar 正式发布了 2.7.1 版本!
Apache Pulsar 2.7.1 版本新增诸多优化改进,修复大量漏洞,覆盖 Broker、Proxy、Pulsar Perf、Transaction、Pulsar Admin、Pulsar SQL、Client、Function、Pulsar IO 和 Tiered Storage 等方面,进一步丰富和完善 Apache Pulsar 作为云原生流数据平台的能力。
Apache Pulsar 2.7.1 版本总共接受了来自社区约 717 个 commits,合并社区约 210 个 PR,越来越多的小伙伴开始参与到 Pulsar 社区建设中,成为 contributor 的一员。不少代码和文档贡献来自于中国开发者,中国力量越发迅猛。
以下为你详细解读 Apache Pulsar 2.7.1 版本重要的优化改进和漏洞修复。
Broker
优化 schema 比较的逻辑
在 2.7.1 之前,Pulsar schema 通过将 schema 转换为 bytes 的方式比较 schema 类型。上传 schema 时,如果 schema 含有空格或者换行符,会造成 schema 类型不兼容。在 2.7.1 版本中,Pulsar schema 使用 equals 来比较 schema 类型,因此不会造成 schema 类型不兼容。
更多信息,查阅 PR-9612。
在 token 过期前发送报警
在 2.7.1 之前,token 即将过期时,Pulsar 没有相关报警,启用了 token 认证的客户端没有相关指标来查询它的连接状态,而且无法判断是否是 token 过期造成的问题。在 2.7.1 中,Pulsar 提供了 expiredTokenMetrics
和 expiringTokenMinutesMetrics
指标,监控即将过期的 token 状态。
更多信息,查阅 PR-9321。
修复 system topic 无法自动创建
在 2.7.0 中,如果关闭了自动创建 topic,相应 namespace 下的 system topic 也无法自动创建。Topic policy 功能依赖 system topic,所以会导致 topic policy 不能使用。在 2.7.1 中,system topic 不受控于 topic 的自动创建。
更多信息,查阅 PR-9272。
修复获取不存在 topic 分区信息时的报错信息
使用 pulsar-admin 获取一个不存在 topic 的分区信息时,broker 会返回 0 并且没有任何报错信息。在 2.7.1 中,获取一个不存在的 topic 时,Pulsar 会报错并告知该 topic 不存在。
更多信息,查阅 PR-8818。
支持清除 topic backlog 时清除延迟消息
在 2.7.1 之前,如果在发送带有延迟消息时清除 topic backlog,延迟消息不会被清除。2.7.1 修复了该问题。
更多信息,查阅 PR-8691。
Proxy
修复了 bindAddress
不生效的问题
在 2.7.1 之前,bindAddress
对 webPort 生效,但对 servicePort 不生效。 2.7.1 修复了该问题,使 bindAddress
对两个端口都生效。
更多信息,查阅 PR-9068。
修复了认证错误信息不准确的问题
Proxy 在返回错误给客户端时,会将所有错误类型都以 ServiceNotReady
返回给客户端,客户端会将这个错误转换成 LookupError
来处理,这会导致客户端收到的错误信息不准确,并造成客户端错误的行为(因为 LookupError
是一个可重试的错误,客户端会一直进行重连)。2.7.1 修复了该问题,将准确的错误信息返回给客户端,并保证客户端的错误处理正常。
更多信息,查阅 PR-9055。
支持 HAProxy 的代理协议
通常情况下,Pulsar 使用 Pulsar proxy 作为代理连接客户端并处理请求。2.7.1 支持使用 HAProxy 代理协议,该协议更通用。
更多信息,查阅 PR-8686。
Client
支持 Pulsar Perf 获取 JVM 信息
在 2.7.1 中,Pulsar Perf 支持获取 JVM 信息,包括 Netty max memory、 JVM command line arguments 和 Actual max heap size,这为使用 Pulsar Perf 调试提供了便利。
更多信息,查阅 PR-9769。
修复 Pulsar Admin expire-message 命令失败时没有通知的问题
已发送 expire message 的请求或订阅已追赶上快过期的消息时,expire message 命令会失败,并且不会通知用户。 2.7.1 修复了这一问题,在命令失败时会抛出异常。
更多信息,查阅 PR-9561。
为死信队列中的消息加入原有信息
消息发送到死信队列时,“原有信息”(例如,消息 ID 和 topic) 会丢失。如果出现问题,这不利于查找问题出处。 2.7.1 为加入到死信队列的消息添加了更多“原有信息”,方便在出现问题时进行排查。
更多信息,查阅 PR-9655。
支持 Python 客户端的端对端加密功能
2.7.1 新增了 Python 客户端的端到端加密功能,有利于提高消息的安全性。
更多信息,查阅 PR-9588。
支持为 C++ reader 设置订阅名称
使用 C++ reader 时,默认的订阅名称是随机生成的,不能指定订阅名称。2.7.1 支持了为 Reader 设置指定的订阅名称。
更多信息,查阅 PR-8823。
Function
修复使用 K8S runtime 时无法定义下载目录的问题
在 2.7.1 之前,K8S runtime 没有正确使用用户在配置文件中定义的 downloadDirectory
,这会导致无法定义下载目录。2.7.1 修复了这一问题。
更多信息,查阅 PR-9377。
修复日志信息没有正确输出到 log topic 的问题
在 2.7.1 之前,Java Function 中不同的 context 对象会导致日志信息无法正确地生产到相应的 log topic 中,造成用户无法获取日志信息。2.7.1 修复了该问题。
更多信息,查阅 PR-9299。
修复 broker 和 function 之间认证配置兼容的问题
在 broker 和 function 同时配置 brokerClientAuthenticationEnabled
时,会导致 Function Worker 无法启动。2.7.1 修复了该问题。
更多信息,查阅 PR-9190。
支持将 source topic 中的 schema 信息暴露到下游 sink
2.7.1 支持 sink 可以获取 source 发送的消息的 schema,并能继续在 sink 中处理。
更多信息,查阅 PR-8854。
参考信息
期待你加入我们,为 Apache Pulsar 的蓬勃发展添砖加瓦!