转载

Apache Pulsar 2.4.2 版本说明

️阅读本文需 8 分钟

2019 年 12 月 04 日,Apache Pulsar 发布了 2.4.2 版本。

2.4.2 版本合并了社区的 110 个 PR,修复了大量漏洞,覆盖 Broker、客户端、Pulsar Functions 和 connectors 等,进一步丰富和完善了 Pulsar 作为一个云原生流数据平台的能力。

以下是 2.4.2 版本的详细信息。

>>> :mag_right:漏洞修复 <<<

> Broker

  • 修复了在 asyncReplayEntries 触发 callback 之后,没有返回 empty result 的问题。 [PR-5500]

  • 修复了在并发场景下,PersistentDispatcherMultipleConsumers 存在的竞态问题。 [PR-5499]

  • 修复了当用户使用自定义的 auth-provider 时出错的问题。 [PR-5462]

  • 修复了由于 NPE 导致的 namespace policies 设置不生效的问题。 [PR-5408]

  • 修复了由于 messagesToRedeliver 的竞态条件,导致无法读取更多的 entries 的问题。 [PR-5391]

  • 修复了在 addConsumer 中潜在的死锁问题。 [PR-5371]

  • 在 proxy 中增加 request body 的 cache,确保请求能够被重新发送到 proxy。 [PR-5361]

  • 修复了当数据写入 BookKeeper 失败时,需等待 10s 后才创建新 ledger 的问题。 [PR-5322]

  • 当前,如果在创建 producer/consumer 时,broker 会通过 zkCache 中所记录的 namespace 策略尝试给它们授权,但是,如果从 zk-node 中读取数据超时,zk-cache 将会处于 5 分钟左右的 pending 状态,这导致在此期间,client 将无法在该 topic 上继续创建新的 producer/consumer。 2.4.2 版本修复了此问题。 [PR-5298]

  • 修复了在 ack timeout 到期后,触发 broker 重新发送消息时存在的数据竞态问题。 [PR-5276]

  • 修复了消息去重时可能导致的消息重复状态不确定的场景下,错误未被正确处理的问题。 [PR-5243]

  • 修复了在多线程场景下,可能会同时更改 brokerToNamespaceToBundleRange 这个 map,如果出现 NPE,可能导致查询 namespace 下的 bundle 出错。 [PR-5191]

  • 修复了在 Failover 的订阅模式下,如果执行 reset cursor 会造成消息无法被再次正确分发的问题。 [PR-5185]

  • 修复了 broker 在开启 TLS 的情况下,与 Functions Worker 一起启动时出错的问题。 [PR-5151]

  • 修复了 reset cursor 可能导致的死锁问题。 [PR-5136]

  • 修复了在没有订阅的情况下,storage size 的值总是为 0  的问题。[PR-5108]

> Pulsar Functions

  • 修复了 connectorsManager 在 WorkerService 中重复初始化的问题。 [PR-5545]

  • 修复了在 FunctionRuntimeManager 初始化阶段,functions 不必要地重新启动。 这会影响外部调度程序调度 Functions,例如:bernetes。 [PR-5527]

  • 修复了在创建 Functions 的过程中,使用 --output-serde-classname 选项时,functionClassLoader 不能被正确设置的问题。[PR-5357]

  • 修复了当从 state function 中查询一个不存在的 key 时,导致的 NullPointerException 的问题。 [PR-5272]

  • 修复了在使用不同 classloaders 加载 function instance 时, window functions 可能被阻塞的问题。 [PR-5117]

> Java Client

  • 修复了在 Java Client 中捕获 interrupt 异常后需要再次设置 interrupt 标志的问题。 [PR-5643]

  • 修复了数据到期后由于连接 readers 而被删除的问题。 [PR-5621]

  • 修复了在使用 REST API 获取 non-persistent topics 时,会显示 persistent topics 的问题。 [PR-5502]

  • 修复了 UnAckedMessageTracker 中由于参数错误导致 “3600 messages have timed-out” 的问题。 [PR-5477]

  • 修复了在序列化单挑 batch message 中可能导致的 OOM 问题。 [PR-5443]

  • 修复了在 batch 启用时,发送大消息时会导致 producer 被阻塞的问题。 [PR-5282]

  • 修复了用户设置 initial backoff delay 和 max backoff delay 不生效的问题。 [PR-5261]

> Cpp Client

  • 修复了 negative ack tracker 不能按照给定的初始化顺序进行初始化的问题。 [PR-5453]

  • 修复了关闭 producer 时bad_weak_ptr 导致的错误。 [PR-5315]

  • 修复了 ClientConnection 中的析构函数没有正确被执行导致的内存泄漏问题。 [PR-5286]

  • 修复了在 mac OS 系统中 Cmake build 出错的问题。 [PR-5263]

  • 修复了 deadline_timer 持有对象引用导致的内存泄漏问题。 [PR-5246]

> Python Client

  • 修复了 Python API create_reader 选项中 typo 错误导致 reader 创建失败的问题。 [PR-5487]

> Go Client

  • 修复了官网缺少 Go Client 相关接口文档的问题。 [PR-5595]

> Schema

  • 修复了在 Protobuf Schema 下, schema def 构建错误的问题。 [PR-5569]

  • 修复 StringSchema 静态初始化时的顺序问题。 [PR-5445]

> Connectors

  • 修复了 pulsar-spark 中,receive 忽略了大部分 ConsumerConfiguration 选项的问题。 [PR-5152]

>>>  :mag_right: 优化改进 < <<

> Broker

  • 提高延迟消息中 tracker 的效率来避免比预期更频繁的调度计时器。 [PR-5498]

  • 在消息分发过程中,“删除标记”之前的消息不会被重新分发。 [PR-5378]

  • 确保 skip-all command 能够跳过所有的消息。 [PR-5375]

  • 在用户元数据信息被附加到一个 block 中时,如果用户没有同时指定 region 和 endpoint, offload 的操作将会抛出异常。 在 2.4.2 中,使用空 string 串来代替 null,确保 offload 可以正常进行。 [PR-5355]

  • 在分层存储中,只有在读取不到期望的 entry 时,才会进行 seek 操作。 [PR-5356]

  • 如果 cursor 未被持久化,那么当所有 consumers 关闭时,订阅将会被 close 并且会从所在的 topic 中移除。 在这种情况下,我们需要将 dispatcher 一同关闭,否则 RateLimiter 并不会被垃圾回收,从而造成内存泄漏。 [PR-5340]

  • 默认情况下,禁用 stickyRead 相关的功能。 [PR-5321]

  • 避免往一个 read-only 的 cursor ledger 中 append 数据。 [PR-5297]

  • 当订阅类型改变时,关闭之前的调度器。 [PR-5288]

  • 提高 effectively once 错误处理的逻辑。 [PR-5271]

  • 升级 security 相关的依赖。 [PR-5232]

  • 允许使用正则表达式来删除 topic。 [PR-5230]

  • 在订阅失败后,确保 consumer 相关的后台资源被关闭。 [PR-5204]

  • 允许配置 BookKeeper 中 region-aware placement 相关的配置项。 [PR-5100]

  • DeleteBookieRack 方法应该从 ZooKeeper 中删除 rack 相关的信息。 [PR-5084]

  • 如果 ZkBookieRackAffinityMapping 无法解析网络的位置信息时,不进行返回 DEFAULT_RACK 的操作。 [PR-5067]

  • 取代之前同步加载的方式,使用异步的方式从 cache 中重新加载 zk,这不会影响重新加载的顺序,避免死锁。 [PR-5049]

  • 当 cursor 读取的位置小于 LastIndividualDeletedRange 时,已经确认的消息将不会被发送。 [PR-4987]

  • 从连接器中删除过时的 failed-producer。 [PR-4741]

  • 在 non-partition topic 中,确保 Failover 的订阅类型能够选举出活跃的 consumer。 [PR-4604]

> Java Client

  • 对外暴露一些常用的 ManagedLedger 中的方法。 [PR-5472]

  • 在开启 batch 的情况下,当 publish 消息失败时,避免内存泄漏。 [PR-5442]

  • 为 partitioned topic 添加 seek by time 的接口。 [PR-5435]

  • 确保获取 namespace 的 topics 列表使用异步的方式进行处理。   [PR-5188]

  • 在 consumerImpl 中将 getLastMessageId 的接口暴露给用户使用。 [PR-4911]

> Cpp Client

  • 在 cpp client 中,支持延迟消息相关的功能。 [PR-5317]

> Python Client

  • 在 create_reader 中添加 is_read_compacted 接口。 [PR-5483]

  • 在 python client 中支持 Key_Shared 的订阅类型。 [PR-5196]

> Pulsar-Perf

  • 记录消息失败的原因,避免 publish 消息出错的情况下,进程退出。 [PR-5441]

  • 在 Pulsar-Perf 中,允许用户配置多个线程来执行 perf-producer。 [PR-5036]

> Pulsar Functions

  • 在使用 querystate 时,如果没有指定 key,则抛出错误。 [PR-5145]

> Connectors

  • 为 Pulsar Sinks 添加 --subs-position  选项,支持用户从 latest 或者 earliest 的位置消费数据。[PR-5532]

  • 在 connectors 官方下载地址中,未正确生成 Flume、Solr 和 Redis 的 connectors 下载地址。 在 2.4.2 中,将配置信息添加到 io.xml 确保下载链接可以正确生成。 [PR-4999]

> Schema

  • 支持获取 keyValueSchema 相关的信息。 [PR-4877]

  • 支持获取 partition topic 中 schema 相关的信息。 [PR-4751]

Apache Pulsar 2.4.2 版本说明

原文  http://mp.weixin.qq.com/s?__biz=MzUyMjkzMjA1Ng==&mid=2247484552&idx=1&sn=a2d0d4b8d4ead6a1592792a77f47e82b
正文到此结束
Loading...