diff --git a/pulsar-broker/src/main/java/org/apache/pulsar/broker/admin/impl/ResourceGroupsBase.java b/pulsar-broker/src/main/java/org/apache/pulsar/broker/admin/impl/ResourceGroupsBase.java
index 71fb6aa..1ce3aa5 100644
--- a/pulsar-broker/src/main/java/org/apache/pulsar/broker/admin/impl/ResourceGroupsBase.java
+++ b/pulsar-broker/src/main/java/org/apache/pulsar/broker/admin/impl/ResourceGroupsBase.java
@@ -63,10 +63,18 @@
             /*
              * assuming read-modify-write
              */
-            resourceGroup.setPublishRateInMsgs(rgConfig.getPublishRateInMsgs());
-            resourceGroup.setPublishRateInBytes(rgConfig.getPublishRateInBytes());
-            resourceGroup.setDispatchRateInMsgs(rgConfig.getDispatchRateInMsgs());
-            resourceGroup.setDispatchRateInBytes(rgConfig.getDispatchRateInBytes());
+            if (rgConfig.getPublishRateInMsgs() != null) {
+                resourceGroup.setPublishRateInMsgs(rgConfig.getPublishRateInMsgs());
+            }
+            if (rgConfig.getPublishRateInBytes() != null) {
+                resourceGroup.setPublishRateInBytes(rgConfig.getPublishRateInBytes());
+            }
+            if (rgConfig.getDispatchRateInMsgs() != null) {
+                resourceGroup.setDispatchRateInMsgs(rgConfig.getDispatchRateInMsgs());
+            }
+            if (rgConfig.getDispatchRateInBytes() != null) {
+                resourceGroup.setDispatchRateInBytes(rgConfig.getDispatchRateInBytes());
+            }
 
             // write back the new ResourceGroup config.
             resourceGroupResources().updateResourceGroup(rgName, r -> resourceGroup);
@@ -80,6 +88,14 @@
     }
 
     protected void internalCreateResourceGroup(String rgName, ResourceGroup rgConfig) {
+        rgConfig.setPublishRateInMsgs(rgConfig.getPublishRateInMsgs() == null
+                ? -1 : rgConfig.getPublishRateInMsgs());
+        rgConfig.setPublishRateInBytes(rgConfig.getPublishRateInBytes() == null
+                ? -1 : rgConfig.getPublishRateInBytes());
+        rgConfig.setDispatchRateInMsgs(rgConfig.getDispatchRateInMsgs() == null
+                ? -1 : rgConfig.getDispatchRateInMsgs());
+        rgConfig.setDispatchRateInBytes(rgConfig.getDispatchRateInBytes() == null
+                ? -1 : rgConfig.getDispatchRateInBytes());
         try {
             resourceGroupResources().createResourceGroup(rgName, rgConfig);
             log.info("[{}] Created ResourceGroup {}", clientAppId(), rgName);
diff --git a/pulsar-broker/src/main/java/org/apache/pulsar/broker/resourcegroup/ResourceGroup.java b/pulsar-broker/src/main/java/org/apache/pulsar/broker/resourcegroup/ResourceGroup.java
index afd3bd5..79db7da 100644
--- a/pulsar-broker/src/main/java/org/apache/pulsar/broker/resourcegroup/ResourceGroup.java
+++ b/pulsar-broker/src/main/java/org/apache/pulsar/broker/resourcegroup/ResourceGroup.java
@@ -556,12 +556,16 @@
         int idx;
 
         idx = ResourceGroupMonitoringClass.Publish.ordinal();
-        this.monitoringClassFields[idx].configValuesPerPeriod.bytes = rgConfig.getPublishRateInBytes();
-        this.monitoringClassFields[idx].configValuesPerPeriod.messages = rgConfig.getPublishRateInMsgs();
+        this.monitoringClassFields[idx].configValuesPerPeriod.bytes = rgConfig.getPublishRateInBytes() == null
+                ? -1 : rgConfig.getPublishRateInBytes();
+        this.monitoringClassFields[idx].configValuesPerPeriod.messages = rgConfig.getPublishRateInMsgs() == null
+                ? -1 : rgConfig.getPublishRateInMsgs();
 
         idx = ResourceGroupMonitoringClass.Dispatch.ordinal();
-        this.monitoringClassFields[idx].configValuesPerPeriod.bytes = rgConfig.getDispatchRateInBytes();
-        this.monitoringClassFields[idx].configValuesPerPeriod.messages = rgConfig.getDispatchRateInMsgs();
+        this.monitoringClassFields[idx].configValuesPerPeriod.bytes = rgConfig.getDispatchRateInBytes() == null
+                ? -1 : rgConfig.getDispatchRateInBytes();
+        this.monitoringClassFields[idx].configValuesPerPeriod.messages = rgConfig.getDispatchRateInMsgs() == null
+                ? -1 : rgConfig.getDispatchRateInMsgs();
     }
 
     private void setDefaultResourceUsageTransportHandlers() {
diff --git a/pulsar-broker/src/main/java/org/apache/pulsar/broker/resourcegroup/ResourceGroupPublishLimiter.java b/pulsar-broker/src/main/java/org/apache/pulsar/broker/resourcegroup/ResourceGroupPublishLimiter.java
index 2e48445..f2f6bcd 100644
--- a/pulsar-broker/src/main/java/org/apache/pulsar/broker/resourcegroup/ResourceGroupPublishLimiter.java
+++ b/pulsar-broker/src/main/java/org/apache/pulsar/broker/resourcegroup/ResourceGroupPublishLimiter.java
@@ -89,8 +89,10 @@
     public void update(ResourceGroup resourceGroup) {
         long publishRateInMsgs = 0, publishRateInBytes = 0;
         if (resourceGroup != null) {
-            publishRateInBytes = resourceGroup.getPublishRateInBytes();
-            publishRateInMsgs = resourceGroup.getPublishRateInMsgs();
+            publishRateInBytes = resourceGroup.getPublishRateInBytes() == null
+                    ? -1 : resourceGroup.getPublishRateInBytes();
+            publishRateInMsgs = resourceGroup.getPublishRateInMsgs() == null
+                    ? -1 : resourceGroup.getPublishRateInMsgs();
         }
 
         update(publishRateInMsgs, publishRateInBytes);
diff --git a/pulsar-broker/src/test/java/org/apache/pulsar/broker/admin/ResourceGroupsTest.java b/pulsar-broker/src/test/java/org/apache/pulsar/broker/admin/ResourceGroupsTest.java
index 347b271..bdf1c3b 100644
--- a/pulsar-broker/src/test/java/org/apache/pulsar/broker/admin/ResourceGroupsTest.java
+++ b/pulsar-broker/src/test/java/org/apache/pulsar/broker/admin/ResourceGroupsTest.java
@@ -85,10 +85,10 @@
 
         // create resourcegroup with non default values.
         ResourceGroup testResourceGroupTwo = new ResourceGroup();
-        testResourceGroupTwo.setDispatchRateInBytes(10000);
+        testResourceGroupTwo.setDispatchRateInBytes(10000L);
         testResourceGroupTwo.setDispatchRateInMsgs(100);
         testResourceGroupTwo.setPublishRateInMsgs(100);
-        testResourceGroupTwo.setPublishRateInBytes(10000);
+        testResourceGroupTwo.setPublishRateInBytes(10000L);
 
         resourcegroups.createOrUpdateResourceGroup("test-resourcegroup-two", testResourceGroupTwo);
         expectedRgNames.add("test-resourcegroup-two");
@@ -104,9 +104,9 @@
         // update with some real values
         ResourceGroup testResourceGroupOneUpdate = new ResourceGroup();
         testResourceGroupOneUpdate.setDispatchRateInMsgs(50);
-        testResourceGroupOneUpdate.setDispatchRateInBytes(5000);
+        testResourceGroupOneUpdate.setDispatchRateInBytes(5000L);
         testResourceGroupOneUpdate.setPublishRateInMsgs(10);
-        testResourceGroupOneUpdate.setPublishRateInBytes(1000);
+        testResourceGroupOneUpdate.setPublishRateInBytes(1000L);
         resourcegroups.createOrUpdateResourceGroup("test-resourcegroup-one", testResourceGroupOneUpdate);
 
         // get a non existent resourcegroup
@@ -143,10 +143,10 @@
     public void testNamespaceResourceGroup() throws Exception {
         // create resourcegroup with non default values.
         ResourceGroup testResourceGroupTwo = new ResourceGroup();
-        testResourceGroupTwo.setDispatchRateInBytes(10000);
+        testResourceGroupTwo.setDispatchRateInBytes(10000L);
         testResourceGroupTwo.setDispatchRateInMsgs(100);
         testResourceGroupTwo.setPublishRateInMsgs(100);
-        testResourceGroupTwo.setPublishRateInBytes(10000);
+        testResourceGroupTwo.setPublishRateInBytes(10000L);
 
         resourcegroups.createOrUpdateResourceGroup("test-resourcegroup-three", testResourceGroupTwo);
         admin.namespaces().createNamespace(testNameSpace);
diff --git a/pulsar-broker/src/test/java/org/apache/pulsar/broker/resourcegroup/RGUsageMTAggrWaitForAllMsgsTest.java b/pulsar-broker/src/test/java/org/apache/pulsar/broker/resourcegroup/RGUsageMTAggrWaitForAllMsgsTest.java
index 87b3d5a..386e8bf 100644
--- a/pulsar-broker/src/test/java/org/apache/pulsar/broker/resourcegroup/RGUsageMTAggrWaitForAllMsgsTest.java
+++ b/pulsar-broker/src/test/java/org/apache/pulsar/broker/resourcegroup/RGUsageMTAggrWaitForAllMsgsTest.java
@@ -902,9 +902,9 @@
         final int NumProducerMessages = NUM_MESSAGES_PER_PRODUCER * NUM_PRODUCERS;
         Assert.assertTrue(NUM_MESSAGES_PER_CONSUMER > 0 && NumConsumerMessages == NumProducerMessages);
 
-        rgConfig.setPublishRateInBytes(1500);
+        rgConfig.setPublishRateInBytes(1500L);
         rgConfig.setPublishRateInMsgs(100);
-        rgConfig.setDispatchRateInBytes(4000);
+        rgConfig.setDispatchRateInBytes(4000L);
         rgConfig.setDispatchRateInMsgs(500);
 
         // Set up the RG names; creation of RGs will be done elsewhere.
diff --git a/pulsar-broker/src/test/java/org/apache/pulsar/broker/resourcegroup/ResourceGroupConfigListenerTest.java b/pulsar-broker/src/test/java/org/apache/pulsar/broker/resourcegroup/ResourceGroupConfigListenerTest.java
index 8a85d4f..38cae32 100644
--- a/pulsar-broker/src/test/java/org/apache/pulsar/broker/resourcegroup/ResourceGroupConfigListenerTest.java
+++ b/pulsar-broker/src/test/java/org/apache/pulsar/broker/resourcegroup/ResourceGroupConfigListenerTest.java
@@ -109,6 +109,70 @@
     }
 
     @Test
+    public void testResourceGroupUpdatePart() throws Exception {
+        testAddRg = new ResourceGroup();
+        testAddRg.setPublishRateInBytes(1024 * 1024L);
+        createResourceGroup(rgName, testAddRg);
+        ResourceGroup resourceGroup = admin.resourcegroups().getResourceGroup(rgName);
+        assertEquals(resourceGroup.getPublishRateInBytes().longValue(), 1024 * 1024);
+        assertEquals(resourceGroup.getPublishRateInMsgs().intValue(), -1);
+        assertEquals(resourceGroup.getDispatchRateInBytes().longValue(), -1);
+        assertEquals(resourceGroup.getDispatchRateInMsgs().longValue(), -1);
+
+        // automatically set publishRateInMsgs to 200000 in updateResourceGroup()
+        testAddRg = new ResourceGroup();
+        updateResourceGroup(rgName, testAddRg);
+        resourceGroup = admin.resourcegroups().getResourceGroup(rgName);
+        assertEquals(resourceGroup.getPublishRateInBytes().longValue(), 1024 * 1024);
+        assertEquals(resourceGroup.getPublishRateInMsgs().intValue(), 200000);
+        assertEquals(resourceGroup.getDispatchRateInBytes().longValue(), -1);
+        assertEquals(resourceGroup.getDispatchRateInMsgs().intValue(), -1);
+
+        // manually set dispatchRateInBytes to 2*1024*1024
+        testAddRg = new ResourceGroup();
+        testAddRg.setDispatchRateInBytes(2 * 1024 * 1024L);
+        updateResourceGroup(rgName, testAddRg);
+        resourceGroup = admin.resourcegroups().getResourceGroup(rgName);
+        assertEquals(resourceGroup.getPublishRateInBytes().longValue(), 1024 * 1024);
+        assertEquals(resourceGroup.getPublishRateInMsgs().intValue(), 200000);
+        assertEquals(resourceGroup.getDispatchRateInBytes().longValue(), 2 * 1024 * 1024);
+        assertEquals(resourceGroup.getDispatchRateInMsgs().intValue(), -1);
+
+        // manually update dispatchRateInBytes to 3*1024*1024
+        testAddRg = new ResourceGroup();
+        testAddRg.setDispatchRateInBytes(3 * 1024 * 1024L);
+        updateResourceGroup(rgName, testAddRg);
+        resourceGroup = admin.resourcegroups().getResourceGroup(rgName);
+        assertEquals(resourceGroup.getPublishRateInBytes().longValue(), 1024 * 1024);
+        assertEquals(resourceGroup.getPublishRateInMsgs().intValue(), 200000);
+        assertEquals(resourceGroup.getDispatchRateInBytes().longValue(), 3 * 1024 * 1024);
+        assertEquals(resourceGroup.getDispatchRateInMsgs().intValue(), -1);
+
+        // manually update dispatchRateInBytes to 4*1024*1024 and set dispatchRateInMsgs to 400000
+        testAddRg = new ResourceGroup();
+        testAddRg.setDispatchRateInBytes(4 * 1024 * 1024L);
+        testAddRg.setDispatchRateInMsgs(400000);
+        updateResourceGroup(rgName, testAddRg);
+        resourceGroup = admin.resourcegroups().getResourceGroup(rgName);
+        assertEquals(resourceGroup.getPublishRateInBytes().longValue(), 1024 * 1024);
+        assertEquals(resourceGroup.getPublishRateInMsgs().intValue(), 200000);
+        assertEquals(resourceGroup.getDispatchRateInBytes().longValue(), 4 * 1024 * 1024);
+        assertEquals(resourceGroup.getDispatchRateInMsgs().intValue(), 400000);
+
+        // manually update dispatchRateInBytes to -1
+        testAddRg = new ResourceGroup();
+        testAddRg.setDispatchRateInBytes(-1L);
+        updateResourceGroup(rgName, testAddRg);
+        resourceGroup = admin.resourcegroups().getResourceGroup(rgName);
+        assertEquals(resourceGroup.getPublishRateInBytes().longValue(), 1024 * 1024);
+        assertEquals(resourceGroup.getPublishRateInMsgs().intValue(), 200000);
+        assertEquals(resourceGroup.getDispatchRateInBytes().longValue(), -1);
+        assertEquals(resourceGroup.getDispatchRateInMsgs().intValue(), 400000);
+
+        deleteResourceGroup(rgName);
+    }
+
+    @Test
     public void testResourceGroupCreateDeleteCreate() throws Exception {
         createResourceGroup(rgName, testAddRg);
         deleteResourceGroup(rgName);
@@ -143,10 +207,10 @@
 
         for (int i = 0; i < MAX_RGS; i++) {
             String rgName = String.format("testRg-%d", i);
-            testAddRg.setDispatchRateInBytes(random.nextInt());
-            testAddRg.setDispatchRateInMsgs(random.nextInt());
-            testAddRg.setPublishRateInBytes(random.nextInt());
-            testAddRg.setPublishRateInMsgs(random.nextInt());
+            testAddRg.setDispatchRateInBytes(Long.valueOf(random.nextInt()));
+            testAddRg.setDispatchRateInMsgs(Integer.valueOf(random.nextInt()));
+            testAddRg.setPublishRateInBytes(Long.valueOf(random.nextInt()));
+            testAddRg.setPublishRateInMsgs(Integer.valueOf(random.nextInt()));
 
             admin.resourcegroups().createResourceGroup(rgName, testAddRg);
         }
@@ -202,9 +266,9 @@
         );
         ResourceGroup rg = new ResourceGroup();
         rg.setPublishRateInMsgs(-1);
-        rg.setPublishRateInBytes(10);
+        rg.setPublishRateInBytes(10L);
         rg.setDispatchRateInMsgs(10);
-        rg.setDispatchRateInBytes(20);
+        rg.setDispatchRateInBytes(20L);
         createResourceGroup("myrg", rg);
 
         for (int i = 0; i < 100; i++) {
@@ -218,10 +282,10 @@
     private void prepareData() throws PulsarAdminException {
         admin.clusters().createCluster(clusterName, ClusterData.builder().serviceUrl(pulsar.getWebServiceAddress()).build());
 
-        testAddRg.setPublishRateInBytes(10000);
+        testAddRg.setPublishRateInBytes(10000L);
         testAddRg.setPublishRateInMsgs(100);
         testAddRg.setDispatchRateInMsgs(20000);
-        testAddRg.setDispatchRateInBytes(200);
+        testAddRg.setDispatchRateInBytes(200L);
 
     }
 }
diff --git a/pulsar-broker/src/test/java/org/apache/pulsar/broker/resourcegroup/ResourceGroupRateLimiterTest.java b/pulsar-broker/src/test/java/org/apache/pulsar/broker/resourcegroup/ResourceGroupRateLimiterTest.java
index 1887801..a12d551 100644
--- a/pulsar-broker/src/test/java/org/apache/pulsar/broker/resourcegroup/ResourceGroupRateLimiterTest.java
+++ b/pulsar-broker/src/test/java/org/apache/pulsar/broker/resourcegroup/ResourceGroupRateLimiterTest.java
@@ -148,9 +148,9 @@
     }
 
     private void prepareData() {
-        testAddRg.setPublishRateInBytes(MESSAGE_SIZE);
+        testAddRg.setPublishRateInBytes(Long.valueOf(MESSAGE_SIZE));
         testAddRg.setPublishRateInMsgs(1);
         testAddRg.setDispatchRateInMsgs(-1);
-        testAddRg.setDispatchRateInBytes(-1);
+        testAddRg.setDispatchRateInBytes(Long.valueOf(-1));
     }
 }
diff --git a/pulsar-broker/src/test/java/org/apache/pulsar/broker/resourcegroup/ResourceGroupServiceTest.java b/pulsar-broker/src/test/java/org/apache/pulsar/broker/resourcegroup/ResourceGroupServiceTest.java
index 4b84760..e0e3ec9 100644
--- a/pulsar-broker/src/test/java/org/apache/pulsar/broker/resourcegroup/ResourceGroupServiceTest.java
+++ b/pulsar-broker/src/test/java/org/apache/pulsar/broker/resourcegroup/ResourceGroupServiceTest.java
@@ -149,9 +149,9 @@
           new org.apache.pulsar.common.policies.data.ResourceGroup();
         final String rgName = "testRG";
         final String randomRgName = "Something";
-        rgConfig.setPublishRateInBytes(15000);
+        rgConfig.setPublishRateInBytes(15000L);
         rgConfig.setPublishRateInMsgs(100);
-        rgConfig.setDispatchRateInBytes(40000);
+        rgConfig.setDispatchRateInBytes(40000L);
         rgConfig.setDispatchRateInMsgs(500);
 
         int initialNumQuotaCalculations = numAnonymousQuotaCalculations;
@@ -179,11 +179,11 @@
 
         PerMonitoringClassFields monClassFields;
         monClassFields = retRG.monitoringClassFields[ResourceGroupMonitoringClass.Publish.ordinal()];
-        Assert.assertEquals(monClassFields.configValuesPerPeriod.bytes, rgConfig.getPublishRateInBytes());
-        Assert.assertEquals(monClassFields.configValuesPerPeriod.messages, rgConfig.getPublishRateInMsgs());
+        Assert.assertEquals(monClassFields.configValuesPerPeriod.bytes, rgConfig.getPublishRateInBytes().longValue());
+        Assert.assertEquals(monClassFields.configValuesPerPeriod.messages, rgConfig.getPublishRateInMsgs().intValue());
         monClassFields = retRG.monitoringClassFields[ResourceGroupMonitoringClass.Dispatch.ordinal()];
-        Assert.assertEquals(monClassFields.configValuesPerPeriod.bytes, rgConfig.getDispatchRateInBytes());
-        Assert.assertEquals(monClassFields.configValuesPerPeriod.messages, rgConfig.getDispatchRateInMsgs());
+        Assert.assertEquals(monClassFields.configValuesPerPeriod.bytes, rgConfig.getDispatchRateInBytes().longValue());
+        Assert.assertEquals(monClassFields.configValuesPerPeriod.messages, rgConfig.getDispatchRateInMsgs().intValue());
 
         Assert.assertThrows(PulsarAdminException.class, () -> rgs.resourceGroupDelete(randomRgName));
 
@@ -238,8 +238,8 @@
         int numQuotaCalcsDuringTest = numAnonymousQuotaCalculations - initialNumQuotaCalculations;
         if (numQuotaCalcsDuringTest == 0) {
             // Quota calculations were not done yet during this test; we expect to see the default "initial" setting.
-            Assert.assertEquals(publishQuota.messages, rgConfig.getPublishRateInMsgs());
-            Assert.assertEquals(publishQuota.bytes, rgConfig.getPublishRateInBytes());
+            Assert.assertEquals(publishQuota.messages, rgConfig.getPublishRateInMsgs().intValue());
+            Assert.assertEquals(publishQuota.bytes, rgConfig.getPublishRateInBytes().longValue());
         }
 
         // Calculate the quota synchronously to avoid waiting for a periodic call within ResourceGroupService.
diff --git a/pulsar-broker/src/test/java/org/apache/pulsar/broker/resourcegroup/ResourceGroupUsageAggregationTest.java b/pulsar-broker/src/test/java/org/apache/pulsar/broker/resourcegroup/ResourceGroupUsageAggregationTest.java
index a2b3b21..c562e39 100644
--- a/pulsar-broker/src/test/java/org/apache/pulsar/broker/resourcegroup/ResourceGroupUsageAggregationTest.java
+++ b/pulsar-broker/src/test/java/org/apache/pulsar/broker/resourcegroup/ResourceGroupUsageAggregationTest.java
@@ -104,9 +104,9 @@
             }
         };
 
-        rgConfig.setPublishRateInBytes(1500);
+        rgConfig.setPublishRateInBytes(1500L);
         rgConfig.setPublishRateInMsgs(100);
-        rgConfig.setDispatchRateInBytes(4000);
+        rgConfig.setDispatchRateInBytes(4000L);
         rgConfig.setPublishRateInMsgs(500);
         rgs.resourceGroupCreate(activeRgName, rgConfig, ruP, ruC);
 
diff --git a/pulsar-client-admin-api/src/main/java/org/apache/pulsar/common/policies/data/ResourceGroup.java b/pulsar-client-admin-api/src/main/java/org/apache/pulsar/common/policies/data/ResourceGroup.java
index 78d695c..0bfc386 100644
--- a/pulsar-client-admin-api/src/main/java/org/apache/pulsar/common/policies/data/ResourceGroup.java
+++ b/pulsar-client-admin-api/src/main/java/org/apache/pulsar/common/policies/data/ResourceGroup.java
@@ -22,8 +22,8 @@
 
 @Data
 public class ResourceGroup {
-    private int publishRateInMsgs = -1;
-    private long publishRateInBytes = -1;
-    private int dispatchRateInMsgs = -1;
-    private long dispatchRateInBytes = -1;
+    private Integer publishRateInMsgs;
+    private Long publishRateInBytes;
+    private Integer dispatchRateInMsgs;
+    private Long dispatchRateInBytes;
 }
diff --git a/pulsar-client-tools/src/main/java/org/apache/pulsar/admin/cli/CmdResourceGroups.java b/pulsar-client-tools/src/main/java/org/apache/pulsar/admin/cli/CmdResourceGroups.java
index 8d5fa97..afc9fc1 100644
--- a/pulsar-client-tools/src/main/java/org/apache/pulsar/admin/cli/CmdResourceGroups.java
+++ b/pulsar-client-tools/src/main/java/org/apache/pulsar/admin/cli/CmdResourceGroups.java
@@ -55,23 +55,23 @@
         @Parameter(names = { "--msg-publish-rate",
                 "-mp" }, description = "message-publish-rate "
                 + "(default -1 will be overwrite if not passed)", required = false)
-        private int publishRateInMsgs = -1;
+        private Integer publishRateInMsgs;
 
         @Parameter(names = { "--byte-publish-rate",
                 "-bp" }, description = "byte-publish-rate "
                 + "(default -1 will be overwrite if not passed)", required = false)
-        private long publishRateInBytes = -1;
+        private Long publishRateInBytes;
 
 
         @Parameter(names = { "--msg-dispatch-rate",
                 "-md" }, description = "message-dispatch-rate "
                 + "(default -1 will be overwrite if not passed)", required = false)
-        private int dispatchRateInMsgs = -1;
+        private Integer dispatchRateInMsgs;
 
         @Parameter(names = { "--byte-dispatch-rate",
                 "-bd" }, description = "byte-dispatch-rate "
                 + "(default -1 will be overwrite if not passed)", required = false)
-        private long dispatchRateInBytes = -1;
+        private Long dispatchRateInBytes;
 
         @Override
         void run() throws PulsarAdminException {
@@ -92,25 +92,21 @@
         private java.util.List<String> params;
 
         @Parameter(names = { "--msg-publish-rate",
-                "-mp" }, description = "message-publish-rate "
-                + "(default -1 will be overwrite if not passed)", required = false)
-        private int publishRateInMsgs = -1;
+                "-mp" }, description = "message-publish-rate ", required = false)
+        private Integer publishRateInMsgs;
 
         @Parameter(names = { "--byte-publish-rate",
-                "-bp" }, description = "byte-publish-rate "
-                + "(default -1 will be overwrite if not passed)", required = false)
-        private long publishRateInBytes = -1;
+                "-bp" }, description = "byte-publish-rate ", required = false)
+        private Long publishRateInBytes;
 
 
         @Parameter(names = { "--msg-dispatch-rate",
-                "-md" }, description = "message-dispatch-rate "
-                + "(default -1 will be overwrite if not passed)", required = false)
-        private int dispatchRateInMsgs = -1;
+                "-md" }, description = "message-dispatch-rate ", required = false)
+        private Integer dispatchRateInMsgs;
 
         @Parameter(names = { "--byte-dispatch-rate",
-                "-bd" }, description = "byte-dispatch-rate "
-                + "(default -1 will be overwrite if not passed)", required = false)
-        private long dispatchRateInBytes = -1;
+                "-bd" }, description = "byte-dispatch-rate ", required = false)
+        private Long dispatchRateInBytes;
 
         @Override
         void run() throws PulsarAdminException {
