-
Notifications
You must be signed in to change notification settings - Fork 3.6k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
PIP-120 : Enable client memory limit controller by default #13344
Conversation
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Let's wait until PIP is accepted before merging
@@ -172,7 +172,7 @@ | |||
* the client application. Until, the producer gets a successful acknowledgment back from the broker, | |||
* 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.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
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.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Done. The maxPendingMessagesAcrossPartitions
and maxPendingMessages
are deprecated.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Oh, but let's not deprecate this one (maxPendingMessages
), since there will still be legitimate reasons to set a max number of messages.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
OK, done.
@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
. ThememoryLimitBytes
default 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
yes
was 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)