[improve][offload]use dedicated bookkeeper-ml-offload-scheduler to avoid any potential … #24839
+44
−9
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Motivation
We use HDFS as the offload remote storage in our online scenarios. During an HDFS namenode switchover, the normal service of the broker was disrupted due to the failure and retry of a large number of offload operations. The logs are as follows:

Offload operations in Pulsar's managed ledger share the same scheduler thread pool with core services. When offload operations block or take too long, they can impact critical managed ledger operations like data read/write and metadata management, causing system performance degradation.
This change introduces a dedicated offload scheduler to isolate offload operations from core services, preventing potential blocking issues.
Modifications
Added configuration support:
managedLedgerNumOffloadSchedulerThreads
parameter inServiceConfiguration
andbroker.conf
Created dedicated offload scheduler:
offloadScheduler
field inManagedLedgerFactoryImpl
usingOrderedScheduler
Isolated offload operations:
scheduledExecutor
to dedicatedoffloadScheduler
maybeOffloadInBackground()
,maybeOffload()
,cleanupOffloaded()
, andtryTransformLedgerInfo()
This ensures offload operations don't interfere with core managed ledger functionality, improving overall system stability and performance.
Documentation
doc
doc-required
doc-not-needed
doc-complete
Matching PR in forked repository
PR in forked repository: ethqunzhong#11