PIP-120 : Enable client memory limit controller by default - #13344
Conversation
merlimat
left a comment
There was a problem hiding this comment.
Let's wait until PIP is accepted before merging
| * it will keep in memory (direct memory pool) all the messages in the pending queue. | ||
| * | ||
| * <p>Default is 1000. | ||
| * <p>Default is 0, disable the pending messages check. |
There was a problem hiding this comment.
We should also deprecate maxPendingMessagesAcrossPartitions() (and setting it to 0 by default), because memory limit is a better approach to limit the max amount of memory.
There was a problem hiding this comment.
Done. The maxPendingMessagesAcrossPartitions and maxPendingMessages are deprecated.
There was a problem hiding this comment.
Oh, but let's not deprecate this one (maxPendingMessages), since there will still be legitimate reasons to set a max number of messages.
|
@HQebupt:Thanks for your contribution. For this PR, do we need to update docs? |
|
the test |
@shoothzj Good suggestion. Done. 👍 |
Yes |
|
/pulsarbot run-failure-checks |
|
Hi @HQebupt When submitting a PR, please provide doc related info in the PR description by ticking the box or labeling a PR directly, so that Bot will recognize the info and then label the PR correctly, or else Bot can not recognize the info and then label the PR with the I've labeled this PR with |
@Anonymitaet Thanks a lot. I realized I did not find the right way. |
|
/pulsarbot run-failure-checks |
|
/pulsarbot run-failure-checks |
|
@yangl You're right, we shouldn't deprecate the |
2874be4 to
2db2264
Compare
|
Good, let me revert it. I keep the default value as 0. |
|
/pulsarbot run-failure-checks |
|
Thanks @merlimat |
…ents ### Motivation After apache#13344, we have changed the default value of maxPendingMessagesAcrossPartitions to `0`, for the performance producer, it will always apply the default value of maxPendingMessagesAcrossPartitions while creating producers, so it will always use `0` for maxPendingMessagesAcrossPartitions. But we have a check here https://github.com/apache/pulsar/blob/0a91196dcc4d31ae647867ed319b8c1af0cb93c6/pulsar-client/src/main/java/org/apache/pulsar/client/impl/conf/ProducerConfigurationData.java#L138-L142 This will lead the performance producer not able to create if users only set `-o` option ``` 06:32:49.628 [pulsar-perf-producer-exec-1-1] ERROR org.apache.pulsar.testclient.PerformanceProducer - Got error java.lang.IllegalArgumentException: maxPendingMessagesAcrossPartitions needs to be >= maxPendingMessages at org.apache.pulsar.shade.com.google.common.base.Preconditions.checkArgument(Preconditions.java:145) ~[pulsar-client-admin-2.10.0.2.jar:2.10.0.2] at org.apache.pulsar.client.impl.conf.ProducerConfigurationData.setMaxPendingMessagesAcrossPartitions(ProducerConfigurationData.java:138) ~[pulsar-client-admin-2.10.0.2.jar:2.10.0.2] at org.apache.pulsar.client.impl.ProducerBuilderImpl.maxPendingMessagesAcrossPartitions(ProducerBuilderImpl.java:148) ~[pulsar-client-admin-2.10.0.2.jar:2.10.0.2] at org.apache.pulsar.testclient.PerformanceProducer.runProducer(PerformanceProducer.java:600) ~[pulsar-testclient-2.10.0.2.jar:2.10.0.2] at org.apache.pulsar.testclient.PerformanceProducer.lambda$main$1(PerformanceProducer.java:464) ~[pulsar-testclient-2.10.0.2.jar:2.10.0.2] at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511) [?:1.8.0_332] at java.util.concurrent.FutureTask.run(FutureTask.java:266) [?:1.8.0_332] at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) [?:1.8.0_332] at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) [?:1.8.0_332] at io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30) [netty-common-4.1.74.Final.jar:4.1.74.Final] at java.lang.Thread.run(Thread.java:750) [?:1.8.0_332] ``` ### Modification Change the performance producer to only call `.maxPendingMessagesAcrossPartitions()` if it presents. ### Verification Added new test to only use `-o` to start the performance producer, use a consumer to consume data from the topic to make sure the performance producer has been created successfully.
Fixes #13306
Motivation
See #13306
Modifications
Enable the
MemeoryLimitController. ThememoryLimitBytesdefault is 64M which is easier to control than themaxPendingMessages.The default 64M has a good performance in produce throughput in our perf test. I am going to post the performance result here.
Verifying this change
This change is a trivial rework / code cleanup without any test coverage.
Does this pull request potentially affect one of the following parts:
If
yeswas chosen, please highlight the changesDocumentation
Check the box below and label this PR (if you have committer privilege).
Need to update docs?
doc(There is description in the configuration modification)