脉冲星 8 月脉动 | Pulsar 2.5.0 功能预览,StreamNative 即将开源 Pulsar Manager_kafka

 

本月亮点速览

脉冲星 8 月脉动 | Pulsar 2.5.0 功能预览,StreamNative 即将开源 Pulsar Manager_分布式_02

产品动态

  • Apache Pulsar 2.5.0 功能预览

  • Apache Pulsar 2.4.1 功能预览

社区动态

  • Apache Pulsar Meetup 北京站完美落幕

  • StreamNative 即将开源 Apache Pulsar Manager

  • StreamNative 引入 KoP 连接 Kafka 生态

  • Apache Pulsar 融合大数据周边生态

  • StreamNative 成为 Flink Forward Berlin 首家 Startup Sponsor

  • Apache Pulsar 在全球举办多场

技术干货

  • Meetup用户案例(腾讯、雅虎和 EMQ)

  • 技术博客(Pulsar IO connector 系列和 Pulsar Flink connector 等)

产品动态

整个 8 月,Pulsar 2.5.0 版本和 2.4.1 版本的开发在紧张有序地进行,以下是本月的新增功能和改进提高。

Apache Pulsar 2.5.0 功能预览

新增功能

PIP 39: Namespace Change Events

Pulsar 是一个多租户事件流系统,管理员可以通过在不同级别设置策略来管理租户和命名空间,retention、存储配额等策略只能在命名空间级别设置。在许多用例中,用户希望能在 topic 级别配置相关策略。Pulsar 2.5.0 支持用户在 topic 级别配置相关策略。

更多信息,参阅 PIP-39

(https://github.com/apache/pulsar/wiki/PIP-39%3A-Namespace-Change-Events)。

PIP 31:事务支持

目前,Pulsar 通过 Idempotent Producer 支持在单个 partition 中的 exactly-once 语义。Idempotent Producer 保证 Producer 发送的消息在不丢失的情况下仅会被持久化一次。但是,当 Producer 发送消息到多个 partition 时,不能保证消息发送的原子性。同样,Pulsar Functions 在处理多个事件或者输出一组结果到不同 topic partition 时,不能保证计算的原子性。PIP-31 通过增加对事务的支持来解决上述场景面临的问题。Pulsar 2.5.0 提供事务支持。

更多信息,参阅 PIP-31

(https://github.com/apache/pulsar/wiki/PIP-31%3A-Transaction-Support)。

改进提高

Broker

用户设置 autoSkipNonRecoverableData时,如果 ledger 中的数据被删除,机器可以自动回复 cursor 的配置。但是 Expiry-monitor 并不会使用该标志,这就导致在清理过期的消息时,如果遇到 managed-ledger 相关异常时,程序会被 blocked。在 Pulsar 2.5.0 中, 启用 autoSkipNonRecoverableData标志时,Expiry-monitor 可以跳过不可恢复的 managed-ledger 异常(例如,data/ledger 不再存在)。

更多信息,参阅 PR-4818

(https://github.com/apache/pulsar/pull/4818)。

Schema

1. 当前 KeyValue 的 schema 不支持使用 AUTO_CONSUME,在 Pulsar 2.5.0 中重构了 Schema 接口,支持在订阅之前获取 AutoConsumeSchema 和 KeyValueSchema 的 Schema 信息。

更多信息,参阅 PR-4839

(https://github.com/apache/pulsar/pull/4839)。

2. 为 Schema 添加新的 Restful API 接口:

  • getAllVersions: 对于给定的 topic,返回 Schema version 的列表。

  • testCompatibility : 支持在不注册 Schema 的情况下测试其兼容性。

  • getVersionBySchema: 支持通过 Schema 定义找到 Schema 对应的版本。

更多信息,参阅 PR-4800

(https://github.com/apache/pulsar/pull/4800)。

Client

1. 为 Pulsar-client-cpp 中 batch 场景下的 producer 提供一种方便的方式来获取 send 的 callback 信息。

更多信息,参阅 PR-4885

(https://github.com/apache/pulsar/pull/4885)。

2. 在 ConsumerImpl中,将 getLastMessageId 对外暴漏给用户使用。

更多信息,参阅 PR-4911

(https://github.com/apache/pulsar/pull/4911)。

SQL

1. 在 Pulsar SQL 中增加 checkstyle 插件,检查并修复之前代码模块中的格式错误。

更多信息,参阅 PR-4882

(https://github.com/apache/pulsar/pull/4882)。

2. 在 Pulsar SQL 中显示 table 的列表时将返回 partitioned topic 的 name 信息,当与某些 UI 工具集成时,无法选择具体的 partitioned topic。在 Pulsar 2.5.0 中,将 partitioned topic 的 name 作为 Pulsar SQL 表中的内部列,允许用户根据指定的 partition 信息获取 partition 相关的数据。

更多信息,参阅 PR-4888

(https://github.com/apache/pulsar/pull/4888)。

Function

在当前版本中,运行 Pulsar Functions、source 和 sink 时,资源的 requests 和 limits 被设置为同一个值,这本身并无问题,但在集群模式下,资源的实际利用率略低。为了提高资源的实际利用率,在 function-worker.yml 中新增了 cpuOverCommitRatio 和 memoryOverCommitRatio 配置项,允许用户灵活配置具体资源的使用率情况。

更多信息,参阅 PR-4829

(https://github.com/apache/pulsar/pull/4829)。

Pulsar-Kafka

目前,pulsar-kafka 的适配器使用 Kafka 0.10.x 版本。为了使低版本的用户快捷地迁移至 Pulsar,Pulsar 2.5.0 的 pulsar-kafka 适配器将同时支持 kafka-api-version 0.9.X 和 kafka-api-version 0.8.X版本。

更多信息,参阅 PR-4886 

(https://github.com/apache/pulsar/pull/4886)和 PR-4797

(https://github.com/apache/pulsar/pull/4797)。

Apache Pulsar 2.4.1 功能预览

改进提高

Broker

1. 在 Broker 中,lastPosition 会在重启 manageLedger 时进行更新。如果创建一个空 Ledger,之后不重启 manageLedger,此时,当用户新建一个 consumer 或 producer,会再产生一个 Ledger,lastPosition 会指向前面空的 Ledger,而 firstPosition 会指向新的 Ledger,导致 firstPosition 比 lastPosition 靠前。

更多信息,参阅 PR-4853

(https://github.com/apache/pulsar/pull/4853)。

2. 修复了 uninitializedCursors 在

 ManagedLedgerImpl.asyncOpenCursor 中并发访问的问题。

更多信息,参阅 PR-4837

(https://github.com/apache/pulsar/pull/4837)。

Schema

1. 修复了 GetSchema() 在请求中没有 schema version 的处理逻辑,Pulsar 2.4.1 将 GetSchemaResponse 返回至 client。

更多信息,参阅 PR-4975

(https://github.com/apache/pulsar/pull/4975)。

2. StructSchema LoadingCache 用于缓存读取器,但其对应的 key 为 byte[] 类型,它将与地址的哈希码进行比较。因此,每个解码都会生成一个新的读取器。Pulsar 2.4.1 更改了 LoadingCache 的密钥类型,修复了该问题。

更多信息,参阅 PR-4962

(https://github.com/apache/pulsar/pull/4962)。

3. 在 pulsar-sql 的使用场景下,当 Pulsar 往 schema registry 中存储 byte[] 类型的 schema 时,可能会报错。导致该问题的原因是当某一 topic 未被指定具体的 schema 时,没有处理 not found schema 异常。Pulsar 2.4.1 修复了该问题,并在未指定具体 schema 类型时,使用默认的 schema 类型。

更多信息,参阅 PR-4890

(https://github.com/apache/pulsar/pull/4890)。

Client

1. 为了保留已经 Ack 的数据,Pulsar 提供了相应的 Retention 策略,用户能根据需求进行配置。默认情况下,retention size 的值为 0,这表示需要保存消息的大小无限大,但是这个行为并未生效,Pulsar 2.4.1 修复了该问题。

更多信息,参阅 PR-4825

(https://github.com/apache/pulsar/pull/4825)。

2. Producer 与 consumer 的拦截器功能只 catch 了相关的异常信息,并没有 catch 相关的 error 信息,Pulsar 2.4.1 修复了该问题。

更多信息,参阅 PR-4860

(https://github.com/apache/pulsar/pull/4860)。

3. 在 CPP client 的 BatchMessageTest 测试场景中,不支持获取指定的错误返回类型。Pulsar 2.4.1 添加了新的方法 producerFailMessages,允许返回指定的错误类型。

更多信息,参阅 PR-4873

(https://github.com/apache/pulsar/pull/4873)。

4. 用户能创建只有 1 个 partition 的 partition topic,但在 Pulsar Client 中该行为无法正常工作。Pulsar 2.4.1 修复了该问题,确保用户可以创建只有一个 partition 的 partition topic。

更多信息,参阅 PR-4883

(https://github.com/apache/pulsar/pull/4883) 和 PR-5016

(https://github.com/apache/pulsar/pull/5016)。

5. 在 Java Client 中,用户启用 batch 功能时,在 message 中无法获取到 replicator_to 字段。Pulsar 2.4.1 将 replicator_to 字段添加到 message 中,确保用户可以获取到相关的信息。

更多信息,参阅 PR-4930

(https://github.com/apache/pulsar/pull/4930)。

6. Pulsar 使用的 jackson-databind 版本存在安全漏洞。Pulsar 2.4.1 将 jackson-databind 版本升级到 2.9.9.3。

更多信息,参阅 PR-5011

(https://github.com/apache/pulsar/pull/5011)。

7. Pulsar-client-cpp 中的 snappy 压缩器在编译时会出现 raise undeclared identifier 相关错误。Pulsar 2.4.1 修复该问题并确保 snappy 压缩器可以正确地工作。

更多信息,参阅 PR-4972

(https://github.com/apache/pulsar/pull/4972)。

Function

1. 在 Pulsar Functions 中,对于像使用 KubernetesRuntime 这类的外部 runtime 管理器,当将某些 Function 实例从一台机器迁移到另一台机器时,Function 需要重新初始化 GRPC 类似的内容,否则 Pulsar Functions 无法正常工作。

更多信息,参阅 PR-5007

(https://github.com/apache/pulsar/pull/5007)。

2. Pulsar Functions 的 jar 支持两种形式:用户手动上传或从 Bookkeeper 通过 URL 的形式下载 Function 的 pkg。当前,使用 FunctionActioner 下载文件时,可能会造成文件描述符泄漏。Pulsar 2.4.1 修复了该问题。

更多信息,参阅 PR-4970

(https://github.com/apache/pulsar/pull/4970)。

社区动态

本月,多方共同促进 Apache Pulsar 社区繁荣,Pulsar 发展势不可挡。

Apache Pulsar Meetup 北京站

完美落幕

2019 年 8 月 17 日, Apache Pulsar Meetup 在北京举行,开启了中国之旅第五站。本次 Meetup 由 StreamNative 主办,联合 Yahoo! Japan、Tencent、智联招聘、EMQ 和 Apache Flink 社区等共同合作。

本次 Meetup 的内容为:

  • Nozomi Kurihara:Apache Pulsar at Yahoo! Japan

  • 翟佳:Kafka on Pulsar (KoP)

  • 李鹏辉/丛搏:智联招聘如何参与社区开发以及 Key_Shared 等近期贡献特性详解

  • 刘德志:Apache Pulsar 在腾讯计费场景下的实践

  • 郭斯杰/张勇:Pulsar 2.5.0 事务功能预览

  • 金发华:Apache Pulsar 在 EMQ 物联网平台产品 ActorCloud 上的应用

  • 唐云:监控流系统中的 Flink 状态管理

  • 申毅杰:Apache Pulsar 和与大数据生态的集成与实践

更多信息,参阅 [Recap] Apache Pulsar Meetup 北京站。

StreamNative 即将开源 

Apache Pulsar Manager

此前,StreamNative 和 Yahoo! Japan 各自研发了 Pulsar 管理工具。Apache Pulsar Meetup 北京站结束后,双方进行了深入的技术交流和充分的探讨,共同决定合并各自开发的 Pulsar 管理工具,并将在未来开源。这标志着 StreamNative 引领了 Pulsar 社区国际化合作共赢的新方向,并在推动 Pulsar 社区全球化发展的道路上又向前迈进了一大步。

StreamNative 引入 KoP

连接 Kafka 生态

StreamNative 开创性地研发了 KoP(Kafka on Pulsar),并在 Apache Pulsar Meetup 北京站上首次公开分享了 KoP 的研发进展与实施情况

KoP 在 Pulsar 上原生支持 Kafka 协议,用户可以使用 Pulsar 作为底层基础设施,而无需修改基于 Kafka 的各种应用和服务。StreamNative 通过 KoP 帮助用户不受应用迁移和重写所困扰,高效便捷地帮助用户解决了痛点问题,并开创性地连接了 Pulsar 和 Kafka 两大开源社区。StreamNative 秉承“开源、开放”的理念,积极促进 Pulsar 与多方开源社区的繁荣与发展。

Apache Pulsar 融合大数据周边生态

StreamNatvie 长期致力于 Pulsar 与大数据周边生态的融合,并积极反馈 Pulsar 社区。

StreamNative 融合 

Apache Pulsar 与 Apache Flink

1. Apache Flink Meetup(西雅图站),发表了主题为《When Apache Pulsar Meets Apache Flink》演讲。

Pulsar 是分片存储的架构,Flink 能在同一框架下处理批流工作负载。在大规模弹性数据处理的场景下,两个开源框架可以融合集成,构建实时流仓库。

郭斯杰讲述了 Pulsar 如何提供统一的数据层视图、如何使用 Flink 统一的计算和弹性数据处理能力,并分享了 Pulsar 与 Flink 的最新融合进展(特别是 effectively-once 和 schema 方面的集成)。

更多信息,参阅 Pulsar 和 Flink 的批流融合。

2. 2019 年 8 月 31 日,StreamNative 的申毅杰博士将做客“2019 世界人工智能大会(WAIC)”,参加“大数据 AI 开源生态”高端论坛,发表主题为《基于 Apache Pulsar 和 Apache Flink 进行批流一体的弹性数据处理》的演讲。

更多关于此次论坛演讲日程和嘉宾的信息,参阅 大数据 AI 开源生态论坛-演讲日程表

(https://www.huodongxing.com/event/4505654375600)。

近期,StreamNatvie 将开源与 Apache Flink 1.9 集成的 Apache Pulsar Connector,我们将第一时间公布最新进展,敬请期待。

StreamNative 融合 

Apache Pulsar 与 Apache Spark

2019 年 7 月 9 日,StreamNatvie 开源了 Apache Pulsar Spark Connector,通过该 connector,用户能从 Spark 读取 Pulsar 数据和向 Pulsar 写入 Spark 数据。

更多信息,参阅:

  • Pulsar Spark Connector 源代码与用户指南

    https://github.com/streamnative/pulsar-spark

  • 在 Spark SQL 和 Spark Structured Streaming 中使用 Pulsar

  • 如何基于 Pulsar 和 Spark 进行批流一体的弹性数据处理?

StreamNative 成为 

Flink Forward Berlin 

首家 Startup Sponsor

Apache Pulsar 社区欣欣向荣,发展稳步向前,离不开各方的支持与帮助。StreamNative 作为 Pulsar 的主要倡导者,一直竭力推进 Pulsar 的发展,并积极促进 Pulsar 与其它开源社区的密切合作,受到业界高度关注和认可。

2018 年 8 月 1 日,Flink Forward 官方宣布,StreamNative 正式成为 Flink Forward Europe 2019 首家 Startup Sponsor!StreamNative 成员将在今年 10 月赴往欧洲参加 Flink Forward Europe,继续推进 Pulsar 与其它开源社区的发展。

更多信息,参阅 StreamNative 成为 Flink Forward Europe 2019 首家 Startup Sponsor。

Apache Pulsar 

在全球举办多场 Meetup

1. 2019 年 8 月 21 日,Thor Sigurjonsson 在 Utah Data Engineering Meetup 发表了主题为《Messaging Fabric at Overstock.com Built with Apache Pulsar》演讲。

更多信息,参阅 Utah Data Engineering Meetup - Real Time(https://www.meetup.com/utah-data-engineering-meetup/events/263761070)。

2. 2019 年 8 月 27 日,Matti-Pekka Laaksonen 在 Apache Kafka Meetup 赫尔辛基站发表了主题为《Apache Pulsar and Real Time Infrastructure in Public Transport》演讲。

更多信息,参阅 Apache Kafka Meetup - Helsinki

(https://www.meetup.com/Helsinki-Apache-Kafka-Meetup/events/263025817/)。

技术干货

本月发布了多篇用户案例和技术文档:

  • Apache Pulsar 在腾讯计费场景下的应用

  • 雅虎日本如何用 Apache Pulsar 构建日均千亿的消息平台

  • Apache Pulsar 在 EMQ 物联网平台产品 ActorCloud 上的应用

  • Kafka 已落伍,转角遇见 Pulsar

  • 使用 Elastic Beats 搜集日志到 Pulsar

  • Pulsar Sink 入门指南

  • Use Apache Pulsar as Streaming Table with 8 Lines of Code

    https://medium.com/streamnative/use-apache-pulsar-as-streaming-table-with-8-lines-of-code-39033a93947f

作者 | xiaolong + Anonymitaet

审校 | Sijie

编辑 | Irene

更多关于 Pulsar 的技术干货和产品动态,请关注 ApachePulsar 微信公众号。

脉冲星 8 月脉动 | Pulsar 2.5.0 功能预览,StreamNative 即将开源 Pulsar Manager_分布式_03