Skip to main content

Apache Pulsar 3.0.1


Important notice

  • Fix the reason label of authentication metrics in #20030


  • [Broker] Add annotation for topic compaction strategy by @Demogorgon314 in #20858
  • [Broker] Add broker filter sync method back to guarantee the API compatibility by @Demogorgon314 in #20826
  • [Broker] Avoid infinite bundle unloading by @Demogorgon314 in #20822
  • [Broker] Call ServerCnx#closeProducer from correct thread by @michaeljmarshall in #20747
  • [Broker] Added the skipped message handler for ServiceUnitStateChannel by @heesung-sn in #20677
  • [Broker] Make ExtensibleLoadManagerImpl's broker filter pure async by @Demogorgon314 in #20666
  • [Broker] Fix the publish latency spike from the contention of MessageDeduplication by @codelipenghui in #20647
  • [Broker] Fix get owned service units NPE by @Demogorgon314 in #20625
  • [Broker] Topic policy can not work well if replay policy message has any exception. by @zhanghaou in #20613
  • [Broker] Fix the publish latency spike issue with a large number of producers by @codelipenghui in #20607
  • [Broker] New load balancer system topic should not be auto-created now by @heesung-sn in #20566
  • [Broker] Handle get owned namespaces admin API in ExtensibleLoadManager by @Demogorgon314 in #20552
  • [Broker] Handle heartbeat namespace in ExtensibleLoadManager by @Demogorgon314 in #20551
  • [Broker] Validate authz earlier in delete subscription logic by @michaeljmarshall in #20549
  • [Broker] REST Client Producer fails with TLS only by @maanders-tibco in #20535
  • [Broker] Fix redirect loop when using ExtensibleLoadManager and list in bundle admin API by @Demogorgon314 in #20528
  • [Broker] Restore solution for certain topic unloading race conditions by @lhotari in #20527
  • [Broker] Emit the namespace bundle listener event on extensible load manager by @Demogorgon314 in #20525
  • [Broker] Disable EntryFilters for system topics by @lhotari in #20514
  • [Broker] Replace test call to Auth0 with call to WireMock by @michaeljmarshall in #20465
  • [Broker] Fix return the earliest position when query position by timestamp. by @hanmz in #20457
  • [Broker] Avoid PersistentSubscription.expireMessages logic check backlog twice. by @lifepuzzlefun in #20416
  • [Broker] PIP-255 Part-1: Add listener interface for namespace service by @hleecs in #20406
  • [Broker] Partitioned __change_events topic is policy topic by @michaeljmarshall in #20392
  • [Broker] Do not expose bucketDelayedIndexStats by @coderzc in #20383
  • [Broker] Pre-create non-partitioned system topics for load balance extension by @heesung-sn in #20370
  • [Broker] ManagedLedger.getConfig().getProperties().putAll(properties) NPE by @heesung-sn in #20361
  • [Broker] Fix broker load manager class filter NPE by @Demogorgon314 in #20350
  • [Broker] In Key_Shared mode: remove unnecessary mechanisms of message skip to avoid unnecessary consumption stuck by @poorbarcode in #20335
  • [Broker] When creating a namespace anti-affinity group with the default local policies, use the bundle size supplied by the user. by @syk-coder in #20327
  • [Broker] Fix skip message API when hole messages exist by @crossoverJie in #20326
  • [Broker] Gracefully shut download balancer extension by @heesung-sn in #20315
  • [Broker] Fix class name typo PrecisPublishLimiter to "Precise" by @JooHyukKim in #20310
  • [Broker] Allow Access to System Topic Metadata for Reader Creation Post-Namespace Deletion by @liangyepianzhou in #20304
  • [Broker] Fix NPE caused by topic publish rate limiter. by @dragonls in #20302
  • [Broker] Fix UnsupportedOperationException when updating topic properties. by @liangyepianzhou in #20261
  • [Broker] Fix ledger cachemiss size metric by @AnonHxy in #20257
  • [Broker] Fix default bundle size used while setting bookie affinity by @syk-coder in #20250
  • [Broker] Fix the behavior of delayed message in Key_Shared mode by @codelipenghui in #20233
  • [Broker] Fix Return value of getPartitionedStats doesn't contain subscription type by @1Jack2 in #20210
  • [Broker] Skip split bundle if only one broker by @poorbarcode in #20190
  • [Broker] Fix RoaringBitmap.contains can't check value 65535 by @coderzc in #20176
  • [Broker] Release EntryBuffer after parsing proto object by @coderzc in #20170
  • [Broker] Remove useless field in the DelayedMessageIndexBucketSegment.proto by @coderzc in #20166
  • [Broker] Optimization protobuf code in the bucket delayed tracker by @coderzc in #20158
  • [Broker] Move bitmap from lastMutableBucket to ImmutableBucket by @coderzc in #20156
  • [Broker] Fix tenant admin authorization bug. (#20068)" by @michaeljmarshall in #20143
  • [Broker] Producer/Consumer should call allowTopicOperationAsync by @michaeljmarshall in #20142
  • [Broker] Fix entry filter feature for the non-persistent topic by @gaoran10 in #20141
  • [Broker] Optimize delayed metadata index bitmap by @mattisonchao in #20136
  • [Broker] Fast fix infinite HTTP call getSubscriptions caused by wrong topicName by @poorbarcode in #20131
  • [Broker] Make timer execute immediately after load index by @coderzc in #20126
  • [Broker] Cache LedgerHandle in BookkeeperBucketSnapshotStorage by @coderzc in #20117
  • [Broker] Close temporary open ledger in BookkeeperBucketSnapshotStorage by @lifepuzzlefun in #20111
  • [Broker] Fix use error TimeUnit to record publish latency by @TakaHiR07 in #20074
  • [Broker] Fix tenant admin authorization bug. by @dragonls in #20068
  • [Broker] Fix getPartitionedStats miss subscription's messageAckRate by @wangjialing218 in #19870
  • [Broker] Do not filter system topic while shedding. by @thetumbled in #18949
  • [Broker] There are two same-named managed ledgers in the one broker by @poorbarcode in #18688
  • [Broker] If ledger lost, cursor mark delete position can not forward by @poorbarcode in #18620
  • [Broker] Support cgroup v2 by using jdk.internal.platform.Metrics in Pulsar Loadbalancer by @coderzc in #16832


  • [Client] Fix the deadlock issue of consumers while using multiple IO threads by @codelipenghui in #20669
  • [Client] Make the whole grabCnx() progress atomic by @BewareMyPower in #20595
  • [Client] Thread-safe seek by @tisonkun in #20321
  • [Client] Fix where the function getMsgNumInReceiverQueue always returns 0 when using message listener by @crossoverJie in #20245
  • [Client] Java Client's Seek Logic Not Threadsafe #1 by @JooHyukKim in #20242

Pulsar IO and Pulsar Functions

  • [Functions] Exit JVM when the main thread throws an exception by @michaeljmarshall in #20689
  • [Functions] TLS args admin download command use zero arity by @michaeljmarshall in #20513
  • [Functions] Support customizing TLS config for function download command by @michaeljmarshall in #20482
  • [Functions] Reset idle timer correctly by @flowchartsman in #20450
  • [Functions] Go functions must retrieve consumers by non-partitioned topic ID by @flowchartsman in #20413
  • [Functions] Go functions need to use static grpcPort in k8s runtime by @flowchartsman in #20404
  • [Functions] Correct TLS cert config translation from broker to fn worker by @michaeljmarshall in #20297
  • [Functions] Use functions classloader in TopicSchema.newSchemaInstance() to fix ClassNotFoundException when using custom SerDe classes. (targeted for master) by @gmiklos-ltg in #20115
  • [Functions] Check user metric len before iterating by @flowchartsman in #20021
  • [Functions] Support multiple input topics for Go runtime by @jiangpengcheng in #20000
  • [Functions] Make pulsar-admin support update py/go with package url by @jiangpengcheng in #19897
  • [Functions] Fix JavaInstanceStarter inferring type class name error by @jiangpengcheng in #19896
  • [Functions] Fix function update error by @jiangpengcheng in #19895
  • [Functions] Make KubernetesRuntime translate characters in function tenant, namespace, and name during function removal to avoid label errors by @csthomas1 in #19584
  • [Connectors] Close the Kafka source connector that got stuck by @poorbarcode in #20698
  • [Connectors] Close the Kafka source connector if there is an uncaught exception by @RobertIndie in #20424
  • [Connectors] Add protobuf ByteString to pulsar-io jdbc core by @bpereto in #20259
  • [Connectors] KCA: handle kafka sources that use commitRecord by @dlg99 in #20121


  • [Metrics] Add JVM start time metric by @Technoboy- in #20381
  • [Metrics] Fix the reason label of authentication metrics by @gaoran10 in #20030


  • [Pulsar Admin] Set ns level backlog quota does not take effect if retention exists by @poorbarcode in #20690
  • [Pulsar Admin] Make get list from bundle Admin API async by @Demogorgon314 in #20652
  • [Pulsar Admin] Return BAD_REQUEST on cluster data is null for createCluster by @tisonkun in #20346
  • [Pulsar Admin] Fix examine messages if total message is zero by @AnonHxy in #20152
  • [Pulsar Admin] Fast fix infinite HTTP call getSubscriptions caused by wrong topicName by @poorbarcode in #20131
  • [Pulsar Admin] Report earliest msg in partitioned backlog by @teabot in #19465
  • [Pulsar CLI] The variable producerName of BatchMsgContainer is null by @poorbarcode in #20819
  • [Pulsar CLI] Allow pulser-client consume to create a replicated subscription by @JooHyukKim in #20316
  • [Pulsar CLI] Fix logging noise while admin tool exit by @rdhabalia in #19884
  • [Client Tool] PerformanceProducer does not produce the expected number of messages. by @thetumbled in #19775


  • [Schema] Add admin CLI for testCompatibility by @congbobo184 in #19974

Library updates

  • Upgrade PyYaml version to 6.0.1 by @yaalsn in #20831
  • Upgrade bookkeeper to 4.16.2 by @zymap in #20704
  • Upgrade snappy-java to address multiple CVEs by @lhotari in #20604
  • Upgrade Jetty to address CVEs by @lhotari in #20461
  • Upgrade maven surefire plugin and other build/test plugins/libs including TestNG version by @lhotari in #20270
  • Upgrade Netty to 4.1.93.Final by @lhotari in #20423
  • Upgrade sqlite-jdbc to resolve CVE-2023-32697 by @lhotari in #20411
  • Upgrade Guava to 32.0.0 to address CVE-2023-2976 by @lhotari in #20459

For the complete list, check the Pulsar 3.0.1 changelog.