Skip to main content

Apache Pulsar 4.2.0

2026-04-01

Approved PIPs

Library updates

  • [improve][broker] Upgrade bookkeeper to 4.17.3 (#25166)
  • [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 at.yawk.lz4:lz4-java from 1.9.0 to 1.10.1 in /pulsar-common (#25045)
  • [fix][sec] Bump github.com/dvsekhvalnov/jose2go from 1.6.0 to 1.7.0 in /pulsar-function-go (#24987)
  • [fix][sec] Bump google.golang.org/grpc from 1.60.0 to 1.79.3 in /pulsar-function-go (#25353)
  • [fix][sec] Bump io.vertx:vertx-web from 4.5.10 to 4.5.22 (#24889)
  • [fix][sec] Bump org.apache.solr:solr-core from 9.8.0 to 9.10.1 in /pulsar-io/solr (#25175)
  • [fix][sec] Bump org.apache.zookeeper:zookeeper from 3.9.4 to 3.9.5 (#25303)
  • [fix][sec] Eliminate commons-collections dependency (#25024)
  • [fix][sec] Exclude org.lz4:lz4-java and standardize on at.yawk.lz4-java to remediate CVE-2025-12183 and CVE-2025-66566 (#25198)
  • [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 msgpack-core to 0.9.11 to address CVE-2026-21452 (#25233)
  • [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 aircompressor to 2.0.3 to resolve CVE-2025-67721 (#25256)
  • [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 Jackson version to 2.18.6 (#25264)
  • [fix][sec] Upgrade Jetty to 9.4.58.v20250814 to address CVE-2025-5115 (#24897)
  • [fix][sec] Upgrade jose4j to 0.9.6 to address CVE-2024-29371 (#25095)
  • [fix][sec] Upgrade log4j to 2.25.3 to address CVE-2025-68161 (#25102)
  • [fix][sec] Upgrade Netty to 4.1.127.Final to address CVEs (#24717)
  • [fix][sec] Upgrade Netty to 4.1.130.Final (#25078)
  • [fix][sec] Upgrade OpenSearch to 2.19.4 to remediate CVE-2025-9624 (#25206)
  • [fix][sec] Upgrade Python protobuf version to 6.33.5 to address CVE-2026-0994 (#25250)
  • [fix][sec] Upgrade Spring to 6.2.12 to remediate CVE-2025-22233 and CVE-2025-41249 (#24903)
  • [fix][sec] Upgrade vertx to address CVE-2026-1002 (#25152)
  • [fix][build] Fix Eclipse/VSCode support after Jetty 12 upgrade (#25169)
  • [fix][build] Fix IntelliJ build after Jetty 12 upgrade (#25155)
  • [fix][ci] Fix CI for Java 25 including upgrade of Gradle Develocity Maven extension (#24767)
  • [improve][fn] Upgrade Kubernetes client-java version to 23.0.0 and add k8s e2e integration tests (#25000)
  • [improve][fn] Upgrade Pulsar Python client version to 3.10.0 (#25251)
  • [fix][test] Upgrade docker-java to 3.7.0 (#25209)
  • [improve][io] Replace Qpid in tests with RabbitMQ in Testcontainers and upgrade RabbitMQ client version (#25085)
  • [improve][io] Upgrade Debezium to 3.4.2 and Kafka Client/Connect to 4.1.1 (#25335)
  • [improve][io] Upgrade Debezium version to 3.2.4.Final (#24896)
  • [improve][io] Upgrade Debezium version to 3.2.5.Final (#25029)
  • [improve][io] Upgrade to Debezium 3.2.2 (#24712)
  • [improve][monitor] Upgrade OpenTelemetry to 1.56.0, Otel instrumentation to 2.21.0 and Otel semconv to 1.37.0 (#24994)
  • [improve][build] Upgrade Apache Parent POM to version 35 (#24742)
  • [improve][build] Upgrade errorprone to 2.45.0 version (#25054)
  • [improve][build] Upgrade LightProto to 0.6.1 (#25332)
  • [improve][build] Upgrade Lombok to 1.18.42 to fully support JDK25 (#24763)
  • [improve][build] Upgrade Mockito, AssertJ and ByteBuddy to fully support JDK25 (#24764)
  • [improve][build] Upgrade SpotBugs to a version that supports JDK25 (#24768)
  • [improve][build] Upgrade Testcontainers to 1.21.3 (#24982)
  • [improve][ci] Upgrade GitHub Actions workflows to use ubuntu-24.04 (#24841)
  • [improve][misc] Upgrade jjwt library version to 0.13.0 (#25043)
  • [improve][misc] Upgrade Netty to 4.1.128.Final (#24911)
  • [improve][misc] Upgrade snappy version to 1.1.10.8 (#25182)
  • [improve][misc] Upgrade to Alpine 3.23 (#25180)
  • [improve][misc] Upgrade to Jetty 12.1.x (#25100)
  • [feat][meta] upgrade oxia version to 0.7.2 (#24976)
  • [feat][misc] upgrade oxia version to 0.6.2 (#24689)
  • [fix] Upgrade gson to 2.13.2 (#25022)
  • [improve] Upgrade Alpine base image to 3.22 version (#24840)
  • [improve] Upgrade Apache Commons library versions (#24983)
  • [improve] Upgrade Caffeine to 3.2.3 (#24984)
  • [improve] Upgrade Log4j2 to 2.25.2 and slf4j to 2.0.17 (#24985)
  • [improve] Upgrade Netty to 4.1.131.Final (#25232)
  • [improve] Upgrade RoaringBitmap to 1.6.9 version (#25253)
  • [fix] Update gRPC to 1.75.0 (#24813)
  • [fix] Exclude commons-lang dep from bookkeeper (#24749)
  • [improve] replace jcip annotations to jsr305 annotations (#25252)

Broker

  • [fix][broker] Add schema version in rest produce api (#25004)
  • [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] Avoid split non-existent bundle (#25031)
  • [fix][broker] BacklogMessageAge is not reset when cursor mdPosition is on an open ledger (#24915)
  • [fix][broker] Ensure KeyShared sticky mode consumer respects assigned ranges (#24730)
  • [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] Fence reset cursor by timestamp to avoid concurrent timestamp-based position lookups (#25151)
  • [fix][broker] First entry will be skipped if opening NonDurableCursor while trimmed ledger is adding first entry. (#24738)
  • [fix][broker] Fix bug in PersistentMessageExpiryMonitor which blocked further expirations (#24941)
  • [fix][broker] Fix cannot shutdown broker gracefully by admin api (#24731)
  • [fix][broker] Fix chunked message loss when no consumers are available (#25077)
  • [fix][broker] Fix compaction horizon might be reset to an old position when phase two is interrupted (#25119)
  • [fix][broker] Fix concurrency bug in BucketDelayedDeliveryTracker (#25346)
  • [fix][broker] Fix creation of replicated subscriptions for partitioned topics (#24997)
  • [fix][broker] Fix cursor position persistence in ledger trimming (#25087)
  • [fix][broker] Fix ExtensibleLoadManagerImpl stuck Assigning bundle state after broker restart (#25379)
  • [fix][broker] fix flaky test in SystemTopicBasedTopicPoliciesServiceTest (#25098)
  • [fix][broker] fix getMaxReadPosition in TransactionBufferDisable should return latest (#24898)
  • [fix][broker] Fix httpProxyTimeout config (#25223)
  • [fix][broker] Fix IllegalArgumentException in BucketDelayedDeliveryTracker.addMessage (#25371)
  • [fix][broker] Fix incomplete futures in topic property update/delete methods (#25228)
  • [fix][broker] Fix incorrect topic loading latency metric and timeout might not be respected (#24785)
  • [fix][broker] Fix issue with schemaValidationEnforced in geo-replication (#25012)
  • [fix][broker] Fix ManagedCursorImpl.asyncDelete() method may lose previous async mark delete properties in race condition (#25165)
  • [fix][broker] Fix markDeletedPosition race condition in ManagedLedgerImpl.maybeUpdateCursorBeforeTrimmingConsumedLedger() method (#25110)
  • [fix][broker] Fix memory leak when metrics are updated in a thread other than FastThreadLocalThread (#24719)
  • [fix][broker] Fix MultiRolesTokenAuthorizationProvider error when subscription prefix doesn't match. (#25121)
  • [fix][broker] Fix NPE and annotate nullable return values for ManagedCursorContainer (#24706)
  • [fix][broker] Fix potential NPE in InMemTransactionBuffer.appendBufferToTxn by returning a valid Position (#25039)
  • [fix][broker] fix prepareInitPoliciesCacheAsync in SystemTopicBasedTopicPoliciesService (#24980)
  • [fix][broker] Fix race condition in ServerCnx producer/consumer async callbacks (#25352)
  • [fix][broker] Fix regex matching of namespace name which might contain a regex char (#25136)
  • [fix][broker] Fix stack overflow caused by race condition when closing a connection (#24934)
  • [fix][broker] Fix testServiceConfigurationRetentionPolicy unit test (#24756)
  • [fix][broker] Fix totalAvailablePermits not reduced when removing consumer from non-persistent dispatcher (#24885)
  • [fix][broker] Fix transactionMetadataFuture completeExceptionally with null value (#25231)
  • [fix][broker] Fix typos in PulsarClusterMetadataSetup (#24750)
  • [fix][broker] Fix various error-prone detected errors mainly in logging and String.format parameters (#25059)
  • [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] Force EnsemblePolicies to resolve network location after rackInfoMap is updated due to changes in /ledgers/available znode (#25067)
  • [fix][broker] Guard AsyncTokenBucket against long overflow (#25262)
  • [fix][broker] Handle missing replicator during snapshot request processing (#25266)
  • [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] Pass metadataStoreSessionTimeoutMillis to bookkeeper client configuration to properly configure ZK timeout (#24624)
  • [fix][broker] PIP-442: Fix race condition in async semaphore permit updates that causes memory limits to become ineffective (#25066)
  • [fix][broker] Prevent missed topic changes in topic watchers and schedule periodic refresh with patternAutoDiscoveryPeriod interval (#25188)
  • [fix][broker] Prevent unexpected recycle failure in dispatcher's read callback (#24741)
  • [fix][broker] Return failed future instead of throwing exception in async methods (#25289)
  • [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] Support namespace unsubscribe when bundles are unloaded (#25276)
  • [fix][broker] Trigger topic creation event only once for non-existent topic (#24802)
  • [fix][broker] Use poll instead remove to avoid NoSuchElementException (#24933)
  • [fix][broker] Use compatible Avro name validator in JsonSchemaCompatibilityCheck (#25255)
  • [fix][broker] Use compatible Avro name validator to allow '$' in schema record names (#25193)
  • [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][broker]Fix incorrect backlog if use multiple acknowledge types on the same subscription (#25047)
  • [fix][broker]Fix ledgerHandle failed to read by using new BK API (#25199)
  • [fix][broker]Fix memory leak when using a customized ManagedLedger implementation (#25016)
  • [fix][broker]Fix never recovered metadata store bad version issue if received a large response from ZK (#24580)
  • [fix][broker]Fix the wrong logic of the test PartitionCreationTest.testCreateMissedPartitions (#24683)
  • [fix][broker]Incorrect backlog that is larger than expected (#25037)
  • [fix][broker]Infinitely failed to delete topic if the first time failed and enabled transaction (#25073)
  • [fix][broker]Leaving orphan schemas and topic-level policies after partitioned topic is deleted by GC (#24971)
  • [fix][broker]pulsar_ml_reads_inflight_bytes and pulsar_ml_reads_available_inflight_bytes are 0 at the same time (#25105)
  • [fix][broker]system topic was created with different partitions acrossing clusters after enabled namespace-level replication (#25312)
  • [fix][broker]Topic deleting failed after removed local cluster from namespace policies (#25114)
  • [fix][broker]Transactional messages can never be sent successfully if concurrently taking transaction buffer snapshot (#24945)
  • [fix][broker]Wrong backlog: expected 0 but got 1 (#24938)
  • [fix][admin] Fix asyncGetRequest to handle 204 (#25124)
  • [fix][admin] Fix offload policy incompatible issue. (#25149)
  • [fix][admin] Refactor bookie affinity group sync operations to async in rest api (#25050)
  • [fix][admin] Refactor namespace anti affinity group sync operations to async in rest api (#25086)
  • [fix][admin] Set local policies overwrites "number of bundles" passed during namespace creation (#24762)
  • [fix][ml] Fix getNumberOfEntries may point to deleted ledger (#24852)
  • [fix][ml] Fix cursor backlog size to account for individual acks (#25089)
  • [fix][ml] Fix ledger trimming race causing cursor to point to deleted ledgers (#24855)
  • [fix][ml] Fix NoSuchElementException in EntryCountEstimator caused by a race condition (#25177)
  • [fix][ml] Negative backlog & acked positions does not exist & message lost when concurrently occupying topic owner (#24722)
  • [fix][ml] PIP-430: Fix concurrency issue in MessageMetadata caching and improve caching (#24836)
  • [fix][ml] Retry offload reads when OffloadReadHandleClosedException is encountered (#25148)
  • [fix][ml]Fix EOFException after enabled topics offloading (#24753)
  • [fix][offload] Close all resources in BlobStoreBackedReadHandleImplV2.closeAsync (#25296)
  • [fix][meta] Metadata cache refresh might not take effect (#25246)
  • [improve][broker] Add idle timeout support for http (#25224)
  • [improve][broker] Add overrideBrokerNics for adaptation of heterogeneous network environments (#24883)
  • [improve][broker] Add strictAuthMethod to require explicit authentication method (#25185)
  • [improve][broker] Add tests for using absolute FQDN for advertisedAddress and remove extra dot from brokerId (#24787)
  • [improve][broker] Allow deletion of empty persistent topics regardless of retention policy (#24733)
  • [improve][broker] Cache last publish timestamp for idle topics to reduce storage reads (#24825)
  • [improve][broker] Change log level from warn to debug when cursor mark-deleted position ledger doesn't exist (#25200)
  • [improve][broker] Change the log level from error to info when throwing NotAllowedException (#25130)
  • [improve][broker] Don't log an error when updatePartitionedTopic is called on a non-partitioned topic (#24943)
  • [improve][broker] Enhance advertised address resolution with fallback to localhost (#25238)
  • [improve][broker] Enhance logging for adding schema failures in ServerCnx (#25048)
  • [improve][broker] Ensure metadata session state visibility and improve Unstable observability for ServiceUnitStateChannelImpl (#25132)
  • [improve][broker] Fix replicated subscriptions race condition with mark delete update and snapshot completion (#16651)
  • [improve][broker] Fix thread safety issue in ManagedCursorImpl.removeProperty (#25104)
  • [improve][broker] Give the detail error msg when authenticate failed with AuthenticationException (#25221)
  • [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] Improve replicated subscription snapshot cache so that subscriptions can be replicated when mark delete position update is not frequent (#25044)
  • [improve][broker] Migrate remaining broker proto files from protobuf to LightProto (#25337)
  • [improve][broker] Optimize AsyncTokenBucket overflow solution further to reduce fallback to BigInteger (#25269)
  • [improve][broker] Optimize lookup result warn log (#24942)
  • [improve][broker] Optimize Reader creation in TopicPoliciesService (#24658)
  • [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-402: Optionally prevent role/originalPrincipal logging (#23386)
  • [improve][broker] PIP-433: Ensure topic creation before starting GEO (#24652)
  • [improve][broker] PIP-434: add configurations to broker.conf (#24800)
  • [improve][broker] PIP-442: Add memory limits for topic list watcher (part 2) (#25070)
  • [improve][broker] PIP-444: Rate limit for deleting ledger to alleviate the zk pressure. (#24760)
  • [improve][broker] PIP-464: Strict Avro schema validation for SchemaType.JSON (#25362)
  • [improve][broker] Reduce the broker close time to avoid useless wait for event loop shutdown (#24895)
  • [improve][broker] Reduce unnecessary MessageMetadata parsing by caching the parsed instance in the broker cache (#24682)
  • [improve][broker] Replace isServiceUnitActiveAsync with checkTopicNsOwnership (#24780)
  • [improve][broker] Update netty allocator default chunk size from 4MB to 8MB, and move internal JVM opts from PULSAR_EXTRA_OPTS to OPTS (#25274)
  • [improve][broker] Use atomic counter for ongoing transaction count (#25053)
  • [improve][broker]Add test for getting partitioned topic metadata with PulsarAdmin client (#25026)
  • [improve][broker]Call scheduleAtFixedRateNonConcurrently for scheduled tasks, instead of scheduleAtFixedRate (#24596)
  • [improve][broker]Improve error response of failed to delete topic if it has replicators connected (#24975)
  • [improve][broker]Improve NamespaceService log that is printed when cluster was removed (#24801)
  • [improve][broker]Part-2 of PIP-433 add validation when enabling namespace-level Geo-Replication (#25170)
  • [improve][broker]Remove the warn log that frequently prints (#25018)
  • [improve][broker]Skip to mark delete if the target position of expira… (#24881)
  • [fix][monitor] Fix the incorrect metrics name (#21981)
  • [improve][admin] Add client side looping to analyze-backlog in Topics to avoid potential HTTP call timeout (#25127)
  • [improve][admin] Add counter for marker messages in PersistentTopics.analyzeSubscriptionBacklog() rest api (#25091)
  • [fix][txn] fix concurrent error cause txn stuck in TransactionBufferHandlerImpl#endTxn (#23551)
  • [improve][ml] Clean up managed-ledger code: deduplicate logic and use shared utilities (#25298)
  • [improve][ml] Improve cache insert performance by removing exists check since it's already covered by putIfAbsent (#24699)
  • [improve][ml] Migrate managed-ledger from protobuf to LightProto (#25336)
  • [improve][offload] Bump hadoop to 3.4.3 and hbase to 2.6.4 (#25396)
  • [improve][meta] Add byte size limit to AbstractMetadataStore's childrenCache (#24868)
  • [improve][meta] PIP-453: Improve the metadata store threading model (#25187)
  • [cleanup][broker] Remove unused configuration maxMessageSizeCheckIntervalInSeconds (#24958)
  • [feat][broker] add topic-level subscription expiration time policy (#25258)
  • [feat][broker] PIP-452: Customizable topic listing of namespace with properties (#25160)
  • [feat][monitor] PIP-447 for Customizable Prometheus Labels for Topic Metrics (#24991)
  • [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)
  • [fix][misc] Allow JWT tokens in OpenID auth without nbf claim (#25197)
  • [feat] PIP-442: Add memory limits for CommandGetTopicsOfNamespace (#24833)
  • [fix] Fix mixed lookup/partition metadata requests causing reliability issues and incorrect responses (#24832)
  • [fix] Handle TLS close_notify to avoid SslClosedEngineException: SSLEngine closed already (#24986)
  • [improve][client/broker] Add DnsResolverGroup to share DNS cache across multiple PulsarClient instances (#24784)
  • [improve] Eliminate unnecessary duplicate schema lookups for partitioned topics in client and geo-replication (#25011)

Client

  • [fix][client] Add description method to ClientBuilder (#24728)
  • [fix][client] Avoid recycling the same ConcurrentBitSetRecyclable among different threads (#24725)
  • [fix][client] ControlledClusterFailover avoid unnecessary reconnection. (#25178)
  • [fix][client] Exclude io.prometheus:simpleclient_caffeine from client-side dependencies (#24761)
  • [fix][client] Fail messages immediately in ProducerImpl when in terminal state (#25317)
  • [fix][client] Fix async APIs to return failed futures on validation errors (#25287)
  • [fix][client] Fix AutoProduceBytesSchema.clone() method (#25015)
  • [fix][client] Fix deduplication for getPartitionedTopicMetadata to include method parameters (#24965)
  • [fix][client] Fix double recycling of the message in isValidConsumerEpoch method (#25008)
  • [fix][client] Fix getPendingQueueSize for PartitionedTopicProducerStatsRecorderImpl: avoid NPE and implement aggregation (#24830)
  • [fix][client] Fix invalid parameter type passed to Map.get in TopicsImpl.getListAsync method (#25069)
  • [fix][client] Fix lookup request semaphore not release problem (#25038)
  • [fix][client] Fix potential NPE in TypedMessageBuilderImpl (#24691)
  • [fix][client] Fix producer synchronous retry handling in failPendingMessages method (#25207)
  • [fix][client] Fix PulsarAdmin description check and add test (#24734)
  • [fix][client] Fix race condition between isDuplicate() and flushAsync() method in PersistentAcknowledgmentsGroupingTracker due to incorrect use Netty Recycler (#25208)
  • [fix][client] Fix receiver queue auto-scale without memory limit (#24743)
  • [fix][client] Fix stale Healthy state in SameAuthParamsLookupAutoClusterFailover causing flaky test (#25388)
  • [fix][client] Fix thread leak in reloadLookUp method which is used by ServiceUrlProvider (#24794)
  • [fix][client] Fix thread-safety of AutoProduceBytesSchema (#25014)
  • [fix][client] Make auto partitions update work for old brokers without PIP-344 (#24822)
  • [fix][client] PIP-84: Skip processing a message in the message listener if the consumer epoch is no longer valid (#25007)
  • [fix][client] Reduce logging in OAuth auth to fix parsing of Pulsar cli command output (#25254)
  • [fix][client] rollback TopicListWatcher retry behavior (#24752)
  • [fix][client] Send all chunkMessageIds to broker for redelivery (#25229)
  • [fix][client] Skip processing messages in the listener when the consumer has been closed (#25006)
  • [fix][client]Producer stuck or geo-replication stuck due to wrong value of message.numMessagesInBatch (#25106)
  • [fix][client]TopicListWatcher not closed when calling PatternMultiTopicsConsumerImpl.closeAsync() method (#24698)
  • [improve][client] PIP-407 Add newMessage with schema and transactions (#23942)
  • [improve][client] Add null checks for MessageAcknowledger methods to prevent NullPointerException (#25036)
  • [improve][client] Allow adding custom description to User-Agent header (#24729)
  • [improve][client] allow override of default global jsr310 conversion (#24311)
  • [improve][client] Deduplicate getTopicsUnderNamespace in BinaryProtoLookupService (#24962)
  • [improve][client] Deduplicate in-progress lookup requests also for HttpLookupService (#25017)
  • [improve][client] Enable configurable preemptive OAuth2 token refresh (#25363)
  • [improve][client] Make authorization server metadata path configurable in AuthenticationOAuth2 (#25052)
  • [improve][client] PIP-420: Update the schema ID format (#24798)
  • [improve][client] Support protobuf v4 schema compatibility (#25261)
  • [improve][client] Test no exception could be thrown for invalid epoch in message (#25013)
  • [improve][client]Add null check for Pulsar client clock configuration (#24848)
  • [improve][client]PIP-436:Add decryptFailListener to Consumer (#24702)
  • [improve][client]Reduce unnecessary getPartitionedTopicMetadata requests when using retry and DLQ topics. (#25172)
  • [cleanup][client] Remove unnecessary pause/resume logic from MultiTopicsConsumerImpl and cleanup putIfAbsent logic (#25009)
  • [feat][client] Implement PIP-234 for sharing thread pools and DNS resolver/cache across multiple Pulsar Client instances (#24790)
  • [feat][client] oauth2 trustcerts file and timeouts (#24944)
  • [feat][client] PIP-234: Support shared resources in PulsarAdmin to reduce thread usage (#24893)
  • [feat][client] PIP-446: Support Native OpenTelemetry Tracing in Pulsar Java Client (#24873)
  • [fix] Handle TLS close_notify to avoid SslClosedEngineException: SSLEngine closed already (#24986)

Pulsar IO and Pulsar Functions

  • [fix][fn] complete flushAsync before closeAsync in ProducerCache and wait for completion in closing the cache (#25140)
  • [fix][fn] Fix graceful Pulsar Function shutdown so that consumers and producers are closed (#25157)
  • [fix][io] Improve Kafka Connect source offset flushing logic (#24654)
  • [fix][io][kca] kafka headers silently dropped (#25325)
  • [improve][fn] Use PulsarByteBufAllocator.DEFAULT instead of ByteBufAllocator.DEFAULT (#24952)
  • [improve][io] Add PUT method support to HttpSink (#25133)
  • [improve][io] Set default connector class for debezium connectors (#25215)
  • [improve][io] Use try-with-resources for some locations (#24900)
  • [cleanup][io] Remove Pulsar IO Flume connector (#25079)
  • [cleanup][io] Remove Pulsar IO Twitter connector (#25080)
  • [feat][fn] Fallback to using STATE_STORAGE_SERVICE_URL in PulsarMetadataStateStoreProviderImpl.init (#24721)
  • [feat][io] Add ScyllaDB tests (#24931)
  • [feat][io] implement pip-297 for jdbc sinks (#25195)

Others

  • [improve][misc] Add log4j-layout-template-json to server distribution to enable e.g. ECS template support in log4j configurations for Pulsar server components. (#25027)
  • [improve][misc]introduce log4j Console appender ConsoleJson (#25034)
  • [fix][proxy] Close client connection immediately when credentials expire and forwardAuthorizationCredentials is disabled (#25179)
  • [fix][proxy] Fix memory leaks in ParserProxyHandler (#25142)
  • [improve][proxy] Add regression tests for package upload with 'Expect: 100-continue' (#25211)
  • [fix][ws] Fix issue where metadataStoreAllowReadOnlyOperations setting is ignored by WebSocket server (#25281)
  • [fix][cli] Fix output of --print-metadata in cli consume (#25056)
  • [fix][cli] Fix some pulsar-admin topicPolicies commands exiting before async operations complete (#25051)
  • [fix][misc] Fix compareTo contract violation for NamespaceBundleStats, TimeAverageMessageData and ResourceUnitRanking (#24772)
  • [improve][doc] Clarify geo-replication cluster removal behavior for shared vs separate configuration stores (#24687)
  • [improve][doc] Suggest to raise documentation issues to the site repo (#25162)
  • [improve][doc] Update Java version recommendations in README (#24913)
  • [cleanup][doc]Remove TRACING.md as it has been moved to pulsar-site (#25213)
  • [cleanup] PIP-457: Remove NamespaceName.isGlobal() and TopicName.isGlobal() (#25319)
  • [cleanup] PIP-457: Remove support for V1 topic names and V1 Admin API (#25275)
  • [cleanup] PIP-462: Remove Etcd metadata store backend (#25329)
  • [cleanup] Refactored Backoff to be more consistent and intuitive to use (#25278)
  • [feat] PIP-454: Metadata Store Migration Framework (implementation) (#25219)
  • [feat][bookkeeper] add certs refresh (#25370)
  • [fix] Fix typos in class Message and Producer (#25265)
  • [fix] PIP-457: Remove support for V1 topic names and V1 Admin API (implementation) (#25304)
  • [fix]Fixed getChildren('/') on Oxia based provider (#24863)
  • [improve] Add secondary index support to MetadataStore (#25328)

Tests & CI

  • [improve][misc] Protect branch-4.1 (#24715)
  • [fix][build] Activate jdk21 and jdk24 profiles on Java 25 (#25084)
  • [fix][build] Fix compilation issues for PR #25219 changes after merging conflicting PR #25278 (#25300)
  • [fix][build] Fix maven deploy with maven-source-plugin 3.3.1 (#24811)
  • [fix][build] Remove Confluent and Restlet maven repositories from top level pom.xml (#24981)
  • [fix][build] Remove invalid profile in settings.xml that caused gpg signing to fail (#24812)
  • [fix][build] Set project version to 4.2.0-SNAPSHOT (#24690)
  • [fix][ci] Disable trivy-action (#25373)
  • [fix][ci] Fix .github/actions/ssh-access which is used for debugging Pulsar CI in forks (#25075)
  • [fix][ci] Move flaky asyncMarkDeleteBlocking tests to flaky group (#25096)
  • [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] Bump org.assertj:assertj-core from 3.27.5 to 3.27.7 (#25186)
  • [fix][test] Fix flaky ConnectionTimeoutTest by correcting latch count (#25320)
  • [fix][test] Fix flaky ConsumedLedgersTrimTest.testAdminTrimLedgers (#25342)
  • [fix][test] Fix flaky ConsumedLedgersTrimTest.testAdminTrimLedgers (#25360)
  • [fix][test] Fix flaky ExtensibleLoadManagerImplTest.testLoadBalancerServiceUnitTableViewSyncer (#25378)
  • [fix][test] Fix flaky KeySharedSubscriptionBrokerCacheTest.testReplayQueueReadsGettingCached (#24955)
  • [fix][test] Fix flaky LookupPropertiesTest.testConcurrentLookupProperties (#24854)
  • [fix][test] Fix flaky ManagedCursorTest.testSkipEntries (#25339)
  • [fix][test] Fix flaky MessagePublishBufferThrottleTest.testBlockByPublishRateLimiting (#25365)
  • [fix][test] Fix flaky MetadataStoreTest.testThreadSwitchOfZkMetadataStore (#25347)
  • [fix][test] Fix flaky ModularLoadManagerImplTest.testRemoveNonExistBundleData (#25143)
  • [fix][test] Fix flaky NonPersistentTopicTest.testProducerRateLimit (#24951)
  • [fix][test] Fix flaky OneWayReplicatorUsingGlobalZKTest cleanup (#25313)
  • [fix][test] Fix flaky OneWayReplicatorUsingGlobalZKTest.cleanup (#25389)
  • [fix][test] Fix flaky PersistentStickyKeyDispatcherMultipleConsumersClassicTest.testSkipRedeliverTemporally (#25385)
  • [fix][test] Fix flaky PersistentTopicTerminateTest.testRecoverAfterTerminate (#25345)
  • [fix][test] Fix flaky PersistentTopicTest.testBacklogCursor (#25348)
  • [fix][test] Fix flaky PulsarDebeziumOracleSourceTest (#25314)
  • [fix][test] Fix flaky PulsarFunctionsK8STest (#25108)
  • [fix][test] Fix flaky PulsarFunctionTlsTest.testFunctionsCreation (#25341)
  • [fix][test] Fix flaky ReplicatorRateLimiterTest.testReplicatorRateLimiterMessageReceivedAllMessages (#25340)
  • [fix][test] Fix flaky ReplicatorTest.testResumptionAfterBacklogRelaxed (#24904)
  • [fix][test] Fix flaky ReplicatorTest.testResumptionAfterBacklogRelaxed (#25358)
  • [fix][test] Fix flaky ResendRequestTest.testFailoverSingleAckedNormalTopic (#25343)
  • [fix][test] Fix flaky ResendRequestTest.testFailoverSingleAckedNormalTopic (#25364)
  • [fix][test] Fix flaky ShadowTopicTest.testConsumeShadowMessageWithoutCache (#25354)
  • [fix][test] Fix flaky SingleThreadNonConcurrentFixedRateSchedulerTest.testPeriodicTaskCancellation (#24823)
  • [fix][test] Fix flaky SubscriptionSeekTest.testSeekWillNotEncounteredFencedError by counting subscription is fenced only after seek (#24865)
  • [fix][test] Fix flaky TopicListSizeResultCacheTest concurrent requests test (#25357)
  • [fix][test] Fix flaky TopicTerminationTest.testCreatingProducerTasksCleanupWhenOnTerminatedTopic (#25355)
  • [fix][test] Fix invalid test NonPersistentTopicTest.testProducerRateLimit (#24957)
  • [fix][test] Fix ManagedCursorTest and NonDurableCursorTest flaky tests (#25101)
  • [fix][test] Fix Mockito stubbing race in TopicListServiceTest (#25227)
  • [fix][test] Fix ResourceQuotaCalculatorImplTest#testNeedToReportLocalUsage (#25247)
  • [fix][test] fix testBatchMetadataStoreMetrics. (#25241)
  • [fix][test] Fix the flaky test ProduceWithMessageIdTest. sendWithCallBack (#25150)
  • [fix][test] Fix thread leaks in ClientDeduplicationFailureTest and RackAwareTest (#25374)
  • [fix][test] Fix thread leaks in ManagedLedgerTest and PulsarMockBookKeeper (#25377)
  • [fix][test] Fix thread leaks in multiple tests and KinesisSink (#25376)
  • [fix][test] Fixed Non-Guaranteed Order in PoliciesDataTest.propertyAdmin (#24871)
  • [fix][test] Fixed Nondeterministic Assertions in KafkaAbstractSinkTest (#24877)
  • [fix][test] Fixed nondeterministic JSON ordering in multiple tests (#24821)
  • [fix][test] Fixed Nondeterministic Ordering in Generated Docs Topics (#24973)
  • [fix][test] Fixed nondeterministic ordering in MongoSourceTest.testWriteBadMessage (#24835)
  • [fix][test] Fixed Nondeterministic Ordering in SchemaInfoTest (#24969)
  • [fix][test] Fixed ResponseBody Check in Test Helper (#24872)
  • [fix][test] Flaky-test: BrokerServiceTest.testShutDownWithMaxConcurrentUnload (#24769)
  • [fix][test] Made ProtobufNativeSchemaTest.testSchema order-independent (#24805)
  • [fix][test] Made ProtobufSchemaTest.testParsingInfoProperty order-independent (#24807)
  • [fix][test] Make ClusterMigrationTest.testClusterMigrationWithReplicationBacklog more robust (#25330)
  • [fix][test] Replace LZ4FastDecompressor with LZ4SafeDecompressor in test (#25032)
  • [fix][test] Stabilize FunctionAssignmentTailerTest.testErrorNotifier by synchronizing mock stubbing with CountDownLatch (#24875)
  • [fix][test] Stabilize PublishRateLimiterOverconsumingTest by aligning measurement and using adjacent 2-sec averages (#24864)
  • [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)
  • [fix][test] Use AtomicBoolean.compareAndSet() to guarantee atomicity in testDoIndividualBatchAckNeverAffectIsDuplicate() method (#25217)
  • [fix][test] Wait for txn.abort() to complete to avoid AdminApiTransactionTest.testAnalyzeSubscriptionBacklogWithTransactionMarker() flaky test (#25125)
  • [fix][test] Whitelist SharedPulsarCluster threads in thread leak detector (#25375)
  • [fix][test]Fix flaky ExtensibleLoadManagerImplTest_testGetMetrics (#25216)
  • [fix][test]fix flaky MessagePayloadProcessorTest.testDefaultProcessor (#24710)
  • [fix][test]fix flaky SimpleProducerConsumerTest.testReceiveAsyncCompletedWhenClosing (#24858)
  • [fix] Fix flaky OneWayReplicatorTest.testTopicPoliciesReplicationRule (#25316)
  • [fix] Fix flaky testEstimatedTimeBasedBacklogQuotaCheckWhenNoBacklog (#25307)
  • [improve][build] Add Async Profiler integration for integration tests (#24688)
  • [improve][build] Disable javadoc build failure (#24594)
  • [improve][build] docker: use up to date wolfi-base location (#24708)
  • [improve][build] Support building docker images that use Wolfi base image which is glibc based (#24692)
  • [improve][ci] Move replication tests to new group Broker Group 5 in Pulsar CI (#24917)
  • [improve][ci] Replace PULSARBOT_TOKEN with GITHUB_TOKEN configured with permissions (#24916)
  • [improve][ci] update pulsarbot to use github-script based implementation (#24940)
  • [improve][CI] Add Copilot instructions based on Pulsar Java coding conventions (#25305)
  • [improve][test] Disable flaky PatternConsumerBackPressureTest until the problem is fixed (#24948)
  • [improve][test] Improve integration test profiling test example (#24701)
  • [improve][test] Introduce shared Pulsar cluster for faster integration tests (#25311)
  • [improve][test] Set k8s test retry count to 0 (#25230)
  • [improve][test] Use Oxia project docker container for integration tests (#24995)
  • [cleanup] Convert 10 test classes to SharedPulsarBaseTest (#25327)
  • [cleanup] Convert 10 test classes to SharedPulsarBaseTest (#25338)
  • [cleanup] Convert 12 test classes to SharedPulsarBaseTest (#25392)
  • [cleanup] Convert 13 test classes to SharedPulsarBaseTest (#25331)
  • [cleanup] Convert 15 test classes to SharedPulsarBaseTest (#25318)
  • [cleanup] Convert 30 test classes to SharedPulsarBaseTest (#25381)

For the complete list, check the full changelog.