[improve][broker] Reduce the pressure from the transaction buffer in rolling restarts #32
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
During the rolling restarts, the namespace bundle ownerships will change. Assuming there is a producer created on a single topic, and the ownership was transferred to the new broker. Assuming the namespace bundle has N topics and the namespace is
tenant/ns
,TopicTransactionBuffer
will be created. 2.1 A Pulsar producer will be created ontenant/ns/__transaction_buffer_snapshot
concurrently. 2.2 A Pulsar reader will be created ontenant/ns/__transaction_buffer_snapshot
concurrently.maxPendingReadRequestsPerThread
pending read requests (default: 10000).We have a
numTransactionReplayThreadPoolSize
config to limit the concurrency of transaction snapshot readers. However, it only limits the read loop. For example, if it's configured with 1, only 1 reader could read messages at the same time. However, N readers will be created concurrently. Each when one of these reader explicitly callsreadNext
, all N dispatchers at brokers side will dispatch messages to N readers.The behaviors above brings much CPU pressure on the owner broker, especially for a small cluster with only two brokers.
Modifications
LazySnapshotWriter
.