????️阅读本文需要 8 分钟
> PIP-45 Pluggable metadata interface
该方案提供一个统一的可插拔的接口,抽象出 Pulsar 的元数据实现。重构后,默认仍然基于 ZooKeeper 来存储元数据,并且元数据仍然以相同的格式保存在同样的位置。一旦定义了接口,我们就可以支持多个元数据存储的实现:
-
ZooKeeper
-
Etcd
-
In-memory 基于内存的实现,用于测试
-
Local disk 在单机模式下存储在本地磁盘上
该方案旨在规范 Pulsar 的发布的流程,它提出了一种更加规范的发布流程,包括定义了什么是新增功能、什么是问题修复、代码何时冻结、功能未开发完应该如何做、以及重点关注的点、版本发布负责人、版本号与版本发布时间等。
- 修改 ManagedLedger 的部分方法为 public,方便其他的外部类调用(PR-5472)。
- 支持异常 skip 所有消息(PR-5375)。
- 在 proxy 上增加一个缓存,确保请求 body 能被正确重发(PR-5361)。
- 在执行 offload 操作时,不再要求同时指定 region 和 endpoint(PR-5355)。
- 如果游标没有被持久化,订阅将在所有 consumer 被移除后再关闭和清理(PR-5340)。
- 默认关闭粘性读(PR-5321)。
- 增加 debug 日志(PR-5302)。
- 在 zk-cache 超时时,使缓存无效(PR-5298)。
-
对于只读 ledger 不再尝试追加(PR-5297)。
当 cursor 从 ledger 中恢复时,ledgerHandle 将保持打开状态,这样能在更新 cursor 状态后删除该 ledger。如果试图在更新 cursor 之前关闭它,会抛出一个错误,即尝试追加只读 ledger 失败。例如:
此外,在关闭操作中追加 ledger 时,需要显式关闭 ledger,以避免在加载 Topic 时进行昂贵的恢复操作。00:29:32.964 [pulsar-ordered-OrderedExecutor-6-0-EventThread] ERROR org.apache.bookkeeper.client.ReadOnlyLedgerHandle - Tried to add entry on a Read-Only ledger handle, ledgerid=10
-
在订阅类型改变时,关闭先前的 dispatcher,否则会导致内存泄漏(PR-5288)。
>>> BookKeeper
PR-5322:当 BookKeeper 写入失败发生时,我们应该在错误恢复代码运行完成后使用适当的信号继续写入(创建新的 ledger),而不是等待 10 秒钟后再创建新的 ledger,以防止出现任何竞争情况。
>>> Client
>> C++
- 修复 C++ 客户端不能正确初始化 timerInterval_ 的问题(PR-5453)。
- 在批量消息发送失败时,避免内存泄漏(PR-5442)。
- 修复在 addConsumer 时潜在的死锁问题(PR-5371)。
- 修复在关闭 producer 的时候出现的 bad_weak_ptr 错误(PR-5315)。
- 解决 C++ 客户端关闭时未执行相应的析构函数导致内存泄漏的问题(PR-5286)。
>> Java
- 修复错误的消息和不正确的批大小导致的 OOM 问题(PR-5443)。
- 修复 subscription.getDispatcher() 的空指针异常。该问题会导致取消 namespace 的角色失败(PR-5408)。
>>> Schema
PR-5445:修复 StringSchema 静态类初始化的问题。由于 Java 中不能保证一个类的静态字段的初始化顺序,这与 JVM 的版本和其他静态条件有关,因此调用时有可能出现空指针异常。
>>> 测试
-
修复由于 pyyaml 的版本问题导致集成测试失败的问题(PR-5432)。
-
修复多个与集成测试相关的 functions,包括增加对 FunctionsCLITest 的测试(PR-5434)。
-
修复一些不稳定的与 Pulsar window 相关的集成测试(PR-5337)。
>>> 周边生态
- Pulsar node client 0.7.0 发布,支持 TLS 和 token 认证。
- Pulsar .Net 客户端发布 0.6.0,0.5.0 和 0.4.0 版本。支持 seek 操作,支持 topic compact 操作,支持添加 key/value 属性。
- Go 版本 Puslar 命令行管理工具 pulsarctl 开源,pulsarctl 基于 Pulsar REST API 使用 Go 语言进行开发,相比 Java 更加轻量级。一方面为 Go 的开发者提供了 API 接口,方便用户开发;另一方面提供了一个更方便和快速的命令行客户端。
- 使用 Apache SkyWalking 对 Apache Pulsar 进行消息链路追踪与性能监控。
- Pulsar Express 0.5.0 发布。支持对 broker 进行健康检查,创建和删除 namespace,创建和删除 topic 等操作。
>> Flink Forward Europe 2019 圆满举行
2019 年 10 月 7-9 日,Flink Forward Europe 2019 在德国柏林举行,多个大牛技术团队也参与了此次大会。
StreamNative 作为唯一一家 startup 赞助商也参与其中, StreamNative CEO 郭斯杰发表了主题为 「Query Pulsar Streams using Apache Flink」 的演讲,分享了 Pulsar 与 Flink 1.9 进行集成的最新动态。
????更多详情查看 Recap | Query Pulsar Streams using Apache Flink。
>> Hadoop User Group France 上干货满满
2019 年10月11日,在法国举行的 Hadoop User Group France 圆满结束,1500多人出席参加了此次会议。
此次法国交流之行,StreamNative 的 CEO 郭斯杰分享了 Apache Pulsar 的内容—— Building a unified data processing stack with Apache Pulsar and Apache Spark。
????更多详情查看 Recap|Hadoop User Group France。
>> Crunch Data Conference | Budapest
在 10 月 16 日举行的 Crunch Data Conference 上, Pulsar committer —— Ivan Kelly 进行了主题为「Infinite topic backlogs with Apache Pulsar」的演讲。
????详情可复制 https://crunchconf.com/speaker/IvanKelly#talks 进行查看。
>> Apache Pulsar Meetup 上海站即将启航 由 StreamNative 主办的「Apache Pulsar Meetup |上海站」将在11 月 16 日进行,届时将分享 Pulsar 的最新研发进展、用户案例和行业动态、热点话题等。
本月发布了多篇中英技术文档和用户案例。
-
Life beyond Kafka with Apache Pulsar
(https://dzone.com/articles/life-beyond-kafka-with-apache-pulsar) -
An introduction to Stream Processing with Pulsar Functions
(https://dzone.com/articles/an-introduction-to-stream-processing-with-pulsar-f) -
5 More Reasons to Choose Apache Pulsar over Kafka
(https://kafkaesque.io/5-more-reasons-to-choose-apache-pulsar-over-kafka/) -
How to use Apache Pulsar Manager with HerdDB
(https://medium.com/streamnative/how-to-use-apache-pulsar-manager-with-herddb-dd265c955ca4) -
Why Nutanix Beam went ahead with Apache Pulsar instead of Apache Kafka?
(https://medium.com/@yuvarajl/why-nutanix-beam-went-ahead-with-apache-pulsar-instead-of-apache-kafka-1415f592dbbb) -
Basic Pulsar producer and consumer
(https://www.syscrest.com/2019/10/basic-pulsar-producer-and-consumer-json-helm-kubernetes/)
以上就是 10 月脉动之旅,感谢小伙伴们的全程陪伴。