Releases: apache/pulsar
Releases · apache/pulsar
v4.1.2
2025-11-17
Library updates
- [fix] Update gRPC to 1.75.0 (#24813)
- [improve][misc] Upgrade Netty to 4.1.128.Final (#24911)
- [improve] Upgrade Alpine base image to 3.22 version (#24840)
- [improve][ml] Upgrade Oxia client to 0.7.0 (#24824)
- [fix][sec] Added Exclusions for tomcat-embed-core and derby and override mina-core to remediate CVEs (#24949)
- [fix][sec] Bump io.vertx:vertx-web from 4.5.10 to 4.5.22 (#24889)
- [fix][sec] Override commons-beanutils and commons-configuration2 to remediate CVEs (#24936)
- [fix][sec] Override kafka-clients in kinesis-kpl-shaded to remediate CVE-2024-31141 and CVE-2025-27817 (#24935)
- [fix][sec] Override nimbus-jose-jwt to remediate CVE-2023-52428 and CVE-2025-53864 (#24937)
- [fix][sec] Update Hbase version to 2.6.3-hadoop3 and exclude Avro from hbase-client to remediate CVEs (#24953)
- [fix][sec] Upgrade BouncyCastle FIPS to 2.0.10 to remediate CVE-2025-8916 (#24923)
- [fix][sec] Upgrade hadoop3 version from 3.4.0 to 3.4.1 (#24950)
- [fix][sec] Upgrade Jetty to 9.4.58.v20250814 to address CVE-2025-5115 (#24897)
- [fix][sec] Upgrade Spring to 6.2.12 to remediate CVE-2025-22233 and CVE-2025-41249 (#24903)
- [improve][io] Upgrade Debezium version to 3.2.4.Final (#24896)
- [improve][ci] Upgrade GitHub Actions workflows to use ubuntu-24.04 (#24841)
Broker
- [fix][broker] Allow intermittent error from topic policies service when loading topics (#24829)
- [fix][broker] AvgShedder comparison error (#24954)
- [fix][broker] Avoid recursive update in ConcurrentHashMap during policy cache cleanup (#24939)
- [fix][broker] BacklogMessageAge is not reset when cursor mdPosition is on an open ledger (#24915)
- [fix][broker] Ensure LoadSheddingTask is scheduled after metadata service is available again (#24838)
- [fix][broker] ExtensibleLoadManager: handle SessionReestablished and Reconnected events to re-register broker metadata (#24932)
- [fix][broker] Fix bug in PersistentMessageExpiryMonitor which blocked further expirations (#24941)
- [fix][broker] fix getMaxReadPosition in TransactionBufferDisable should return latest (#24898)
- [fix][broker] Fix incorrect topic loading latency metric and timeout might not be respected (#24785)
- [fix][broker] Fix stack overflow caused by race condition when closing a connection (#24934)
- [fix][broker] Fix totalAvailablePermits not reduced when removing consumer from non-persistent dispatcher (#24885)
- [fix][broker] Fix wrong behaviour when using namespace.allowed_clusters, such as namespace deletion and namespace policies updating (#24860)
- [fix][broker] Flaky-test: ExtensibleLoadManagerImplTest.testDisableBroker (#24770)
- [fix][broker] Flaky-test: TopicTransactionBufferTest.testMessagePublishInOrder (#24826)
- [fix][broker] Run ResourceGroup tasks only when tenants/namespaces registered (#24859)
- [fix][broker] Stop to retry to read entries if the replicator has terminated (#24880)
- [fix][broker] Trigger topic creation event only once for non-existent topic (#24802)
- [fix][broker] Use
pollinsteadremoveto avoidNoSuchElementException(#24933) - [fix][broker]Leaving orphan schemas and topic-level policies after partitioned topic is deleted by GC (#24971)
- [fix][broker]Transactional messages can never be sent successfully if concurrently taking transaction buffer snapshot (#24945)
- [fix][admin] Set local policies overwrites "number of bundles" passed during namespace creation (#24762)
- [fix][ml] Fix
getNumberOfEntriesmay point to deleted ledger (#24852) - [fix][ml] Fix ledger trimming race causing cursor to point to deleted ledgers (#24855)
- [fix][ml] PIP-430: Fix concurrency issue in MessageMetadata caching and improve caching (#24836)
- [fix]Fixed getChildren('/') on Oxia based provider (#24863)
- [improve][broker] Add tests for using absolute FQDN for advertisedAddress and remove extra dot from brokerId (#24787)
- [improve][broker] Cache last publish timestamp for idle topics to reduce storage reads (#24825)
- [improve][broker] Don't log an error when updatePartitionedTopic is called on a non-partitioned topic (#24943)
- [improve][broker] Optimize lookup result warn log (#24942)
- [improve][broker] Part-1 of PIP-434: Expose Netty channel configuration WRITE_BUFFER_WATER_MARK to pulsar conf and pause receive requests when channel is unwritable (#24423)
- [improve][broker] Part-2 of PIP-434: Use ServerCnxThrottleTracker, instead of modifying channel.readable directly (#24799)
- [improve][broker] PIP-434: add configurations to broker.conf (#24800)
- [improve][broker] Reduce the broker close time to avoid useless wait for event loop shutdown (#24895)
- [improve][broker] Replace isServiceUnitActiveAsync with checkTopicNsOwnership (#24780)
- [improve][broker]Call scheduleAtFixedRateNonConcurrently for scheduled tasks, instead of scheduleAtFixedRate (#24596)
- [improve][broker]Improve NamespaceService log that is printed when cluster was removed (#24801)
- [improve][broker]Skip to mark delete if the target position of expira… (#24881)
- [fix][txn] fix concurrent error cause txn stuck in TransactionBufferHandlerImpl#endTxn (#23551)
- [cleanup][broker] Remove unused configuration maxMessageSizeCheckIntervalInSeconds (#24958)
- [feat][monitor] Add ML write latency histogram and entry size histogram as OTel metrics (#24815)
- [feat][monitor] Add publish latency histogram as OTel metrics (#24810)
- [feat] PIP-442: Add memory limits for CommandGetTopicsOfNamespace (#24833)
Client
- [fix][client] Add description method to ClientBuilder (#24728)
- [fix][client] Fix deduplication for getPartitionedTopicMetadata to include method parameters (#24965)
- [fix][client] Fix getPendingQueueSize for PartitionedTopicProducerStatsRecorderImpl: avoid NPE and implement aggregation (#24830)
- [fix][client] Fix PulsarAdmin description check and add test (#24734)
- [fix][client] Fix thread leak in reloadLookUp method which is used by ServiceUrlProvider (#24794)
- [fix][client] Make auto partitions update work for old brokers without PIP-344 (#24822)
- [improve][client] Allow adding custom description to User-Agent header (#24729)
- [improve][client] Deduplicate getTopicsUnderNamespace in BinaryProtoLookupService (#24962)
- [improve][client] PIP-420: Update the schema ID format (#24798)
- [improve][client]Add null check for Pulsar client clock configuration (#24848)
- [feat][client] Implement PIP-234 for sharing thread pools and DNS resolver/cache across multiple Pulsar Client instances (#24790)
- [feat][client] PIP-234: Support shared resources in PulsarAdmin to reduce thread usage (#24893)
- [improve][client/broker] Add Dns...
v4.0.8
2025-11-17
Library updates
- [fix] Update gRPC to 1.75.0 (#24813)
- [improve][misc] Upgrade Netty to 4.1.128.Final (#24911)
- [improve][ml] Upgrade Oxia client to 0.7.0 (#24824)
- [fix][sec] Added Exclusions for tomcat-embed-core and derby and override mina-core to remediate CVEs (#24949)
- [fix][sec] Bump io.vertx:vertx-web from 4.5.10 to 4.5.22 (#24889)
- [fix][sec] Override commons-beanutils and commons-configuration2 to remediate CVEs (#24936)
- [fix][sec] Override kafka-clients in kinesis-kpl-shaded to remediate CVE-2024-31141 and CVE-2025-27817 (#24935)
- [fix][sec] Override nimbus-jose-jwt to remediate CVE-2023-52428 and CVE-2025-53864 (#24937)
- [fix][sec] Update Hbase version to 2.6.3-hadoop3 and exclude Avro from hbase-client to remediate CVEs (#24953)
- [fix][sec] Upgrade BouncyCastle FIPS to 2.0.10 to remediate CVE-2025-8916 (#24923)
- [fix][sec] Upgrade hadoop3 version from 3.4.0 to 3.4.1 (#24950)
- [fix][sec] Upgrade Jetty to 9.4.58.v20250814 to address CVE-2025-5115 (#24897)
- [fix][sec] Upgrade Spring to 6.2.12 to remediate CVE-2025-22233 and CVE-2025-41249 (#24903)
- [improve][ci] Upgrade GitHub Actions workflows to use ubuntu-24.04 (#24841)
Broker
- [fix][broker] Allow intermittent error from topic policies service when loading topics (#24829)
- [fix][broker] AvgShedder comparison error (#24954)
- [fix][broker] Avoid recursive update in ConcurrentHashMap during policy cache cleanup (#24939)
- [fix][broker] BacklogMessageAge is not reset when cursor mdPosition is on an open ledger (#24915)
- [fix][broker] Ensure LoadSheddingTask is scheduled after metadata service is available again (#24838)
- [fix][broker] ExtensibleLoadManager: handle SessionReestablished and Reconnected events to re-register broker metadata (#24932)
- [fix][broker] Fix bug in PersistentMessageExpiryMonitor which blocked further expirations (#24941)
- [fix][broker] fix getMaxReadPosition in TransactionBufferDisable should return latest (#24898)
- [fix][broker] Fix incorrect topic loading latency metric and timeout might not be respected (#24785)
- [fix][broker] Fix stack overflow caused by race condition when closing a connection (#24934)
- [fix][broker] Fix totalAvailablePermits not reduced when removing consumer from non-persistent dispatcher (#24885)
- [fix][broker] Fix wrong behaviour when using namespace.allowed_clusters, such as namespace deletion and namespace policies updating (#24860)
- [fix][broker] Flaky-test: ExtensibleLoadManagerImplTest.testDisableBroker (#24770)
- [fix][broker] Flaky-test: TopicTransactionBufferTest.testMessagePublishInOrder (#24826)
- [fix][broker] Run ResourceGroup tasks only when tenants/namespaces registered (#24859)
- [fix][broker] Stop to retry to read entries if the replicator has terminated (#24880)
- [fix][broker] Trigger topic creation event only once for non-existent topic (#24802)
- [fix][broker] Use
pollinsteadremoveto avoidNoSuchElementException(#24933) - [fix][broker]Leaving orphan schemas and topic-level policies after partitioned topic is deleted by GC (#24971)
- [fix][broker]Transactional messages can never be sent successfully if concurrently taking transaction buffer snapshot (#24945)
- [fix][admin] Set local policies overwrites "number of bundles" passed during namespace creation (#24762)
- [fix][ml] Fix
getNumberOfEntriesmay point to deleted ledger (#24852) - [fix][ml] Fix ledger trimming race causing cursor to point to deleted ledgers (#24855)
- [fix]Fixed getChildren('/') on Oxia based provider (#24863)
- [improve][broker] Add tests for using absolute FQDN for advertisedAddress and remove extra dot from brokerId (#24787)
- [improve][broker] Don't log an error when updatePartitionedTopic is called on a non-partitioned topic (#24943)
- [improve][broker] Optimize lookup result warn log (#24942)
- [improve][broker] Part-1 of PIP-434: Expose Netty channel configuration WRITE_BUFFER_WATER_MARK to pulsar conf and pause receive requests when channel is unwritable (#24423)
- [improve][broker] Part-2 of PIP-434: Use ServerCnxThrottleTracker, instead of modifying channel.readable directly (#24799)
- [improve][broker] PIP-434: add configurations to broker.conf (#24800)
- [improve][broker] Reduce the broker close time to avoid useless wait for event loop shutdown (#24895)
- [improve][broker] Replace isServiceUnitActiveAsync with checkTopicNsOwnership (#24780)
- [improve][broker]Call scheduleAtFixedRateNonConcurrently for scheduled tasks, instead of scheduleAtFixedRate (#24596)
- [improve][broker]Improve NamespaceService log that is printed when cluster was removed (#24801)
- [improve][broker]Skip to mark delete if the target position of expira… (#24881)
- [fix][txn] fix concurrent error cause txn stuck in TransactionBufferHandlerImpl#endTxn (#23551)
- [cleanup][broker] Remove unused configuration maxMessageSizeCheckIntervalInSeconds (#24958)
- [fix][broker][branch-4.0] Fix failed testFinishTakeSnapshotWhenTopicLoading due to topic future cache conflicts (#24947)
- [improve][broker] Separate offload read and write thread pool (#24025)
- [fix][monitor] Fix the incorrect metrics name (#21981)
Client
- [fix][client] Fix deduplication for getPartitionedTopicMetadata to include method parameters (#24965)
- [fix][client] Fix getPendingQueueSize for PartitionedTopicProducerStatsRecorderImpl: avoid NPE and implement aggregation (#24830)
- [fix][client] Fix thread leak in reloadLookUp method which is used by ServiceUrlProvider (#24794)
- [fix][client] Make auto partitions update work for old brokers without PIP-344 (#24822)
- [improve][client] Deduplicate getTopicsUnderNamespace in BinaryProtoLookupService (#24962)
- [improve][client]Add null check for Pulsar client clock configuration (#24848)
- [fix] Fix mixed lookup/partition metadata requests causing reliability issues and incorrect responses (#24832)
Pulsar IO and Pulsar Functions
- [improve][fn] Use PulsarByteBufAllocator.DEFAULT instead of ByteBufAllocator.DEFAULT (#24952)
Tests & CI
- [fix][build] Fix maven deploy with maven-source-plugin 3.3.1 (#24811)
- [fix][build] Remove invalid profile in settings.xml that caused gpg signing to fail (#24812)
- [fix][test] Add Delta Tolerance in Double-Precision Assertions to Fix Rounding Flakiness (#24972)
- [fix][test] BacklogQuotaManagerTest.backlogsAgeMetricsNoPreciseWithoutBacklogQuota handle empty /metrics scrape (#24887)
- [fix][test] Fix flaky KeySharedSubscriptionBrokerCacheTest.testReplayQueueReadsGettingCached (#24955)
- [fix][test] Fix flaky LookupPropertiesTest.testConcurrentLookupProperties (#24854)
- [fix][test] Fix flaky NonPersistentTopicTest.testProducerRateLimit ([#24951](#2...
v3.0.15
2025-11-17
Library updates
- [improve][misc] Upgrade Netty to 4.1.128.Final (#24911)
- [fix][sec] Bump io.vertx:vertx-web from 4.5.10 to 4.5.22 (#24889)
- [fix][sec] Upgrade BouncyCastle FIPS to 2.0.10 to remediate CVE-2025-8916 (#24923)
- [fix][sec] Upgrade Jetty to 9.4.58.v20250814 to address CVE-2025-5115 (#24897)
- [fix][sec] Upgrade Spring to 6.2.12 to remediate CVE-2025-22233 and CVE-2025-41249 (#24903)
- [improve][ci] Upgrade GitHub Actions workflows to use ubuntu-24.04 (#24841)
Broker
- [fix][broker] Avoid recursive update in ConcurrentHashMap during policy cache cleanup (#24939)
- [fix][broker] BacklogMessageAge is not reset when cursor mdPosition is on an open ledger (#24915)
- [fix][broker] fix getMaxReadPosition in TransactionBufferDisable should return latest (#24898)
- [fix][broker] Fix stack overflow caused by race condition when closing a connection (#24934)
- [fix][broker] Fix totalAvailablePermits not reduced when removing consumer from non-persistent dispatcher (#24885)
- [fix][broker] Flaky-test: ExtensibleLoadManagerImplTest.testDisableBroker (#24770)
- [fix][broker] Run ResourceGroup tasks only when tenants/namespaces registered (#24859)
- [fix][broker] Stop to retry to read entries if the replicator has terminated (#24880)
- [fix][broker] Trigger topic creation event only once for non-existent topic (#24802)
- [fix][admin] Set local policies overwrites "number of bundles" passed during namespace creation (#24762)
- [fix][ml] Fix
getNumberOfEntriesmay point to deleted ledger (#24852) - [fix][txn] fix concurrent error cause txn stuck in TransactionBufferHandlerImpl#endTxn (#23551)
- [cleanup][broker][branch-3.0] Remove no-op configurations caused by cherry-picking (#24960)
Client
- [fix][client] Fix deduplication for getPartitionedTopicMetadata to include method parameters (#24965)
- [fix][client] Fix getPendingQueueSize for PartitionedTopicProducerStatsRecorderImpl: avoid NPE and implement aggregation (#24830)
- [fix][client] Fix thread leak in reloadLookUp method which is used by ServiceUrlProvider (#24794)
- [fix][client] Make auto partitions update work for old brokers without PIP-344 (#24822)
- [improve][client]Add null check for Pulsar client clock configuration (#24848)
- [fix] Fix mixed lookup/partition metadata requests causing reliability issues and incorrect responses (#24832)
Tests & CI
- [fix][build] Remove invalid profile in settings.xml that caused gpg signing to fail (#24812)
- [fix][test] Fix flaky KeySharedSubscriptionBrokerCacheTest.testReplayQueueReadsGettingCached (#24955)
- [fix][test] Fix flaky NonPersistentTopicTest.testProducerRateLimit (#24951)
- [fix][test] Fix flaky ReplicatorTest.testResumptionAfterBacklogRelaxed (#24904)
- [fix][test] Fix flaky SubscriptionSeekTest.testSeekWillNotEncounteredFencedError by counting subscription is fenced only after seek (#24865)
- [fix][test] Fix invalid test NonPersistentTopicTest.testProducerRateLimit (#24957)
- [fix][test] Stabilize SequenceIdWithErrorTest by fencing after first publish to avoid empty-ledger deletion and send timeout (#24861)
- [fix][test] Stabilize testMsgDropStat by reliably triggering non-persistent publisher drop (#24929)
- [improve][ci] Move replication tests to new group Broker Group 5 in Pulsar CI (#24917)
- [fix][ci][branch-3.0] Drop UBUNTU_MIRROR/UBUNTU_SECURITY_MIRROR support in Dockerfile since it's broken
- [fix][test][branch-3.0] Backport test case so that it compiles in branch-3.0
For the complete list, check the full changelog.
v4.1.1
2025-09-27
Library updates
- [fix][sec] Upgrade Netty to 4.1.127.Final to address CVEs (#24717)
- [improve][build] Upgrade Lombok to 1.18.42 to fully support JDK25 (#24763)
- [improve][build] Upgrade Apache Parent POM to version 35 (#24742)
- [improve][build] Upgrade Mockito, AssertJ and ByteBuddy to fully support JDK25 (#24764)
- [improve][build] Upgrade SpotBugs to a version that supports JDK25 (#24768)
- [feat][misc] upgrade oxia version to 0.6.2 (#24689)
- [improve][io] Upgrade to Debezium 3.2.2 (#24712)
Broker
- [fix][broker] Key_Shared subscription doesn't always deliver messages from the replay queue after a consumer disconnects and leaves a backlog (#24736)
- [fix][broker] Ensure KeyShared sticky mode consumer respects assigned ranges (#24730)
- [fix][broker] First entry will be skipped if opening NonDurableCursor while trimmed ledger is adding first entry. (#24738)
- [fix][broker] Fix cannot shutdown broker gracefully by admin api (#24731)
- [fix][broker] Fix memory leak when metrics are updated in a thread other than FastThreadLocalThread (#24719)
- [fix][broker] Prevent unexpected recycle failure in dispatcher's read callback (#24741)
- [fix][broker]Fix never recovered metadata store bad version issue if received a large response from ZK (#24580)
- [fix][ml]Fix EOFException after enabled topics offloading (#24753)
- [fix][broker] Fix NPE and annotate nullable return values for ManagedCursorContainer (#24706)
- [fix][broker]Dispatcher did unnecessary sort for recentlyJoinedConsumers and printed noisy error logs (#24634)
- [fix][broker]Fix dirty reading of namespace level offload thresholds (#24696)
- [fix][ml] Negative backlog & acked positions does not exist & message lost when concurrently occupying topic owner (#24722)
- [improve][broker] If there is a deadlock in the service, the probe should return a failure because the service may be unavailable (#23634)
- [improve][broker] Allow deletion of empty persistent topics regardless of retention policy (#24733)
- [improve][broker] PIP-402: Optionally prevent role/originalPrincipal logging (#23386)
- [improve][broker] Reduce unnecessary MessageMetadata parsing by caching the parsed instance in the broker cache (#24682)
- [improve][ml] Improve cache insert performance by removing exists check since it's already covered by putIfAbsent (#24699)
Client
- [fix][client] Avoid recycling the same ConcurrentBitSetRecyclable among different threads (#24725)
- [fix][client] Fix receiver queue auto-scale without memory limit (#24743)
- [fix][client]TopicListWatcher not closed when calling PatternMultiTopicsConsumerImpl.closeAsync() method (#24698)
- [fix][client] rollback TopicListWatcher retry behavior (#24752)
- [fix][client] Exclude io.prometheus:simpleclient_caffeine from client-side dependencies (#24761)
- [improve][client] PIP-407 Add newMessage with schema and transactions (#23942)
Pulsar IO and Pulsar Functions
- [fix][io] Improve Kafka Connect source offset flushing logic (#24654)
- [feat][fn] Fallback to using
STATE_STORAGE_SERVICE_URLinPulsarMetadataStateStoreProviderImpl.init(#24721)
Others
- [fix][misc] Fix compareTo contract violation for NamespaceBundleStats, TimeAverageMessageData and ResourceUnitRanking (#24772)
- [fix] Exclude commons-lang dep from bookkeeper (#24749)
Tests & CI
- [fix][test] Flaky-test: BrokerServiceTest.testShutDownWithMaxConcurrentUnload (#24769)
- [fix][broker] Fix testServiceConfigurationRetentionPolicy unit test (#24756)
- [fix][broker]Fix the wrong logic of the test PartitionCreationTest.testCreateMissedPartitions (#24683)
- [improve][build] Disable javadoc build failure (#24594)
- [fix][ci] Fix CI for Java 25 including upgrade of Gradle Develocity Maven extension (#24767)
For the complete list, check the full changelog.
v4.0.7
2025-09-27
Library updates
- [fix][sec] Upgrade bouncycastle bcpkix-fips version to 1.79 to address CVE-2025-8916 (#24650)
- [fix][sec] Upgrade Netty to 4.1.127.Final to address CVEs (#24717)
- [fix][sec] Upgrade to Netty 4.1.124.Final to address CVE-2025-55163 (#24637)
- [improve][io] Upgrade AWS SDK v1 & v2, Kinesis KPL and KPC versions (#24661)
- [fix][misc] Upgrade dependencies to fix critical security vulnerabilities (#24532)
- [improve][build] Upgrade Lombok to 1.18.42 to fully support JDK25 (#24763)
- [improve][broker] Upgrade avro version to 1.12.0 (#24617)
- [fix][misc] Upgrade fastutil to 8.5.16 (#24659)
- [improve][build] Upgrade Apache Parent POM to version 35 (#24742)
- [improve][build] Upgrade Mockito, AssertJ and ByteBuddy to fully support JDK25 (#24764)
- [improve][build] Upgrade SpotBugs to a version that supports JDK25 (#24768)
- [feat][misc] upgrade oxia version to 0.6.2 (#24689)
Broker
- [fix][broker] Key_Shared subscription doesn't always deliver messages from the replay queue after a consumer disconnects and leaves a backlog (#24736)
- [fix][broker] Ensure KeyShared sticky mode consumer respects assigned ranges (#24730)
- [fix][broker] PIP-428: Fix corrupted topic policies issues with sequential topic policy updates (#24427)
- [fix][broker][branch-4.0]Can not access topic policies if topic partitions have not been created (#24680)
- [fix][broker] Add double-check for non-durable cursor creation (#24643)
- [fix][broker] First entry will be skipped if opening NonDurableCursor while trimmed ledger is adding first entry. (#24738)
- [fix][broker] Fix cannot shutdown broker gracefully by admin api (#24731)
- [fix][broker] Fix duplicate watcher registration after SessionReestablished (#24621)
- [fix][broker] Fix memory leak when metrics are updated in a thread other than FastThreadLocalThread (#24719)
- [fix][broker] Fix race condition in MetadataStoreCacheLoader causing inconsistent availableBroker list caching (#24639)
- [fix][broker] Fix REST API to produce messages to single-partitioned topics (#24450)
- [fix][broker] Invalid regex in PulsarLedgerManager causes zk data notification to be ignored (#23977)
- [fix][broker] Prevent unexpected recycle failure in dispatcher's read callback (#24741)
- [fix][broker]Fix never recovered metadata store bad version issue if received a large response from ZK (#24580)
- [fix][ml]Fix EOFException after enabled topics offloading (#24753)
- [fix][broker] Fix incorrect AuthData passed to AuthorizationService in proxy scenarios (#24593)
- [fix][broker] Fix namespace deletion TLS URL selection for geo-replication (#24591)
- [fix][broker] Fix NPE and annotate nullable return values for ManagedCursorContainer (#24706)
- [fix][broker] Fix NPE being logged if load manager class name is blank (#24570)
- [fix][broker]Dispatcher did unnecessary sort for recentlyJoinedConsumers and printed noisy error logs (#24634)
- [fix][broker]Failed to create partitions after the partitions were deleted because topic GC (#24651)
- [fix][broker]Fix dirty reading of namespace level offload thresholds (#24696)
- [fix][broker]Fix thread safety issues in BucketDelayedDeliveryTracker with StampedLock optimistic reads (#24542)
- [fix][broker]User topic failed to delete after removed cluster because of failed delete data from transaction buffer topic (#24648)
- [fix][ml] Negative backlog & acked positions does not exist & message lost when concurrently occupying topic owner (#24722)
- [fix][meta] Use
getChildrenFromStoreto read children data to avoid lost data (#24665) - [improve][admin] PIP-422 part 1: Support global topic-level replicated clusters policy (#24390)
- [improve][broker]Part-2 Add Admin API to delete topic policies (#24602)
- [improve][broker] If there is a deadlock in the service, the probe should return a failure because the service may be unavailable (#23634)
- [improve][ml] Optimize ledger opening by skipping fully acknowledged ledgers (#24655)
- [improve][broker] Allow deletion of empty persistent topics regardless of retention policy (#24733)
- [improve][broker] Extract duplication in AbstractTopic#incrementTopicEpochIfNeeded (#24520)
- [improve][broker]Find the target position at most once, during expiring messages for a topic, even though there are many subscriptions (#24622)
- [improve][broker]Improve the anti-concurrency mechanism expirationCheckInProgress (#24607)
- [improve][broker]Remove block calling that named cursor.asyncGetNth when expiring messages (#24606)
Client
- [fix][client] Avoid recycling the same ConcurrentBitSetRecyclable among different threads (#24725)
- [fix][client] fix ArrayIndexOutOfBoundsException in SameAuthParamsLookupAutoClusterFailover (#24662)
- [fix][client] Fix ArrayIndexOutOfBoundsException when using SameAuthParamsLookupAutoClusterFailover (#23336)
- [fix][client] Fix receiver queue auto-scale without memory limit (#24743)
- [fix][client] Retry for unknown exceptions when creating a producer or consumer (#24599)
- [fix][client] Skip schema validation when sending messages to DLQ to avoid infinite loop when schema validation fails on an incoming message (#24663)
- [fix][client]Prevent ZeroQueueConsumer from receiving batch messages when using MessagePayloadProcessor (#24610)
- [fix][client]TopicListWatcher not closed when calling PatternMultiTopicsConsumerImpl.closeAsync() method (#24698)
- [fix][client] rollback TopicListWatcher retry behavior (#24752)
- [improve][client] Support load RSA PKCS#8 private key (#24582)
- [fix][client] Exclude io.prometheus:simpleclient_caffeine from client-side dependencies (#24761)
- [improve][client] Add OpenTelemetry metrics for client memory buffer usage (#24647)
- [improve][client] RawReader support pause and resume (#24597)
- [fix][client] Refactor AttributeWrappedMeasurement to use a class instead of a record to compatible with lower version JDK
Pulsar IO and Pulsar Functions
- [fix][io] Improve Kafka Connect source offset flushing logic (#24654)
- [improve][io] Add dependency file name information to error message when .nar file validation fails with ZipException (#24604)
- [improve][io] Support specifying Kinesis KPL native binary path with 1.0 version specific path (#24669)
- [improve][io] Add support for the complete KinesisProducerConfiguration in KinesisSinkConfig (#24489)
- [feat][fn] Fallback to using
STATE_STORAGE_SERVICE_URLinPulsarMetadataStateStoreProviderImpl.init(#24721)
Others
v3.3.9
2025-09-27
Library updates
- [fix][sec] Upgrade bouncycastle bcpkix-fips version to 1.79 to address CVE-2025-8916 (#24650)
- [fix][sec] Upgrade Netty to 4.1.127.Final to address CVEs (#24717)
- [fix][sec] Upgrade to Netty 4.1.124.Final to address CVE-2025-55163 (#24637)
- [improve][build] Bump org.apache.commons:commons-lang3 from 3.17.0 to 3.18.0 (#24514)
- [improve][io] Upgrade AWS SDK v1 & v2, Kinesis KPL and KPC versions (#24661)
- [fix][misc] Upgrade dependencies to fix critical security vulnerabilities (#24532)
- [improve][build] Upgrade Lombok to 1.18.42 to fully support JDK25 (#24763)
- [improve][build] Upgrade Apache Parent POM to version 35 (#24742)
Broker
- [fix][broker] Add double-check for non-durable cursor creation (#24643)
- [fix][broker] Ensure KeyShared sticky mode consumer respects assigned ranges (#24730)
- [fix][broker] First entry will be skipped if opening NonDurableCursor while trimmed ledger is adding first entry. (#24738)
- [fix][broker] Fix cannot shutdown broker gracefully by admin api (#24731)
- [fix][broker] Fix duplicate watcher registration after SessionReestablished (#24621)
- [fix][broker] Fix memory leak when metrics are updated in a thread other than FastThreadLocalThread (#24719)
- [fix][broker] Fix race condition in MetadataStoreCacheLoader causing inconsistent availableBroker list caching (#24639)
- [fix][broker] Fix REST API to produce messages to single-partitioned topics (#24450)
- [fix][broker] Invalid regex in PulsarLedgerManager causes zk data notification to be ignored (#23977)
- [fix][broker] Prevent unexpected recycle failure in dispatcher's read callback (#24741)
- [improve][broker] If there is a deadlock in the service, the probe should return a failure because the service may be unavailable (#23634)
- [fix][meta] Use
getChildrenFromStoreto read children data to avoid lost data (#24665) - [improve][broker]Remove block calling that named cursor.asyncGetNth when expiring messages (#24606)
Client
- [fix][client] Avoid recycling the same ConcurrentBitSetRecyclable among different threads (#24725)
- [fix][client] fix ArrayIndexOutOfBoundsException in SameAuthParamsLookupAutoClusterFailover (#24662)
- [fix][client] Fix ArrayIndexOutOfBoundsException when using SameAuthParamsLookupAutoClusterFailover (#23336)
- [fix][client] Fix receiver queue auto-scale without memory limit (#24743)
- [fix][client] Retry for unknown exceptions when creating a producer or consumer (#24599)
- [fix][client] Skip schema validation when sending messages to DLQ to avoid infinite loop when schema validation fails on an incoming message (#24663)
- [fix][client]Prevent ZeroQueueConsumer from receiving batch messages when using MessagePayloadProcessor (#24610)
- [fix][client]TopicListWatcher not closed when calling PatternMultiTopicsConsumerImpl.closeAsync() method (#24698)
- [fix][client] rollback TopicListWatcher retry behavior (#24752)
- [improve][client] Support load RSA PKCS#8 private key (#24582)
Pulsar IO and Pulsar Functions
- [fix][io] Improve Kafka Connect source offset flushing logic (#24654)
- [improve][io] Add dependency file name information to error message when .nar file validation fails with ZipException (#24604)
- [improve][io] Support specifying Kinesis KPL native binary path with 1.0 version specific path (#24669)
- [feat][fn] Fallback to using
STATE_STORAGE_SERVICE_URLinPulsarMetadataStateStoreProviderImpl.init(#24721)
Others
- [fix][proxy] Fix TooLongFrameException with Pulsar Proxy (#24626)
- [fix][misc] Fix compareTo contract violation for NamespaceBundleStats, TimeAverageMessageData and ResourceUnitRanking (#24772)
- [improve][doc] Improve the JavaDocs of sendAsync to avoid improper use (#24601)
- [fix][offload] Exclude unnecessary dependencies from tiered storage provider / offloader nar files (#24649)
Tests & CI
- [improve][build] Use org.apache.nifi:nifi-nar-maven-plugin:2.1.0 with skipDocGeneration=true (#24668)
- [fix][ci] Fix code coverage metrics in Pulsar CI (#24595)
- [fix][test] Fix ConcurrentModificationException in Ipv4Proxy (#24632)
- [fix][test] Flaky-test: BrokerServiceTest.testShutDownWithMaxConcurrentUnload (#24769)
- [fix][test]fix flaky ZeroQueueSizeTest.testZeroQueueGetExceptionWhenReceiveBatchMessage (#24633)
- [fix][test]fix flaky ZeroQueueSizeTest.testZeroQueueGetExceptionWhenReceiveBatchMessage (#24630)
- [fix][broker] Fix flaky testReplicatorsInflightTaskListIsEmptyAfterReplicationFinished (#24590)
- [improve][build] Disable javadoc build failure (#24594)
- [improve][build] Increase maven resolver's sync context timeout (#24666)
- [improve][test] Add test for dead letter topic with max unacked messages blocking (#24535)
- [improve][test] Refactor the way way pulsar-io-debezium-oracle nar file is patched when building the test image (#24586)
- [fix][ci] Fix CI for Java 25 including upgrade of Gradle Develocity Maven extension (#24767)
For the complete list, check the full changelog.
v3.0.14
2025-09-27
Library updates
- [fix][sec] Upgrade bouncycastle bcpkix-fips version to 1.79 to address CVE-2025-8916 (#24650)
- [fix][sec] Upgrade Netty to 4.1.127.Final to address CVEs (#24717)
- [fix][sec] Upgrade to Netty 4.1.124.Final to address CVE-2025-55163 (#24637)
- [improve][build] Bump org.apache.commons:commons-lang3 from 3.17.0 to 3.18.0 (#24514)
- [improve][io] Upgrade AWS SDK v1 & v2, Kinesis KPL and KPC versions (#24661)
- [fix][misc] Upgrade dependencies to fix critical security vulnerabilities (#24532)
- [improve][build] Upgrade Lombok to 1.18.42 to fully support JDK25 (#24763)
Broker
- [fix][broker] Add double-check for non-durable cursor creation (#24643)
- [fix][broker] Ensure KeyShared sticky mode consumer respects assigned ranges (#24730)
- [fix][broker] First entry will be skipped if opening NonDurableCursor while trimmed ledger is adding first entry. (#24738)
- [fix][broker] Fix cannot shutdown broker gracefully by admin api (#24731)
- [fix][broker] Fix duplicate watcher registration after SessionReestablished (#24621)
- [fix][broker] Fix memory leak when metrics are updated in a thread other than FastThreadLocalThread (#24719)
- [fix][broker] Fix race condition in MetadataStoreCacheLoader causing inconsistent availableBroker list caching (#24639)
- [fix][broker] Fix REST API to produce messages to single-partitioned topics (#24450)
- [fix][broker] Invalid regex in PulsarLedgerManager causes zk data notification to be ignored (#23977)
- [fix][broker] Prevent unexpected recycle failure in dispatcher's read callback (#24741)
- [fix][broker][branch-3.0] Fix wrong backlog age metrics when the mark delete position point to a deleted ledger (#24518) (#24671)
- [fix][broker][branch-3.0] Prevent NPE in ownedBundlesCountPerNamespace on first bundle load (#24758)
- [fix][broker]Fix never recovered metadata store bad version issue if received a large response from ZK (#24580)
- [fix][ml]Fix EOFException after enabled topics offloading (#24753)
- [improve][broker] Choose random thread for consumerFlow in PersistentDispatcherSingleActiveConsumer (#20522)
- [improve][broker] If there is a deadlock in the service, the probe should return a failure because the service may be unavailable (#23634)
- [improve][broker] Optimize and clean up aggregation of topic stats (#21361)
Client
- [fix][client] Avoid recycling the same ConcurrentBitSetRecyclable among different threads (#24725)
- [fix][client] fix ArrayIndexOutOfBoundsException in SameAuthParamsLookupAutoClusterFailover (#24662)
- [fix][client] Fix ArrayIndexOutOfBoundsException when using SameAuthParamsLookupAutoClusterFailover (#23336)
- [fix][client] Fix receiver queue auto-scale without memory limit (#24743)
- [fix][client] Retry for unknown exceptions when creating a producer or consumer (#24599)
- [fix][client] Skip schema validation when sending messages to DLQ to avoid infinite loop when schema validation fails on an incoming message (#24663)
- [fix][client]Prevent ZeroQueueConsumer from receiving batch messages when using MessagePayloadProcessor (#24610)
- [fix][client]TopicListWatcher not closed when calling PatternMultiTopicsConsumerImpl.closeAsync() method (#24698)
- [fix][client] rollback TopicListWatcher retry behavior (#24752)
- [improve][client] Support load RSA PKCS#8 private key (#24582)
Pulsar IO and Pulsar Functions
- [fix][io] Improve Kafka Connect source offset flushing logic (#24654)
- [improve][io] Add dependency file name information to error message when .nar file validation fails with ZipException (#24604)
- [improve][io] Support specifying Kinesis KPL native binary path with 1.0 version specific path (#24669)
Others
- [fix][proxy] Fix TooLongFrameException with Pulsar Proxy (#24626)
- [fix][misc] Fix compareTo contract violation for NamespaceBundleStats, TimeAverageMessageData and ResourceUnitRanking (#24772)
- [improve][doc] Improve the JavaDocs of sendAsync to avoid improper use (#24601)
- [fix][offload] Exclude unnecessary dependencies from tiered storage provider / offloader nar files (#24649)
Tests & CI
- [improve][build] Use org.apache.nifi:nifi-nar-maven-plugin:2.1.0 with skipDocGeneration=true (#24668)
- [fix][ci] Fix code coverage metrics in Pulsar CI (#24595)
- [fix][test] Fix ConcurrentModificationException in Ipv4Proxy (#24632)
- [fix][test] Flaky-test: BrokerServiceTest.testShutDownWithMaxConcurrentUnload (#24769)
- [fix][test]fix flaky ZeroQueueSizeTest.testZeroQueueGetExceptionWhenReceiveBatchMessage (#24633)
- [fix][test]fix flaky ZeroQueueSizeTest.testZeroQueueGetExceptionWhenReceiveBatchMessage (#24630)
- [fix][broker] Fix flaky testReplicatorsInflightTaskListIsEmptyAfterReplicationFinished (#24590)
- [improve][build] Disable javadoc build failure (#24594)
- [improve][build] Increase maven resolver's sync context timeout (#24666)
- [improve][test] Add test for dead letter topic with max unacked messages blocking (#24535)
- [improve][test] Refactor the way way pulsar-io-debezium-oracle nar file is patched when building the test image (#24586)
- [fix][build] Import isNotBlank
- [fix][ci] Fix CI for Java 25 including upgrade of Gradle Develocity Maven extension (#24767)
For the complete list, check the full changelog.
v4.1.0
Approved PIPs
- [improve][pip] PIP-292: Enforce token expiration time in the Websockets plugin (#20953)
- [improve][pip] PIP-391: Enable batch index ACK by default (#23567)
- [improve][pip] PIP-409: support producer configuration for retry/dead letter topic producer (#24022)
- [improve][pip] PIP-416: Add a new topic method to implement trigger offload by size threshold (#24276)
- [improve][pip] PIP-425: Support connecting with next available endpoint for multi-endpoint serviceUrls (#24394)
- [improve][pip] PIP-427: Align pulsar-admin Default for Mark-Delete Rate with Broker Configuration (#24425)
- [improve][pip] PIP-429: Optimize Handling of Compacted Last Entry by Skipping Payload Buffer Parsing (#24439)
- [pip] PIP-430: Pulsar Broker cache improvements: refactoring eviction and adding a new cache strategy based on expected read count (#24444)
- [improve][pip] PIP-431: Add Creation and Last Publish Timestamps to Topic Stats (#24469)
- [improve][pip] PIP-432: Add isEncrypted field to EncryptionContext (#24481)
- [improve][pip] PIP-433: Optimize the conflicts of the replication and automatic creation mechanisms, including the automatic creation of topics and schemas (#24485)
- [improve][pip] PIP-435: Add startTimestamp and endTimestamp for consuming messages in client cli (#24524)
- [improve][pip]PIP-422 Support global topic-level policy: replicated clusters and new API to delete topic-level policies (#24368)
- [improve][pip]PIP-436: Add decryptFailListener to Consumer (#24572)
- [feat][pip] PIP-420: Provide ability for Pulsar clients to integrate with third-party schema registry service (#24328)
- [improve] [pip] PIP-373: Add a topic's system prop that indicates whether users have published TXN messages in before. (#23210)
- [improve] [pip] PIP-375 Expose the Admin client configs: readTimeout, requestTimeout, and connectionTimeout (#23222)
- [improve] [pip] PIP-382: Add a label named reason for topic_load_failed_total (#23351)
- [pip] PIP-428: Change TopicPoliciesService interface to fix consistency issues (#24428)
Library updates
- [improve][broker] Upgrade avro version to 1.12.0 (#24617)
- [improve][broker] Upgrade bookkeeper to 4.17.2/commons-configuration to 2.x/grpc to 1.72.0 and enable ZooKeeper client to establish connection in read-only mode (#24468)
- [fix][sec] Bump commons-io version to 2.18.0 (#23684)
- [fix][sec] Mitigate CVE-2024-53990 by disabling AsyncHttpClient CookieStore (#23725)
- [fix][sec] Remove dependency on out-dated commons-configuration 1.x (#24562)
- [fix][sec] Replace bcprov-jdk15on dependency with bcprov-jdk18-on (#23532)
- [fix][sec] Upgrade async-http-client to 2.12.4 to address CVE-2024-53990 (#23732)
- [fix][sec] Upgrade bouncycastle bcpkix-fips version to 1.79 to address CVE-2025-8916 (#24650)
- [fix][sec] Upgrade golang.org/x/crypto from 0.21.0 to 0.31.0 in pulsar-function-go (#23743)
- [fix][sec] Upgrade Jetty to 9.4.57.v20241219 to mitigate CVE-2024-6763 (#24232)
- [fix][sec] Upgrade jwt/v5 to 5.2.2 to address CVE-2025-30204 (#24140)
- [fix][sec] Upgrade Kafka connector and clients version to 3.9.1 to address CVE-2025-27818 (#24564)
- [fix][sec] Upgrade pulsar-function-go dependencies to address CVE-2025-22868 (#24547)
- [fix][sec] Upgrade to Netty 4.1.115.Final to address CVE-2024-47535 (#23596)
- [fix][sec] Upgrade to Netty 4.1.118 (#23965)
- [fix][sec] Upgrade to Netty 4.1.124.Final to address CVE-2025-55163 (#24637)
- [fix][sec] Upgrade Zookeeper to 3.9.3 to address CVE-2024-51504 (#23581)
- [fix][build] Upgrade json-smart to 2.5.2 (#23966)
- [improve][io] Upgrade AWS SDK v1 & v2, Kinesis KPL and KPC versions (#24661)
- [improve][io] Upgrade Kafka client and compatible Confluent platform version (#24201)
- [improve][io] Upgrade Spring version to 6.1.13 in IO Connectors (#23459)
- [improve][io] Upgrade Spring version to 6.1.14 in IO Connectors (#23481)
- [improve][monitor] Upgrade OTel to 1.41.0 (#23484)
- [improve][monitor] Upgrade OTel to 1.45.0 (#23756)
- [fix][misc] Upgrade dependencies to fix critical security vulnerabilities (#24532)
- [fix][misc] Upgrade fastutil to 8.5.16 (#24659)
- [improve][build] Upgrade Caffeine from 2.9.1 to 3.2.1 (#24527)
- [improve][build] Upgrade commons-compress version from 1.27.0 to 1.27.1 (#24270)
- [improve][build] Upgrade errorprone to 2.38.0 (#24242)
- [improve][build] Upgrade Gradle Develocity Maven Extension dependencies (#24260)
- [improve][build] Upgrade Lombok to 1.18.38 to support JDK 24 (#24237)
- [improve][build] Upgrade Mockito to 5.17.0 and byte-buddy to 1.15.11 (#24241)
- [improve][build] Upgrade SpotBugs to 4.9.x (#24243)
- [improve][build] Upgrade to jacoco 0.8.13 (#24240)
- [improve][build] Upgrade zstd version from 1.5.2-3 to 1.5.7-3 (#24263)
- [improve][ci] Upgrade Gradle Develocity Maven Extension to 1.23.1 (#24004)
- [improve][test] Upgrade Testcontainers to 1.20.4 and docker-java to 3.4.0 (#24003)
- [improve][misc] Upgrade Guava to 33.4.8 that uses JSpecify annotations (#24267)
- [improve][misc] Upgrade Netty to 4.1.122.Final and tcnative to 2.0.72.Final (#24397)
- [improve][misc] Upgrade RE2/J to 1.8 (#24530)
- [feat][misc] Upgrade oxia version to 0.4.9 (#23607)
- [improve] Upgrade Apache Commons library versions to compatible versions (#24205)
- [improve] Upgrade lombok to 1.18.36 (#23752)
- [improve] Upgrade Netty to 4.1.119.Final (#24049)
- [improve] Upgrade Netty to 4.1.121.Final (#24214)
- [improve] Upgrade OpenTelemetry library to 1.44.1 version (#23656)
- [improve] Upgrade oxia-java to 0.4.10 and fix closing of OxiaMetadataStore (#23653)
- [improve] Upgrade pulsar-client-python to 3.7.0 in Docker image (#24302)
- [improve] Upgrade to Netty 4.1.116.Final and io_uring to 0.0.26.Final (#23813)
- [improve] Upgrade to Netty 4.1.117.Final (#23863)
Broker
- [fix][broker] Add double-check for non-durable cursor creation (#24643)
- [fix][broker] Add expire check for replicator (#23975)
- [fix][broker] Add topic consistency check (#24118)
- [fix][broker] Allow recreation of partitioned topic after metadata loss (#24225)
- [fix][broker] Apply dispatcherMaxReadSizeBytes also for replay reads for Shared and Key_Shared subscriptions (#23894)
- [fix][broker] Avoid block markDeletePosition forward when skip lost entries (#21210)
- [fix][broker] Avoid IllegalStateException when marker_type field is not set in publishing ([#24087](https://github.com/apache/pulsar...
v4.0.6
2025-07-31
Known issues
- The changes from PR #24533 included in this release might break proxy authorization scenarios for some custom implementations of AuthorizationProvider, where both the proxy's auth data (
authDataSource) and the original client's auth data (originalAuthDataSource) need to be validated separately.- A fix will be provided in the next release with #24593
Library updates
- [improve] Upgrade pulsar-client-python to 3.8.0 in Docker image (#24544)
- [improve][misc] Upgrade Netty to 4.1.122.Final and tcnative to 2.0.72.Final (#24397)
- [fix][sec] Upgrade Kafka connector and clients version to 3.9.1 to address CVE-2025-27818 (#24564)
- [fix][sec] Upgrade pulsar-function-go dependencies to address CVE-2025-22868 (#24547)
- [improve][build] replace org.apache.commons.lang to org.apache.commons.lang3 (#24473)
- [improve][build] Bump org.apache.commons:commons-lang3 from 3.17.0 to 3.18.0 (#24514)
- [improve][broker] Upgrade bookkeeper to 4.17.2/commons-configuration to 2.x/grpc to 1.72.0 and enable ZooKeeper client to establish connection in read-only mode (#24468)
- [fix][sec] Remove dependency on out-dated commons-configuration 1.x (#24562)
- [improve][misc] Upgrade RE2/J to 1.8 (#24530)
Broker
- [fix][broker] expose consumer name for partitioned topic stats (#24360)
- [fix][broker] Fix Broker OOM due to too many waiting cursors and reuse a recycled OpReadEntry incorrectly (#24551)
- [fix][broker] Fix deduplication replay might never complete for exceptions (#24511)
- [fix][broker] Fix duplicate increment of ADD_OP_COUNT_UPDATER in OpAddEntry (#24506)
- [fix][broker] Fix exclusive producer creation when last shared producer closes (#24516)
- [fix][broker] Fix issue that topic policies was deleted after a sub topic deleted, even if the partitioned topic still exists (#24350)
- [fix][broker] Fix ManagedCursor state management race conditions and lifecycle issues (#24569)
- [fix][broker] Fix matching of topicsPattern for topic names which contain non-ascii characters (#24543)
- [fix][broker] Fix maxTopicsPerNamespace might report a false failure (#24560)
- [fix][broker] Fix the non-persistenttopic's replicator always get error "Producer send queue is full" if set a small value of the config replicationProducerQueueSize (#24424)
- [fix][broker] Ignore metadata changes when broker is not in the Started state (#24352)
- [fix][broker] No longer allow creating subscription that contains slash (#23594)
- [fix][broker] Once the cluster is configured incorrectly, the broker maintains the incorrect cluster configuration even if you removed it (#24419)
- [fix][broker] replication does not work due to the mixed and repetitive sending of user messages and replication markers (#24453)
- [fix][broker] Resolve the issue of frequent updates in message expiration deletion rate (#24190)
- [fix][broker]excessive replication speed leads to error: Producer send queue is full (#24189)
- [fix][broker]Fix deadlock when compaction and topic deletion execute concurrently (#24366)
- [fix][broker]Global topic policies do not affect after unloading topic and persistence global topic policies never affect (#24279)
- [fix][broker]Non-global topic policies and global topic policies overwrite each other (#24286)
- [fix] Prevent IllegalStateException: Field 'message' is not set (#24472)
- [fix][ml] Cursor ignores the position that has an empty ack-set if disabled deletionAtBatchIndexLevelEnabled (#24406)
- [fix][ml] Enhance OpFindNewest to support skip non-recoverable data (#24441)
- [fix][ml] Fix asyncReadEntries might never complete if empty entries are read from BK (#24515)
- [fix][ml] Fix ManagedCursorImpl.individualDeletedMessages concurrent issue (#24338)
- [fix][ml] Fix the possibility of message loss or disorder when ML PayloadProcessor processing fails (#24522)
- [fix][ml]Received more than once callback when calling cursor.delete (#24405)
- [fix][ml]Revert a behavior change of releasing idle offloaded ledger handle: only release idle BlobStoreBackedReadHandle (#24384)
- [fix][ml]Still got BK ledger, even though it has been deleted after offloaded (#24432)
- [fix][offload] Complete the future outside of the reading loop in BlobStoreBackedReadHandleImplV2.readAsync (#24331)
- [fix][txn] Fix deadlock when loading transaction buffer snapshot (#24401)
- [improve][broker] Add managedCursor/LedgerInfoCompressionType settings to broker.conf (#24391)
- [improve][broker] Added synchronized for sendMessages in Non-Persistent message dispatchers (#24386)
- [improve][broker] change to warn log level for ack validation error (#24459)
- [improve][broker] Deny removing local cluster from topic level replicated cluster policy (#24351)
- [improve][broker] Improve the log when namespace bundle is not available (#24434)
- [improve][broker] Make maxBatchDeletedIndexToPersist configurable and document other related configs (#24392)
- [improve][broker]Improve the log when encountered in-flight read limitation (#24359)
- [improve][ml] Offload ledgers without check ledger length (#24344)
- [improve][ml]Release idle offloaded read handle only the ref count is 0 (#24381)
- [improve][offloaders] Automatically evict Offloaded Ledgers from memory (#19783)
- [fix][broker] Fix NPE when getting delayed delivery policy (#24512)
- [fix][broker] Fix the wrong cache name (#24407)
- [fix][broker] Fix wrong backlog age metrics when the mark delete position point to a deleted ledger (#24518)
- [fix][broker][branch-4.0] Revert "[improve][broker] Reduce memory occupation of the delayed message queue (#23611)" (#24429)
- [fix][broker]Data lost due to conflict loaded up a topic for two brokers, when enabled ServiceUnitStateMetadataStoreTableViewImpl (#24478)
- [improve][broker] Enable concurrent processing of pending read Entries to avoid duplicate Reads (#24346)
- [improve][broker][branch-4.0] Update to Oxia 0.6.0 and use new group-id (#24454)
- [refactor][broker] Expose the managedLedger field for the sub class (#24448)
Client
- [fix][client] Close orphan producer or consumer when the creation is interrupted (#24539)
- [fix][client] Fix ClientCnx handleSendError NPE (#24517)
- [fix][client] Fix issue in auto releasing of idle connection with topics pattern consumer (#24528)
- [fix][client] Fix some potential resource leak (#24402)
- [fix][client] NPE in MultiTopicsConsumerImpl.negativeAcknowledge (#24476)
- [fix][client] Prevent NPE when seeking with null topic in TopicMessageId (#24404)
- [fix][client][branch-4.0] Partitioned topics are unexpectedly created by client after deletion (#24554) (#24571)
- [fix][txn] Fix negative unacknowledged messages in transactions by ensuring that the batch size is added into Comm...
v3.3.8
2025-07-31
Library updates
- [improve] Upgrade pulsar-client-python to 3.8.0 in Docker image (#24544)
- [improve][misc] Upgrade Netty to 4.1.122.Final and tcnative to 2.0.72.Final (#24397)
- [fix][sec] Upgrade Kafka connector and clients version to 3.9.1 to address CVE-2025-27818 (#24564)
- [fix][sec] Upgrade pulsar-function-go dependencies to address CVE-2025-22868 (#24547)
- [improve][build] replace org.apache.commons.lang to org.apache.commons.lang3 (#24473)
- [improve][broker] Upgrade bookkeeper to 4.17.2/commons-configuration to 2.x/grpc to 1.72.0 and enable ZooKeeper client to establish connection in read-only mode (#24468)
- [fix][sec] Remove dependency on out-dated commons-configuration 1.x (#24562)
- [improve][misc] Upgrade RE2/J to 1.8 (#24530)
Broker
- [fix][broker] expose consumer name for partitioned topic stats (#24360)
- [fix][broker] Fix ack hole in cursor for geo-replication (#20931)
- [fix][broker] Fix Broker OOM due to too many waiting cursors and reuse a recycled OpReadEntry incorrectly (#24551)
- [fix][broker] Fix deduplication replay might never complete for exceptions (#24511)
- [fix][broker] Fix duplicate increment of ADD_OP_COUNT_UPDATER in OpAddEntry (#24506)
- [fix][broker] Fix exclusive producer creation when last shared producer closes (#24516)
- [fix][broker] Fix issue that topic policies was deleted after a sub topic deleted, even if the partitioned topic still exists (#24350)
- [fix][broker] Fix ManagedCursor state management race conditions and lifecycle issues (#24569)
- [fix][broker] Fix matching of topicsPattern for topic names which contain non-ascii characters (#24543)
- [fix][broker] Fix maxTopicsPerNamespace might report a false failure (#24560)
- [fix][broker] Fix the non-persistenttopic's replicator always get error "Producer send queue is full" if set a small value of the config replicationProducerQueueSize (#24424)
- [fix][broker] Ignore metadata changes when broker is not in the Started state (#24352)
- [Fix][broker] Limit replication rate based on bytes (#22674)
- [fix][broker] No longer allow creating subscription that contains slash (#23594)
- [fix][broker] Once the cluster is configured incorrectly, the broker maintains the incorrect cluster configuration even if you removed it (#24419)
- [fix][broker] replication does not work due to the mixed and repetitive sending of user messages and replication markers (#24453)
- [fix][broker] Resolve the issue of frequent updates in message expiration deletion rate (#24190)
- [fix][broker]excessive replication speed leads to error: Producer send queue is full (#24189)
- [fix][broker]Fix deadlock when compaction and topic deletion execute concurrently (#24366)
- [fix][broker]Global topic policies do not affect after unloading topic and persistence global topic policies never affect (#24279)
- [fix][broker]Non-global topic policies and global topic policies overwrite each other (#24286)
- [fix] Prevent IllegalStateException: Field 'message' is not set (#24472)
- [fix][ml] Cursor ignores the position that has an empty ack-set if disabled deletionAtBatchIndexLevelEnabled (#24406)
- [fix][ml] Enhance OpFindNewest to support skip non-recoverable data (#24441)
- [fix][ml] Enhance OpFindNewest to support skip non-recoverable data (#24441)
- [fix][ml] Fix asyncReadEntries might never complete if empty entries are read from BK (#24515)
- [fix][ml] Fix ManagedCursorImpl.individualDeletedMessages concurrent issue (#24338)
- [fix][ml] Fix the possibility of message loss or disorder when ML PayloadProcessor processing fails (#24522)
- [fix][ml]Received more than once callback when calling cursor.delete (#24405)
- [fix][ml]Revert a behavior change of releasing idle offloaded ledger handle: only release idle BlobStoreBackedReadHandle (#24384)
- [fix][ml]Still got BK ledger, even though it has been deleted after offloaded (#24432)
- [fix][offload] Complete the future outside of the reading loop in BlobStoreBackedReadHandleImplV2.readAsync (#24331)
- [fix][txn] Fix deadlock when loading transaction buffer snapshot (#24401)
- [improve][broker] Add managedCursor/LedgerInfoCompressionType settings to broker.conf (#24391)
- [improve][broker] Added synchronized for sendMessages in Non-Persistent message dispatchers (#24386)
- [improve][broker] change to warn log level for ack validation error (#24459)
- [improve][broker] Deny removing local cluster from topic level replicated cluster policy (#24351)
- [improve][broker] Improve the log when namespace bundle is not available (#24434)
- [improve][broker] Make maxBatchDeletedIndexToPersist configurable and document other related configs (#24392)
- [improve][broker]Improve the log when encountered in-flight read limitation (#24359)
- [improve][ml] Offload ledgers without check ledger length (#24344)
- [improve][ml]Release idle offloaded read handle only the ref count is 0 (#24381)
- [improve][offloaders] Automatically evict Offloaded Ledgers from memory (#19783)
- [fix][broker] Fix NPE when getting delayed delivery policy (#24512)
- [fix][broker] Fix wrong backlog age metrics when the mark delete position point to a deleted ledger (#24518)
- [fix][broker][branch-3.3] Disable broken ExtensibleLoadManager tests and add closeInternalTopics in follower monitor (#24557)
- [improve][broker] Phase 1 of PIP-370 support disable create topics on remote cluster through replication (#23169)
- [improve][broker] Part 2 of PIP-370: add metrics "pulsar_replication_disconnected_count" (#23213)
Client
- [fix][client] Close orphan producer or consumer when the creation is interrupted (#24539)
- [fix][client] Fix ClientCnx handleSendError NPE (#24517)
- [fix][client] Fix issue in auto releasing of idle connection with topics pattern consumer (#24528)
- [fix][client] Fix some potential resource leak (#24402)
- [fix][client] NPE in MultiTopicsConsumerImpl.negativeAcknowledge (#24476)
- [fix][client] Prevent NPE when seeking with null topic in TopicMessageId (#24404)
- [fix][client][branch-4.0] Partitioned topics are unexpectedly created by client after deletion (#24554) (#24571)
- [fix][txn] Fix negative unacknowledged messages in transactions by ensuring that the batch size is added into CommandAck (#24443)
- [improve][client] Terminate consumer.receive() when consumer is closed (#24550)
- [fix][client] Fix RawReader interface compatibility
Pulsar IO and Pulsar Functions
- [fix][io] Acknowledge RabbitMQ message after processing the message successfully (#24354)
- [fix][io] Fix kinesis avro bytes handling (#24316)
Others
- [fix][proxy] Fix default value of connectionMaxIdleSeconds in Pulsar Proxy (#24529)
- [fix][proxy]...