Skip to content

Commit e7b70d1

Browse files
lhotariganesh-ctds
authored andcommitted
[improve][broker] Make maxBatchDeletedIndexToPersist configurable and document other related configs (apache#24392)
(cherry picked from commit d1bca65) (cherry picked from commit dfcc246)
1 parent ab8c810 commit e7b70d1

File tree

5 files changed

+72
-18
lines changed

5 files changed

+72
-18
lines changed

conf/broker.conf

Lines changed: 24 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1287,6 +1287,14 @@ managedLedgerCursorMaxEntriesPerLedger=50000
12871287
# Max time before triggering a rollover on a cursor ledger
12881288
managedLedgerCursorRolloverTimeInSeconds=14400
12891289

1290+
# Maximum amount of memory used hold data read from storage (or from the cache).
1291+
# This mechanism prevents the broker to have too many concurrent
1292+
# reads from storage and fall into Out of Memory errors in case
1293+
# of multiple concurrent reads to multiple concurrent consumers.
1294+
# Set 0 in order to disable the feature.
1295+
#
1296+
managedLedgerMaxReadsInFlightSizeInMB=0
1297+
12901298
# Max number of "acknowledgment holes" that are going to be persistently stored.
12911299
# When acknowledging out of order, a consumer will leave holes that are supposed
12921300
# to be quickly filled by acking all the messages. The information of which
@@ -1296,13 +1304,22 @@ managedLedgerCursorRolloverTimeInSeconds=14400
12961304
# crashes.
12971305
managedLedgerMaxUnackedRangesToPersist=10000
12981306

1299-
# Maximum amount of memory used hold data read from storage (or from the cache).
1300-
# This mechanism prevents the broker to have too many concurrent
1301-
# reads from storage and fall into Out of Memory errors in case
1302-
# of multiple concurrent reads to multiple concurrent consumers.
1303-
# Set 0 in order to disable the feature.
1304-
#
1305-
managedLedgerMaxReadsInFlightSizeInMB=0
1307+
# Maximum number of partially acknowledged batch messages per subscription that will have their batch
1308+
# deleted indexes persisted. Batch deleted index state is handled when acknowledgmentAtBatchIndexLevelEnabled=true.
1309+
# When this limit is exceeded, remaining batch message containing the batch deleted indexes will
1310+
# only be tracked in memory. In case of broker restarts or load balancing events, the batch
1311+
# deleted indexes will be cleared while redelivering the messages to consumers.
1312+
managedLedgerMaxBatchDeletedIndexToPersist=10000
1313+
1314+
# When storing acknowledgement state, choose a more compact serialization format that stores
1315+
# individual acknowledgements as a bitmap which is serialized to an array of long values. NOTE: This setting requires
1316+
# managedLedgerUnackedRangesOpenCacheSetEnabled=true to be effective.
1317+
managedLedgerPersistIndividualAckAsLongArray=false
1318+
1319+
# When set to true, a BitSet will be used to track acknowledged messages that come after the "mark delete position"
1320+
# for each subscription. RoaringBitmap is used as a memory efficient BitSet implementation for the acknowledged
1321+
# messages tracking. Unacknowledged ranges are the message ranges excluding the acknowledged messages.
1322+
managedLedgerUnackedRangesOpenCacheSetEnabled=true
13061323

13071324
# Max number of "acknowledgment holes" that can be stored in MetadataStore. If number of unack message range is higher
13081325
# than this limit then broker will persist unacked ranges into bookkeeper to avoid additional data overhead into
@@ -1804,9 +1821,6 @@ narExtractionDirectory=
18041821
# Maximum prefetch rounds for ledger reading for offloading
18051822
managedLedgerOffloadPrefetchRounds=1
18061823

1807-
# Use Open Range-Set to cache unacked messages
1808-
managedLedgerUnackedRangesOpenCacheSetEnabled=true
1809-
18101824
# For Amazon S3 ledger offload, AWS region
18111825
s3ManagedLedgerOffloadRegion=
18121826

conf/standalone.conf

Lines changed: 17 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -833,6 +833,23 @@ managedLedgerMaxSizePerLedgerMbytes=2048
833833
# crashes.
834834
managedLedgerMaxUnackedRangesToPersist=10000
835835

836+
# Maximum number of partially acknowledged batch messages per subscription that will have their batch
837+
# deleted indexes persisted. Batch deleted index state is handled when acknowledgmentAtBatchIndexLevelEnabled=true.
838+
# When this limit is exceeded, remaining batch message containing the batch deleted indexes will
839+
# only be tracked in memory. In case of broker restarts or load balancing events, the batch
840+
# deleted indexes will be cleared while redelivering the messages to consumers.
841+
managedLedgerMaxBatchDeletedIndexToPersist=10000
842+
843+
# When storing acknowledgement state, choose a more compact serialization format that stores
844+
# individual acknowledgements as a bitmap which is serialized to an array of long values. NOTE: This setting requires
845+
# managedLedgerUnackedRangesOpenCacheSetEnabled=true to be effective.
846+
managedLedgerPersistIndividualAckAsLongArray=false
847+
848+
# When set to true, a BitSet will be used to track acknowledged messages that come after the "mark delete position"
849+
# for each subscription. RoaringBitmap is used as a memory efficient BitSet implementation for the acknowledged
850+
# messages tracking. Unacknowledged ranges are the message ranges excluding the acknowledged messages.
851+
managedLedgerUnackedRangesOpenCacheSetEnabled=true
852+
836853
# Max number of "acknowledgment holes" that can be stored in MetadataStore. If number of unack message range is higher
837854
# than this limit then broker will persist unacked ranges into bookkeeper to avoid additional data overhead into
838855
# MetadataStore.
@@ -890,9 +907,6 @@ managedLedgerMinimumBacklogEntriesForCaching=1000
890907
# Maximum backlog entry difference to prevent caching entries that can't be reused.
891908
managedLedgerMaxBacklogBetweenCursorsForCaching=1000
892909

893-
# Use Open Range-Set to cache unacked messages
894-
managedLedgerUnackedRangesOpenCacheSetEnabled=true
895-
896910
# Managed ledger prometheus stats latency rollover seconds (default: 60s)
897911
managedLedgerPrometheusStatsLatencyRolloverSeconds=60
898912

managed-ledger/src/main/java/org/apache/bookkeeper/mledger/ManagedLedgerConfig.java

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -502,6 +502,16 @@ public int getMaxBatchDeletedIndexToPersist() {
502502
return maxBatchDeletedIndexToPersist;
503503
}
504504

505+
/**
506+
* Set max batch deleted index that will be persisted and recovered.
507+
*
508+
* @param maxBatchDeletedIndexToPersist
509+
* max batch deleted index that will be persisted and recovered.
510+
*/
511+
public void setMaxBatchDeletedIndexToPersist(int maxBatchDeletedIndexToPersist) {
512+
this.maxBatchDeletedIndexToPersist = maxBatchDeletedIndexToPersist;
513+
}
514+
505515
public boolean isPersistentUnackedRangesWithMultipleEntriesEnabled() {
506516
return persistentUnackedRangesWithMultipleEntriesEnabled;
507517
}

pulsar-broker-common/src/main/java/org/apache/pulsar/broker/ServiceConfiguration.java

Lines changed: 19 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2280,10 +2280,22 @@ The max allowed delay for delayed delivery (in milliseconds). If the broker rece
22802280
+ " will only be tracked in memory and messages will be redelivered in case of"
22812281
+ " crashes.")
22822282
private int managedLedgerMaxUnackedRangesToPersist = 10000;
2283-
@FieldContext(
2284-
category = CATEGORY_STORAGE_ML,
2285-
doc = "Whether persist cursor ack stats as long arrays, which will compress the data and reduce GC rate")
2283+
2284+
@FieldContext(category = CATEGORY_STORAGE_ML,
2285+
doc = "Maximum number of partially acknowledged batch messages per subscription that will have their batch "
2286+
+ "deleted indexes persisted. Batch deleted index state is handled when "
2287+
+ "acknowledgmentAtBatchIndexLevelEnabled=true.\n\n"
2288+
+ "When this limit is exceeded, remaining batch message containing the batch deleted indexes will "
2289+
+ "only be tracked in memory. In case of broker restarts or load balancing events, the batch "
2290+
+ "deleted indexes will be cleared while redelivering the messages to consumers.")
2291+
private int managedLedgerMaxBatchDeletedIndexToPersist = 10000;
2292+
2293+
@FieldContext(category = CATEGORY_STORAGE_ML,
2294+
doc = "When storing acknowledgement state, choose a more compact serialization format that stores"
2295+
+ " individual acknowledgements as a bitmap which is serialized to an array of long values.\n\n"
2296+
+ "NOTE: This setting requires managedLedgerUnackedRangesOpenCacheSetEnabled=true to be effective.")
22862297
private boolean managedLedgerPersistIndividualAckAsLongArray = false;
2298+
22872299
@FieldContext(
22882300
category = CATEGORY_STORAGE_ML,
22892301
doc = "If enabled, the maximum \"acknowledgment holes\" will not be limited and \"acknowledgment holes\" "
@@ -2306,8 +2318,10 @@ The max allowed delay for delayed delivery (in milliseconds). If the broker rece
23062318
private int managedLedgerMaxUnackedRangesToPersistInMetadataStore = 1000;
23072319
@FieldContext(
23082320
category = CATEGORY_STORAGE_OFFLOADING,
2309-
doc = "Use Open Range-Set to cache unacked messages (it is memory efficient but it can take more cpu)"
2310-
)
2321+
doc = "When set to true, a BitSet will be used to track acknowledged messages that come after the \"mark "
2322+
+ "delete position\" for each subscription.\n\nRoaringBitmap is used as a memory efficient BitSet "
2323+
+ "implementation for the acknowledged messages tracking. Unacknowledged ranges are the message "
2324+
+ "ranges excluding the acknowledged messages.")
23112325
private boolean managedLedgerUnackedRangesOpenCacheSetEnabled = true;
23122326
@FieldContext(
23132327
dynamic = true,

pulsar-broker/src/main/java/org/apache/pulsar/broker/service/BrokerService.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2044,6 +2044,8 @@ public CompletableFuture<ManagedLedgerConfig> getManagedLedgerConfig(@NonNull To
20442044

20452045
managedLedgerConfig
20462046
.setMaxUnackedRangesToPersist(serviceConfig.getManagedLedgerMaxUnackedRangesToPersist());
2047+
managedLedgerConfig.setMaxBatchDeletedIndexToPersist(
2048+
serviceConfig.getManagedLedgerMaxBatchDeletedIndexToPersist());
20472049
managedLedgerConfig
20482050
.setPersistIndividualAckAsLongArray(serviceConfig.isManagedLedgerPersistIndividualAckAsLongArray());
20492051
managedLedgerConfig.setPersistentUnackedRangesWithMultipleEntriesEnabled(

0 commit comments

Comments
 (0)