NextStack

pulsar v5.0.0-M2

pre-release PublishedSep 16, 2026 Sourceapache/pulsar

pulsar v5.0.0-M2

2026-09-17

Approved PIPs

  • [improve][pip] PIP-445: Add Builder Methods to Create Message-based TableView (#24842)
  • [improve][pip] PIP-486: Scalable Topic Key-Shared Consumption (#26077)
  • [improve][pip] PIP-492: Add pulsar_subscription_storage_backlog_age_seconds metric (#26362)
  • [feat][pip] PIP-478: Asynchronous v5 client auth plugin interfaces and TLS material provider plugin interface (#25890)
  • [feat][pip]PIP-487 Add event count metrics for InflightReadsLimiter acquire and release operations (#26092)

Breaking changes

  • JUL (java.util.logging) configuration is no longer effective for server-side components (#26330)

    Previously, logs from third-party libraries that use JUL (e.g., Jersey/Jetty, gRPC, Guava) were not managed by Pulsar’s Log4j2 configuration, making them difficult to control and causing inconsistent log output. To solve this, third-party library logging is now bridged from JUL to Log4j2 via log4j-jul. This unifies all logging under conf/log4j2.yaml, but means the following JUL APIs and configurations no longer take effect:

    • -Djava.util.logging.config.file=logging.properties — the entire JUL configuration file is ignored
    • java.util.logging.Logger.setLevel() / addHandler() — become no-ops
    • java.util.logging.LogManager.reset() — becomes a no-op

    Migration: Move any JUL-based logging configuration to conf/log4j2.yaml. For example, to suppress gRPC logs that were previously configured as io.grpc.level=SEVERE in logging.properties, add the following to conf/log4j2.yaml:

    Loggers:
      Logger:
        - name: io.grpc
          level: error

    Revert: To restore stock JUL behavior, set:

    PULSAR_EXTRA_OPTS="-Djava.util.logging.manager=java.util.logging.LogManager"

Library updates

  • [improve][build] Switch default JDK to 25 for 5.0.0-M2 (#26070)
  • [fix][sec] Bump github.com/go-jose/go-jose/v4 from 4.1.3 to 4.1.4 in /pulsar-function-go (#26142)
  • [fix][sec] Bump google.golang.org/grpc from 1.79.3 to 1.82.1 in /pulsar-function-go/examples (#26231)
  • [fix][sec] Bump google.golang.org/grpc from 1.82.1 to 1.83.1 in /pulsar-function-go (#26446)
  • [fix][sec] Bump google.golang.org/grpc from 1.83.1 to 1.83.2 in /pulsar-function-go (#26541)
  • [fix][sec] Bump log4j2 from 2.26.0 to 2.26.1 (#26329)
  • [fix][sec] Downgrade Jackson version to 2.21.5 LTS (#26166)
  • [fix][sec] Pin httpclient5 to 5.6.4 and httpcore5 to 5.4.3 (#26331)
  • [fix][sec] Upgrade avro to 1.12.2 (#24992)
  • [fix][sec] Upgrade grpc in pulsar-function-go to 1.82.1 to fix GHSA-hrxh-6v49-42gf (#26235)
  • [fix][sec] Upgrade Jackson to 2.21.6 (#26338)
  • [fix][sec] Upgrade Jackson to 2.22.0 (#26101)
  • [fix][sec] Upgrade jline to 4.2.1 and picocli to 4.7.7, drop unused jline2 (#26068)
  • [fix][sec] Upgrade lz4-java to 1.11.1 to address CVE-2026-59949 (#26250)
  • [fix][sec] Upgrade Netty to 4.2.16.Final to address CVEs (#26167)
  • [fix][sec] Upgrade Netty to 4.2.17 to address several CVEs and bugs (#26300)
  • [fix][sec] Upgrade Netty to 4.2.18 to address several CVEs and bugs (#26514)
  • [fix][sec] Upgrade pulsar-client-go to v0.20.0 in pulsar-function-go, also address CVEs (#26140)
  • [fix][ci] Upgrade sandboxed-trivy-action to approved sha (#26169)
  • [improve][fn] Upgrade pulsar-client-python to 3.12.0 (#26033)
  • [improve][fn] Upgrade pulsar-client-python to 3.13.0 (#26139)
  • [improve][meta] Upgrade Oxia client to 0.9.4 (#26193)
  • [improve][monitor] Upgrade Dropwizard Metrics to 4.2.39 and HdrHistogram to 2.2.2 (#26353)
  • [improve][build] Upgrade Apache Commons libraries (#26348)
  • [improve][build] Upgrade async-http-client to 3.0.13 and netty-reactive-streams to 2.0.19 (#26366)
  • [improve][build] Upgrade BouncyCastle to 1.85 and BouncyCastle FIPS to 2.1.x (#26349)
  • [improve][build] Upgrade data structure and compression libraries (#26357)
  • [improve][build] Upgrade docker base image Alpine to 3.24 (#26225)
  • [improve][build] Upgrade Gradle plugins and move to the io.github.ben-manes.versions plugin id (#26350)
  • [improve][build] Upgrade Gradle to 9.7.0 (#26332)
  • [improve][build] Upgrade Gradle to 9.7.1 (#26440)
  • [improve][build] Upgrade gRPC to 1.83.1 and Protobuf to 4.35.1 (#26356)
  • [improve][build] Upgrade Gson to 2.14.0 and json-smart to 2.6.0 (#26355)
  • [improve][build] Upgrade Jakarta and servlet APIs within the Jakarta EE 10 level (#26354)
  • [improve][build] Upgrade Jersey to 3.1.12 (#26347)
  • [improve][build] Upgrade lightproto to 0.8.1 (#26445)
  • [improve][build] Upgrade misc tooling, annotation and utility libraries (#26359)
  • [improve][build] Upgrade networking and infrastructure client libraries (#26358)
  • [improve][build] Upgrade OkHttp to 5.5.0 and Okio to 3.18.1 (#26352)
  • [improve][build] Upgrade OpenTelemetry to 1.65.0, instrumentation to 2.30.0, semconv to 1.43.0 (#26334)
  • [improve][build] Upgrade Oxia Java client to 0.9.5 (#26538)
  • [improve][build] Upgrade Shadow plugin to 9.6.1 and merge service descriptor files in shaded jars (#26333)
  • [improve][build] Upgrade slog to 0.10.0 (#26226)
  • [improve][test] Upgrade test libraries (#26351)
  • [improve][misc] Upgrade Conscrypt to 2.6.1 to add aarch64 native support (#26314)
  • [improve][misc] Upgrade Conscrypt to 2.6.2 to restore the native library glibc baseline (#26315)
  • [improve][misc] Upgrade Jetty to 12.1.11 (#26233)
  • [improve][misc] Upgrade Jetty to 12.1.12 (#26302)

Broker

  • [fix][broker] Add missing bundle Prometheus metrics for extensible load manager (#26192)
  • [fix][broker] Avoid attaching a consumer to a migrated non-persistent topic on subscribe (#26075)
  • [fix][broker] Avoid blocking metadata read on the IO thread when redirecting migrated producers/consumers (#26051)
  • [fix][broker] Avoid blocking the bundle-throughput lookup on per-bundle metadata reads (#26054)
  • [fix][broker] Avoid blocking the dispatcher close path on delayed-delivery tracker close (#26053)
  • [fix][broker] Avoid blocking the metrics thread on the pending-ack managed ledger (#26062)
  • [fix][broker] Avoid blocking the PulsarAdmin callback thread on the post-unload load-report write (#26061)
  • [fix][broker] Avoid load shedding and metadata writes from a former leader (#26253)
  • [fix][broker] Bound the topic deletion retries triggered by a replication cluster removal (#26432)
  • [fix][broker] Cancel queued transaction snapshot recovery on topic close (#26335)
  • [fix][broker] Check deliverAt before containsMessage in bucket addMessage (#26230)
  • [fix][broker] Debit un-acked messages only when the consumer is actually removed (#26422)
  • [fix][broker] Do not log an error when the tenant does not exist (#26361)
  • [fix][broker] Don’t let a closing topic-policies reader abort a concurrent cache-init reload (#26132)
  • [fix][broker] Don’t serve topic policies from a cache whose init future has not completed (#26513)
  • [fix][broker] Fix getEstimatedSizeSinceMarkDeletePosition throw IllegalArgumentException (#26184)
  • [fix][broker] Fix assignment and ownership cleanup races in the extensible load manager (#26520)
  • [fix][broker] Fix AvgShedder assignment cache keying with stable bundle names (#26246)
  • [fix][broker] Fix bucket delayed delivery counter and dedup consistency (#26251)
  • [fix][broker] Fix bucket delayed message index metrics reset on scrape (#26171)
  • [fix][broker] Fix BucketDelayedDeliveryTracker recovery after LightProto migration (#26160)
  • [fix][broker] Fix delayed message index data loss when trimming overlapping bucket snapshots (#26240)
  • [fix][broker] Fix delayed-delivery bucket merge failures when delayedDeliveryMaxNumBuckets is 1-3 (#26242)
  • [fix][broker] Fix dispatcherPauseOnAckStatePersistentEnabled and schemaValidationEnforced returning wrong values when applied=true (#26472)
  • [fix][broker] Fix early completion and false timeouts in SplitManager and UnloadManager (#26363)
  • [fix][broker] Fix geo-replication stuck after a failed publish to the remote cluster (#26002)
  • [fix][broker] Fix incorrect listener URLs returned by ModularLoadManager lookups (#26245)
  • [fix][broker] Fix Key_Shared delivery stall when look-ahead triggers at the end of the topic (#26236)
  • [fix][broker] Fix multi-role authorization regressions and optimize nested checks (#26551)
  • [fix][broker] Fix NPE in ManagedLedgerInterceptorImpl when AppendIndexMetadataInterceptor isn’t configured (#26497)
  • [fix][broker] Fix ownership-generation races in OwnershipCache removeOwnership and lock-expiry cleanup (#26197)
  • [fix][broker] Fix persistent throughput degradation caused by permit loss during frequent reconnects on Shared subscriptions (#26289)
  • [fix][broker] Fix replication stall when a cursor rewind skips an in-flight read (#26106)
  • [fix][broker] Fix replicator getting stuck under rate limiter throttling and honor readBatchSize/maxReadSizeBytes on the default read path (#26005)
  • [fix][broker] Fix silently dropped acknowledgement failures in PulsarMetadataEventSynchronizer (#26237)
  • [fix][broker] Fix TableViewLoadDataStoreImpl close deadlock that stalls broker shutdown (#26243)
  • [fix][broker] Forward topic policy updates after init failures (#26110)
  • [fix][broker] Guard BucketDelayedDeliveryTracker.nextDeliveryTime against empty queues (#26080)
  • [fix][broker] Log exception in PulsarMetadataEventSynchronizer failure path (#26203)
  • [fix][broker] PIP-468: don’t let namespace consumers auto-recreate deleted scalable topics (#26066)
  • [fix][broker] Prevent automatic TTL expiry from skipping reader messages (#26505)
  • [fix][broker] Prevent completing replicated snapshot before marker publish (#26119)
  • [fix][broker] Prevent early replay of non-strict delayed messages (#26188)
  • [fix][broker] Prevent Key_Shared out-of-order replay starvation at the end of topic (#26268)
  • [fix][broker] Prevent NPE when the last ACK races with sticky hash reassignment (#26471)
  • [fix][broker] Prevent partition expansion from inheriting delayed-delivery bucket state (#26179)
  • [fix][broker] Prevent stale read completions from stranding Failover subscriptions (#26174)
  • [fix][broker] Prevent stale service unit callbacks from dropping active lookup and cleanup jobs (#26146)
  • [fix][broker] Prevent stale topic unload cleanup from removing active cache entries (#26145)
  • [fix][broker] Prevent topic policy initialization race with a buffering listener wrapper (#26044)
  • [fix][broker] Read subscription properties directly from cursor (#26159)
  • [fix][broker] Reject topic names with leading or trailing whitespace on creation (#26281)
  • [fix][broker] Release entry on GetLastMessageId when parseMessageMetadata throws (#26089)
  • [fix][broker] Remove lock contention in delayed delivery stats read paths (#25990)
  • [fix][broker] Resolve replicator remote cluster by prefix so cluster names containing a dot work (#26451)
  • [fix][broker] Run the message expiry check off the topic policy update path (#26040)
  • [fix][broker] Run topic policy notifications on the topic-ordered executor (#26042)
  • [fix][broker] Send ActiveConsumerChange for non-persistent Failover subscriptions (#26482)
  • [fix][broker] Stop reporting a deliberate ownership release as an expired resource lock (#26533)
  • [fix][broker] Trigger max read position callback for messages published during transaction buffer recovery (#26234)
  • [fix][broker] Wait for in-flight snapshot creation when trimming orphaned delayed-delivery buckets (#26309)
  • [fix][broker]Do not trigger topic GC if replication is still active (#25915)
  • [fix][admin] Allow defaultNumPartitions for non-partitioned autoTopicCreation override (#25163)
  • [fix][admin] Avoid creating subscriptions when peeking messages if auto-creation is disabled (#26279)
  • [fix][admin] PIP-478: off-load the admin’s v4 credential and lend it a bounded auth executor (#26327)
  • [fix][admin] Reject empty cluster migration URL: fix inverted ClusterUrl.isEmpty() (#26473)
  • [fix][ml] Fix active cursor retention and deferred-update synchronization (#26511)
  • [fix][ml] Fix batch ACK index loss when recovering cursor from MetadataStore (#26474)
  • [fix][ml] Make inflight reads limiter work even if managed ledger cache is disabled (#26296)
  • [fix][ml] Parse the cached entry’s message metadata from the buffer the cache keeps (#26495)
  • [fix][ml] Preserve cursor properties when recovering from an unreadable cursor ledger (#26512)
  • [fix][ml] Preserve ledger entries/size when transformLedgerInfo callback completes after a concurrent close (#26228)
  • [fix][ml] Preserve ledger properties when closing ledger (#26227)
  • [fix][ml] Preserve ledger properties when recovering the last ledger on open (#26509)
  • [fix][ml] Skip contiguous deleted ranges during reads (#26299)
  • [fix][ml] Tolerate concurrent creation of the managed ledger z-node (#26247)
  • [fix][ml] Track all pending read callbacks for timeouts (#26081)
  • [fix][offload] Cache and reuse entry offsets discovered while skipping in BlobStoreBackedReadHandleImpl (#26424)
  • [fix][offload] Normalize offloader cache directory path (#26372)
  • [fix][meta] Complete handleMetadataEvent future exceptionally when the initial get fails (#26199)
  • [fix][meta] Fix NPE in shouldIgnoreEvent when MetadataEvent options is null (#26200)
  • [fix][meta] Fix RocksdbMetadataStore instanceId not advancing across restarts (#26218)
  • [fix][meta] Record get op stats on the correct completion branch in AbstractMetadataStore (#26201)
  • [fix][meta] Run ledger-underreplication notification callbacks off the metadata-store listener thread (#26065)
  • [improve][broker] Add LongBitmap abstraction and migrate RoaringBitmap usage to LongBitmap (#26117)
  • [improve][broker] Add pulsar_subscription_storage_backlog_age_seconds metric (#26313)
  • [improve][broker] Add reason label for topic_load_failed_total (#26264)
  • [improve][broker] Avoid iterator allocation in BrokerInterceptors hot paths and restore configured ordering (#26462)
  • [improve][broker] Avoid lookup positions when batch-index state is empty (#26528)
  • [improve][broker] Bridge JUL to Log4j2 to unify third-party library logging under the project’s Log4j2 configuration (#26330)
  • [improve][broker] Change partition metadata not-found log to warn (#26381)
  • [improve][broker] Conflate concurrent readMoreEntries calls (#26539)
  • [improve][broker] Copy small entries into a flat buffer when prepending broker entry metadata (#26464)
  • [improve][broker] Expose interface for the replicator in ManagedLedger instead of cast the class (#26298)
  • [improve][broker] Implemets PIP-487: add event count metrics for InflightReadsLimiter acquire and release operations (#26093)
  • [improve][broker] Improve dispatch performance by skipping redundant null ack-set writes (#26057)
  • [improve][broker] Improve dispatch performance by summing entry bytes with a loop (#26055)
  • [improve][broker] Load topic policies on non-persistent topic load and gate the policy replay (#26134)
  • [improve][broker] Make exposing topic level metric dynamic (#21006)
  • [improve][broker] Optimize bucket delayed-delivery bitmap point operations (#26205)
  • [improve][broker] Optimize SegmentedLongArray with heap-backed long[][] (#26183)
  • [improve][broker] PIP-468: auto-create scalable topics on lookup when policy allows (#26048)
  • [improve][broker] PIP-486 (PR2): controller entry-bucket budget per segment (#26118)
  • [improve][broker] PIP-486 (PR3): entry-bucket foundation (single-active by default) (#26129)
  • [improve][broker] PIP-486 (PR4): bucket-shared consumption for scale-up fan-out (#26173)
  • [improve][broker] PIP-486 (PR5): broker-side entry-bucket handoff for orderly consumer scaling (#26208)
  • [improve][broker] PIP-486: entry-bucket wire format, hash & layout foundation (#26114)
  • [improve][broker] PIP-486: rebucket rollover and the segments-vs-buckets auto-scale policy (#26434)
  • [improve][broker] Pre-size individual acknowledgment lists (#26517)
  • [improve][broker] Reduce PendingAcksMap memory by replacing IntIntPair values with packed longs (#26030)
  • [improve][broker] Reduce persistent topic backlog check overhead with ManagedCursor.hasBacklog (#26058)
  • [improve][broker] Skip system cursor when check inactive cursor. (#26149)
  • [improve][broker] Support OpenID multi-role authorization and improve proxy authentication defaults (#26549)
  • [improve][broker] Trace the asynchronous tasks in logs when loading topics (#26163)
  • [improve][broker] Trim orphaned bucket snapshots when ledgers are deleted (#25984)
  • [improve][broker] Use AVL trees for pending acknowledgment entries (#26522)
  • [improve][broker][proxy] Add httpMaxResponseHeaderSize config (#26255)
  • [fix][txn] Do not fail topic deletion when the aborted txn snapshot cannot be cleared (#26431)
  • [fix][txn] Fix X-Pulsar-txn-uncommitted header semantics and add X-Pulsar-txn-consumable for peek messages (#26073)
  • [improve][ml] Avoid capturing cache insertion arguments (#26524)
  • [improve][ml] Avoid temporary positions when deleting cursor entries (#26532)
  • [improve][ml] Back LongBitmap with the on-heap RoaringBitmap to fix ack allocation hotspot (#26500)
  • [improve][ml] Build cached read results without an intermediate collection (#26529)
  • [improve][ml] Optimize individual-ack filtering by skipping scans for batches without acked entries (#26311)
  • [improve][ml] Parse message metadata at entry cache insert time instead of under the wrapper write lock (#26463)
  • [improve][ml] Replace RangeSetWrapper with PositionRangeSet backed by LongBitmap (#26127)
  • [improve][ml] Share immutable publish positions with cached entries (#26526)
  • [improve][ml] Share read-permit release callbacks within a batch (#26523)
  • [improve][offload] Support credentials from offload policies for S3 and Aliyun OSS drivers (#26232)
  • [improve][meta] Support tuning Oxia MetadataStoreConfig through metadata-store URIs (#26067)
  • [cleanup][broker] Remove configuration entries that no longer exist in the code (#26291)
  • [cleanup][ml] Remove unused metadata quorum configuration fields (#26293)
  • [feat][broker] Expose managed ledger properties via topic internal stats (#26079)
  • [feat][broker] PIP-470: Close inactive topics without deleting their data (#25574)
  • [Fix][broker]Get a fenced error when loading a topic that does not allowed the cluster to access (#26276)

Client

  • [fix][client] Apply backpressure in the V5 producer before a send is queued (#26540)
  • [fix][client] Apply no-memory-limit producer queue defaults at producer creation (#26342)
  • [fix][client] Avoid exception in ConsumerImpl hasMessageAvailable before first receive (#25857)
  • [fix][client] Cancel pending HTTP requests on authentication client shutdown (#26537)
  • [fix][client] Cancel stale per-topic retry timers in v5 multi-topic consumers (#26130)
  • [fix][client] Defer op cmd release to the write event loop on send timeout (#26456)
  • [fix][client] Divide the across-partitions budget only when it was set explicitly (#26384)
  • [fix][client] Fix incorrect topic in OTel spans for multi-topic consumers (#25894)
  • [fix][client] Fix incorrect topic in OTel spans for partitioned producers (#25896)
  • [fix][client] Fix lookup permit double-release, waiting queue starvation and timeout-response races in ClientCnx (#26143)
  • [fix][client] Fix UnAckedMessageRedeliveryTracker to skip cancelled timeouts (#26043)
  • [fix][client] Fix unAckedMessageTracker cleanup on multi-topics batch ack (#26001)
  • [fix][client] Isolate shaded implementations from the v5 client (#26544)
  • [fix][client] Keep transactional and non-transactional messages in separate batches (#26547)
  • [fix][client] Make V5 async producer flush() await the caller’s send futures (#26287)
  • [fix][client] PIP-486: explicit unsubscribe for scalable consumers’ clean close (#26433)
  • [fix][client] Preserve null values in pulsar-admin schema output (#26196)
  • [fix][client] Prevent client shutdown from leaking event loop threads when DNS resolver close fails (#26045)
  • [fix][client] Release the command header when send serialization fails (#26492)
  • [fix][client] Release the reserved memory only once when failing a send in a terminal state (#26476)
  • [fix][client] Run the failover health probe off the Netty event-loop thread (#26064)
  • [fix][client] Scalable topics: stream consumer must not acknowledge on close or topic-removal (#26172)
  • [fix][client] Stop tracking ack timeouts on non-persistent topics (#26548)
  • [fix][client] Sync ackSet in client with broker to stop acked messages reaching the DLQ (#26135)
  • [improve][client] Apply receiver-queue backpressure in v5 scalable consumers (#26151)
  • [improve][client] Avoid eager broker metadata allocation for outgoing messages (#26521)
  • [improve][client] Avoid per-message cross-topic vector deep copy in v5 multi-topic stream consumer (#26162)
  • [improve][client] Avoid recomputing entry-bucket hashes (#26383)
  • [improve][client] Avoid unused send-stat snapshots for default callbacks (#26519)
  • [improve][client] Dispatch individual acknowledgments without capturing functions (#26525)
  • [improve][client] Initialize message builder metadata lazily (#26518)
  • [improve][client] Log the exception in ControlledClusterFailover.close (#25925)
  • [improve][client] Make v5 scalable consumer receiveAsync truly non-blocking (#26131)
  • [improve][client] PIP-478: Athenz and SASL v5 authentication plugins (#26319)
  • [improve][client] PIP-478: drive the v5 authentication model natively in the client (#26317)
  • [improve][client] PIP-486 (PR1): producer entry-bucketing for scalable topics (#26115)
  • [improve][client] Seed MessageCryptoBc from the BC-FIPS DRBG when that provider is registered (#26154)
  • [improve][client] Serialize grouped acknowledgments using existing message IDs (#26530)
  • [improve][client] Use SHA-256 for generated reader subscription names (#26153)
  • [feat][client] Add combined unshaded and shaded v4/v5 client artifacts (#26545)
  • [feat][client] PIP-478: asynchronous v5 client authentication and TLS factory integration (core migration) (#26282)

Pulsar IO and Pulsar Functions

  • [fix][fn] Allow retainKeyOrdering on Go functions (#26421)
  • [fix][fn] Bound function package downloads from BookKeeper and stop SchedulerManager.close() from hanging on a stuck scheduling round (#26556)
  • [fix][fn] Forward source message properties in Python runtime (#26191)
  • [fix][fn] Honour negativeAckRedeliveryDelayMs in the Go function runtime (#26415)
  • [fix][fn] Honour negativeAckRedeliveryDelayMs in the Python function runtime (#26413)
  • [fix][fn] Honour producerSpec batching configuration in the Go function runtime (#26393)
  • [fix][fn] Honour producerSpec batching configuration in the Python function runtime (#26392)
  • [fix][fn] Honour retainOrdering and retainKeyOrdering in the Go function runtime (#26414)
  • [fix][fn] Make exclusiveLeaderProducer volatile in FunctionMetaDataManager (#26046)
  • [fix][fn] Reorder Function Worker shutdown to stop scheduler before runtime manager (#26136)
  • [fix][fn] Return descriptive errors for unknown JSON properties (#26441)
  • [fix][fn] Return inputSpecs consumerProperties in function GET info (#26217)
  • [improve][fn] Standardize log4j2 Root logger configuration to use system property (#26121)
  • [improve][io] Replace Spring Framework with cron-utils in CronTriggerer (#26269)

Others

  • [fix][proxy] Avoid blocking the proxy IO thread on a cold broker cache (#26052)
  • [fix][proxy] PIP-478: resolve the proxy’s broker-client credential off the event loop (#26328)
  • [fix][cli] Apply PULSAR_MEM and PULSAR_GC in bin/pulsar-perf (#26465)
  • [fix][cli] Fix V5 scalable-topics property parsing (#26177)
  • [fix][cli] pulsar-perf: register subcommand classes with picocli instead of instances (#26467)
  • [fix][cli] Set —enable-native-access=ALL-UNNAMED for the CLI tools on Java 24+ (#26365)
  • [fix][misc] Remove unnecessary ” {}” suffix from log lines when there are no context attributes (#26285)
  • [fix][misc] Resolve void by name in Reflections.loadClass (#26478)
  • [fix][misc] Restore PKCS#1 RSA support and add SEC1 EC private key parsing (#26543)
  • [improve][doc] Require imports over fully qualified class names (#26516)
  • [improve][cli] Add v4-client subcommands to pulsar-perf and pulsar-client (#26480)
  • [improve][cli] Default the pulsar-perf client memory limit to half of the JVM max direct memory (#26491)
  • [improve][cli] pulsar-perf: cut latency histogram memory ~100x, fix range units and static stats state (#26466)
  • [improve][misc] Add LongArrayAckSets for allocation-free ack set operations (#26128)
  • [improve][misc] PIP-472: Drop Jetty ee8 usage and adapt legacy javax.servlet additional servlets (#26444)
  • [improve][misc] PIP-478: close out the migration follow-ups, add the JCA provider keys, and reconcile the PIP (#26326)
  • [improve][misc] PIP-478: remove the superseded PIP-337 TLS stack (#26322)
  • [improve][misc] Replace MD5 NAR/archive checksums with SHA-256 (#26152)
  • [fix][common] Handle synchronous failures from future suppliers (#25939)
  • [fix][metadata] Fix orphaned UR parent nodes not cleaned up with Oxia metadata backend (#26158)
  • [feat][misc] PIP-478: dedicated pulsar-tls-factory-api and pulsar-http-client-api SPI modules (#26222)
  • [feat][misc] PIP-478: default file-based TLS factory implementation (#26271)
  • [fix] functions: Run worker leader-election off the consumer event-listener thread (#26059)
  • [improve] Exclude filesystem offloader NAR from base image (#26085)

Tests & CI

  • [fix][build] Align protobuf proto-path and avroTools configs with the version platform (#26047)
  • [fix][ci] Update setup-gradle action to v6.2.0 to match ASF actions allowlist (#26156)
  • [fix][test] Await reader reconnect after seek() to fix flaky TopicReaderTest assertions (#26141)
  • [fix][test] Await schema policy updates in OneWayReplicatorTest (#26554)
  • [fix][test] Fix flaky AdminApiTest caused by leaked brokerShutdownTimeoutMs (#26249)
  • [fix][test] Fix flaky AuditorBookieTest.testBookieClusterRestart (#26122)
  • [fix][test] Fix flaky AuditorPeriodicCheckTest.testFailedWriteRecovery (#26316)
  • [fix][test] Fix flaky GeoReplicationTest.testTopicReplication (#26090)
  • [fix][test] Fix flaky IsolatedBookieEnsemblePlacementPolicyTest by awaiting the initial rack config load (#26429)
  • [fix][test] Fix flaky PendingAckInMemoryDeleteTest.txnAckTestBatchAndSharedSubMemoryDeleteTest (#26116)
  • [fix][test] Fix flaky PersistentTopicsTest setup caused by concurrent Mockito stubbing (#26083)
  • [fix][test] Fix flaky test testCompactionPriority (#26198)
  • [fix][test] Fix flaky testPrepareInitPoliciesCacheAsyncThrowExceptionAfterCreateReader (#26049)
  • [fix][test] Fix flaky TestReplicationWorker.testRepairedNotAdheringPlacementPolicyLedgerFragmentsOnRack (#26308)
  • [fix][test] Fix flaky V5DagWatchAutoReconnectTest producer test (#26510)
  • [fix][test] Fix OneWayReplicatorSchemaValidationEnforcedTest racing the replicator’s remote topic creation (#26382)
  • [fix][test] Join assignment tailer before asserting its last message ID (#26536)
  • [fix][test] Make consistent hashing consumer selection test deterministic (#26534)
  • [fix][test] Run makeReadEntryProbFail’s errorOrNot on a caller-provided executor (#26123)
  • [fix][test] Wait for compaction before reloading deleted topic policies (#26535)
  • [improve][build] Allow building with Java 26 (#26461)
  • [improve][build] Profile Pulsar tests with async-profiler from Gradle (#26460)
  • [improve][build] Restore fastutil and minimize it in the client and server distributions (#26032)
  • [improve][build] Run checkstyle/spotless without compiling and add quickCheck/sanityCheck tasks (#26050)
  • [improve][build] Set —enable-native-access=ALL-UNNAMED for test JVMs on Java 24+ (#26367)
  • [improve][build] Trim unused JDK modules from the Docker image runtime (#26086)
  • [improve][ci] Gate CI in apache/pulsar on the pull request being ready for testing (#26323)
  • [improve][ci] Run the Python function instance tests in CI (#26399)
  • [improve][test] Add randomized TripleLongPriorityQueue correctness test (#26022)
  • [improve][test] Cover reverse equality for topic message IDs (#26449)
  • [improve][test] Make PulsarProfilingTest test Scalable Topics and adjust memory parameters (#26468)
  • [improve][test] Reduce perf-producer traversal and completion overhead (#26527)
  • [improve][test] Split PulsarProfilingTest into v5 and v4 variants (#26503)
  • [improve][test]Add test: test/testTopicPartitionCannotBeCreatedAfterTopicDeleted (#26038)

For the complete list, check the full changelog.


Source apache/pulsar · v5.0.0-M2 · 2026-09-16 · upstream release

Mirrored verbatim for indexing. All rights belong to the upstream project.

Release notes are published by the upstream project and mirrored here for indexing. All rights belong to their authors.