Skip to main content

Apache Pulsar 4.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)
  • [fix][broker]Fix thread safety issues in BucketDelayedDeliveryTracker with StampedLock optimistic reads (#24542)
  • [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 CommandAck (#24443)
  • [improve][client] Terminate consumer.receive() when consumer is closed (#24550)
  • [fix][client] Fix consumer not returning encrypted messages on decryption failure with compression enabled (#24356)

Pulsar IO and Pulsar Functions

  • [fix][io] Acknowledge RabbitMQ message after processing the message successfully (#24354)
  • [fix][io] Fix kinesis avro bytes handling (#24316)
  • [fix][io] Fix data loss issue in Kinesis source connector (#24501)
  • [fix][io] Fix Kinesis checkpoint mechanism to prevent data duplication (#24534)
  • [fix][io] Make record properties configurable for kinesis source (#24495)

Others

  • [fix][proxy] Fix default value of connectionMaxIdleSeconds in Pulsar Proxy (#24529)
  • [fix][proxy] Fix proxy OOM by replacing TopicName with a simple conversion method (#24465)
  • [improve][misc] Optimize topic list hashing so that potentially large String allocation is avoided (#24525)
  • [fix][ws] Fix WebSocket authorization issue due to originalPrincipal must be provided (#24533)
  • [fix][cli] Fix pulsar-shell cannot produce message with quotes and space (#24320)
  • [improve][client] Add startTimestamp and endTimestamp for consuming message in client cli (#24521)
  • [fix][misc] Fix topics pattern consumer backwards compatibility (#24537)
  • [improve] Enable metrics for all broker caches (#24365)

Tests & CI

  • [fix][build] Add missing <name> to submodules (#24421)
  • [fix][test] Fix flaky AutoScaledReceiverQueueSizeTest.testNegativeClientMemory (#24324)
  • [fix][test] fix flaky GrowableArrayBlockingQueueTest.testPollBlockingThreadsTermination (#24576)
  • [fix][test]fix flaky test BrokerServiceAutoTopicCreationTest.testDynamicConfigurationTopicAutoCreationPartitioned (#24505)
  • [improve][test] Remove EntryCacheCreator from ManagedLedgerFactoryImpl (#24552)
  • [improve][ci] Fixes #23079: Checkstyle checks applied to all test (#24492)
  • [improve][test] Add test for concurrent processing of pending read Entries (#24519)

For the complete list, check the full changelog.