关于 Apache Pulsar

Apache Pulsar 是 Apache 软件基金会顶级项目,是下一代云原生分布式消息流平台,集消息、存储、轻量化函数式计算为一体,采用计算与存储分离架构设计,支持多租户、持久化存储、多机房跨区域数据复制,具有强一致性、高吞吐、低延时及高可扩展性等流数据存储特性。
GitHub 地址:http:///apache/pulsar/


导语

各位小伙伴们,2021 年 4 月 Pulsar 社区月报来啦!

感谢以下各位社区成员本月对 Pulsar 项目的支持,让 Apache Pulsar 继续发光发热!(排名不分先后,看看你有没有上榜 ????????):


linlinnn、lhotari、bdunn313、315157973、eolivelli、congbobo184、MarvinCai、michaeljmarshall、oversearch、ravi-vaidyanathan、Anonymitaet、kaushik-develop、bharanic-dev、gaoran10、hangc0276、abhilashmandaliya、baomingyu、yangl、linlinnn、david-streamlio、kilient、jerrypeng、rdhabalia、massakam、devinbost、merlimat、klwilson227、dragonls、oversearch、sandrzejczak、mz1999、tuhaihe、codelipenghui、dockerzhang、BewareMyPower、RobertIndie、k2la、BoynChan


项目进展

PIP-45:使用协调服务实现负载管理器锁定。




[PIP-82] Broker:在 tenant、namespace 和 topic 级别添加对分布式资源配额实施的支持。




[PIP-82] Broker:实现 ResourceGroup 服务,使用情况数据收集和配额计算。




[PIP-82] Broker:新增将资源使用情况发布到 topic 的任务。




重要进展

Broker

Broker:JWT 身份验证支持数组型角色声明。




Broker:将 ​​LocalPolicies​​ 设为不可变,避免并发不一致的修改。




Broker:改进 Pulsar broker 的 ​​max-pending-bytes​​ 机制。




Broker:防止在回收实例时携带 ​​PositionImplRecyclable​​ 状态。




Broker:同步执行 ​​Persistent*DispatcherMultipleConsumers.readMoreEntries​​ 函数。




Broker:将 ​​preciseTopicPublishRateLimiterEnable​​​ 添加至 ​​broker.conf​​ 文件。




CI

CI:移动经常无法隔离测试组的 flaky test。




CI:将当前 IP 地址、长主机名和短主机名添加到 ​​/etc/hosts​​ 中。




CI:调整 GitHub Runner VM 选项以增加工作中的 RAM 并提高性能。




Client

Java Client:在回收 ​​OpSendMsg​​ 实例之前重置状态。




C++ Client:将 ​​is_connected​​ 方法添加到 C++ API。




WebSocket Client:为 WebSocket URL 的 token 参数值删除 ​​Bearer​​ 前缀。




Schema Registry

Schema Registry:实现 ​​GenericObject​​​,允许 ​​GenericRecord​​ 包装任意 Java 对象。




Schema Registry:在 ​​Message#getValue()​​​ 中支持 ​​KeyValue​​。




Schema Registry:使用 SEPARATED 编码处理 KeyValue。




Schema Registry:解开内部的 ​​AutoConsumeSchema​​ 以处理支持 KeyValue schema 类型的 topic。




Tests

Tests:改进集成测试日志记录,提高日志的可读性和测试效率。




Tests:使用 RSA 算法和 SHA256 重新创建用于 TLS 测试的密钥库,以支持 JDK 11 和 TLS 1.3。




Tests:对集成测试、阴影测试和向后兼容性测试启用测试重试。




Tests:添加 ​​TestNG​​ listener 以减轻资源清理问题。




Tests:通常情况下 broker 会正常关闭,但当达到 ​​brokerShutdownTimeoutMs​​ 时,应该强制关闭 broker。




Tests:加快 flaky test 组的执行速度,并提高测试 listener 的测试覆盖率。




Tests:清理 ​​PulsarClient​​ 实例。




Test:重构现有的 Pulsar Function 单元测试。




Transactions

Transaction:优化 transaction 日志的低水位(low watermark)标记。




Transactions:Pulsar 独立模式支持 transaction。




其他

Consumer:当 consumer 无法向 Pulsar broker 发送许可时,添加调试日志。




Consumer:调整日志,定位问题和格式化代码。




Build:添加 CI 测试,验证可以在 Windows 操作系统 上构建 C++ 客户端。




Build:当仅涉及在 Windows 上构建 C++客户端有改动文档时,跳过测试。




Auth:优化 ​​AuthenticationAthenz​​ 中的锁定。




Functions:支持自定义的 Pulsar Function 日志。




Bookie:如果未定义 ​​BOOKIE_EXTRA_OPTS​​​ 则退回到 ​​PULSAR_EXTRA_OPTS​​。




Connectors:使用 ​​ObjectMapper​​​ 而非 ​​Gson​​ 来解析 source 或 sink 配置。




CLI:将 ​​metrics-port-start​​ 本地运行配置暴露给 CLI。




Enhancement:支持在重新建立元数据会话后自动重新验证资源锁。




Pulsar SQL:当使用 Pulsar SQL 查询列表时,不返回非持久性 topic。




Admin:支持 API 从每个 topic 或 partition 的单独 ​​MessageId​​ 开始。




C++:在 Mac OS上 添加 ​​/opt/homebrew/​​ 作为 OpenSSL 的可能路径。




C ++:支持通过 C++ API 配置内存限制。




Functions:在本地运行模式下暴露 Pulsar Functions 的 Prometheus 指标。




Admin:支持为非持久性调度程序设置 namespace 级别和 topic 级别的策略。




IO:支持实现 sink connector,该 connector 支持 Schema 但在构建时无需指定 schema 类型。




Bug 修复

Broker

Broker:修复在尝试更新本地 broker 数据时发生的​​ConcurrentModificationException​​。




Broker::修复使用 ​​ALWAYS_COMPATIBLE​​ 策略时 schema 类型检查的问题。




Broker:修复在删除已删除 schema 的 topic 时 schema ledger 删除的问题。




Broker::修复 ​​ALWAYS_COMPATIBLE​​ 策略中原始 schema 上传的问题。




Broker::修复重用 ​​EntryBatchIndexesAcks​​ 实例的问题。




Broker:修复加载 topic 时无法成功创建复制器,但却未生成错误日志或抛出异常的问题。




Broker:解除 update-partition API 上的阻塞线程。




Broker:修复在 broker 关闭过程中发生的 Log4j 2 日志的问题。




Broker:在进行身份验证刷新时更新身份验证数据。




Broker:当 ​​PulsarService​​ 关闭时,关闭 namespace client。




Broker:修复 master 分支中的编译失败的问题。




Broker:查找 topic 时删除不必要的 bundle listener 触发器。




Broker:修复了与 “LightProto” 问题相关的复制订阅。




Broker:修复在 Key_shared 订阅模式下添加其他 consumer 时某些 partition 卡住的问题。




Broker:修复当 consumer 启用了重试功能并在 ​​DeadLetterPolicy​​ 中设置了重试主题,consumer 多次收到重试消息后被阻止的问题。




Broker:修复 ​​PersistentReplicator​​​ 中出现的 ​​IllegalStateException​​ 异常。




Build

Build:修复 JDK11 的 ​​core-modules​​ 配置文件。




Build:修复 2.7 分支上的构建错误。




Build:修复 ​​buildtools/pom.xml​​​ 文件中有关 ​​parent.relativePath​​ 的警告。




C++

C++:修复 ​​MemoryLimitController​​ 中的竞争条件。




C++:修复在发送超时的情况下 C++ 客户端无法释放信号量和申请的内存的问题。




C++:修复由于对象生存期问题而导致的释放后使用的未定义行为。




Client

Pulsar-client:修复 ​​MessageIds​​​ 不一致的 ​​equals​​​ 和 ​​hashCode​​ 方法。




Client:修复内存泄漏问题。




[Client] Proxy:创建响应消息的副本,然后将其通过 ​​CompletableFuture​​ 传递给其他线程。




Client:修复 ​​ClientConfigurationData​​ 对象不相等的问题。




Transaction

Transaction:修复 transaction 缓冲客户端通道未激活的问题。




Transaction:修复 transaction 缓冲处理程序未释放信号量的问题。




Transaction:修复 transaction 超时跟踪器过期的问题。




Transaction:修复 transaction 缓冲处理程序同步的问题。




Transaction:修复 transaction 缓冲操作失败的问题。




Transaction:修复 transaction 客户端超时的问题。




Transaction:修复 transaction 客户端重新连接的问题。




Transaction:修复 ​​MLTransactionLog​​​ 生成非法 ​​managedLedger​​ 名称的问题。




Transaction:修复 transaction 超时跟踪器已过期的问题。




Transaction:修复尝试创建 transaction 时因未启用 transaction 导致的 NPE 异常。




Transaction:修复无法恢复 transaction 日志的问题。




Transaction:修复中止 transaction 重试时发生的问题。




Tests

Tests:修复 ​​testOffloadV2​​ flaky test。




Tests:修复 ​​TestDefaultMessageFormatter​​ flaky test。




Tests:修复 2.7 分支上的 ​​WebSocketHttpServletRequestWrapperTest​​ 失败的问题。




Tests:为 “+ Inf” 修复 ​​PrometheusMetricsTest​​ 和 Pulsar Function 测试中的 Prometheus 指标解析。




Tests:取消注册 ​​JettyStatisticsCollector​​ 来修复关闭 broker 时的内存泄漏。




Tests:修复一些 ​​ExecutorService​​ 泄露的问题。




Tests:修复测试中的 TCP 端口冲突。




Tests:修正针对阴影测试和向后兼容性测试的测试重试。




其他

Connectors:修复 Kinesis sink connector 在 ​​onFailure​​ 异常中 Null 错误消息的问题。




Connectors:修复 Kinesis sink connector 无法重试发送消息的问题。




Enhancement:在不破坏公共 API 的情况下,将 ​​chuckedMessageRate​​​ ”修正为 ​​chunkedMessageRate​​。




Security:将 JUnit 版本升级到 4.13.1,以修复 CVE-2020-15250 并修复测试依赖项泄漏的问题。




Security:将 jclouds 升级到 2.3.0 版本以修复安全漏洞。




ManagedLedger:修复 entry cache 大小的更新逻辑,以防止其获得负值。




CLI:修复 ​​CmdTopics​​ 中的 NPE 问题。




Flaky Test:修复 ​​SimpleProducerConsumerTestStreamingDispatcherTest.testRedeliveryFailOverConsumer​​ flaky test。







以上就是 2021 年 4 月份的脉动之旅。Apache Pulsar 正在快速成长,感谢来自大家的支持!

Apache Pulsar 社区鼓励大家积极参与开源社区,无论是文档、代码、翻译,还是技术博客,都欢迎大家积极参与,早日成为 Pulsar contributor,一起加油鸭。

引用链接

​[1]​​​ 报名 Pulsar Virtual Summit North America 2021: ​