This is an automated email from the ASF dual-hosted git repository.
schofielaj pushed a commit to branch trunk
in repository https://gitbox.apache.org/repos/asf/kafka.git
The following commit(s) were added to refs/heads/trunk by this push:
new 4b9075b5065 KAFKA-19653: Improve metavariable names in usage messages
(#20438)
4b9075b5065 is described below
commit 4b9075b50658bfc86da35abac932c1196e2613cf
Author: Andrew Schofield <[email protected]>
AuthorDate: Wed Sep 3 15:38:42 2025 +0100
KAFKA-19653: Improve metavariable names in usage messages (#20438)
This trivial PR improves the so-called metavariable names in the usage
messages of the verifiable producer/consumer command-line tools. These
are the names of the replacement variables that appear solely in the
usage messages.
Verifiable producer (before):
```
usage: verifiable-producer [-h] --topic TOPIC
[--max-messages MAX-MESSAGES] [--throughput THROUGHPUT]
[--acks ACKS] [--producer.config CONFIG_FILE]
[--message-create-time CREATETIME] [--value-prefix VALUE-PREFIX]
[--repeating-keys REPEATING-KEYS] [--command-config CONFIG_FILE]
--bootstrap-server HOST1:PORT1[,HOST2:PORT2[...]]
```
(after)
```
usage: verifiable-producer [-h] --topic TOPIC
[--max-messages MAX-MESSAGES] [--throughput THROUGHPUT]
[--acks ACKS] [--producer.config CONFIG-FILE]
[--message-create-time CREATE-TIME] [--value-prefix VALUE-PREFIX]
[--repeating-keys REPEATING-KEYS] [--command-config CONFIG-FILE]
--bootstrap-server HOST1:PORT1[,HOST2:PORT2[...]]
```
Verifiable consumer (before):
```
usage: verifiable-consumer [-h] --topic TOPIC
[--group-protocol GROUP_PROTOCOL]
[--group-remote-assignor GROUP_REMOTE_ASSIGNOR]
--group-id GROUP_ID
[--group-instance-id GROUP_INSTANCE_ID]
[--max-messages MAX-MESSAGES]
[--session-timeout TIMEOUT_MS] [--verbose]
[--enable-autocommit] [--reset-policy RESETPOLICY]
[--assignment-strategy ASSIGNMENTSTRATEGY]
[--consumer.config CONFIG_FILE] [--command-config CONFIG_FILE]
--bootstrap-server HOST1:PORT1[,HOST2:PORT2[...]]
```
(after)
```
usage: verifiable-consumer [-h] --topic TOPIC
[--group-protocol GROUP-PROTOCOL]
[--group-remote-assignor GROUP-REMOTE-ASSIGNOR]
--group-id GROUP-ID
[--group-instance-id GROUP-INSTANCE-ID]
[--max-messages MAX-MESSAGES]
[--session-timeout TIMEOUT-MS] [--verbose]
[--enable-autocommit] [--reset-policy RESET-POLICY]
[--assignment-strategy ASSIGNMENT-STRATEGY]
[--consumer.config CONFIG-FILE] [--command-config CONFIG-FILE]
--bootstrap-server HOST1:PORT1[,HOST2:PORT2[...]]
```
Verifiable share consumer (before):
```
usage: verifiable-share-consumer
[-h] --topic TOPIC --group-id GROUP_ID
[--max-messages MAX-MESSAGES] [--verbose]
[--acknowledgement-mode ACKNOWLEDGEMENTMODE]
[--offset-reset-strategy OFFSETRESETSTRATEGY]
[--command-config CONFIG_FILE]
--bootstrap-server HOST1:PORT1[,HOST2:PORT2[...]]
```
(after):
```
usage: verifiable-share-consumer
[-h] --topic TOPIC --group-id GROUP-ID
[--max-messages MAX-MESSAGES] [--verbose]
[--acknowledgement-mode ACKNOWLEDGEMENT-MODE]
[--offset-reset-strategy OFFSET-RESET-STRATEGY]
[--command-config CONFIG-FILE]
--bootstrap-server HOST1:PORT1[,HOST2:PORT2[...]]
```
Reviewers: Kirk True <[email protected]>, Ken Huang
<[email protected]>, Lianet Magrans <[email protected]>
---
.../org/apache/kafka/tools/VerifiableConsumer.java | 180 +++++++++++----------
.../org/apache/kafka/tools/VerifiableProducer.java | 98 +++++------
.../kafka/tools/VerifiableShareConsumer.java | 14 +-
3 files changed, 148 insertions(+), 144 deletions(-)
diff --git a/tools/src/main/java/org/apache/kafka/tools/VerifiableConsumer.java
b/tools/src/main/java/org/apache/kafka/tools/VerifiableConsumer.java
index 1ecea5331dd..c639e3457a3 100644
--- a/tools/src/main/java/org/apache/kafka/tools/VerifiableConsumer.java
+++ b/tools/src/main/java/org/apache/kafka/tools/VerifiableConsumer.java
@@ -505,123 +505,125 @@ public class VerifiableConsumer implements Closeable,
OffsetCommitCallback, Cons
private static ArgumentParser argParser() {
ArgumentParser parser = ArgumentParsers
- .newArgumentParser("verifiable-consumer")
- .defaultHelp(true)
- .description("This tool consumes messages from a specific
topic and emits consumer events (e.g. group rebalances, received messages, and
offsets committed) as JSON objects to STDOUT.");
+ .newArgumentParser("verifiable-consumer")
+ .defaultHelp(true)
+ .description("This tool consumes messages from a specific topic
and emits consumer events (e.g. group rebalances, received messages, and
offsets committed) as JSON objects to STDOUT.");
MutuallyExclusiveGroup connectionGroup =
parser.addMutuallyExclusiveGroup("Connection Group")
- .description("Group of arguments for connection to brokers")
- .required(true);
+ .description("Group of arguments for connection to brokers")
+ .required(true);
connectionGroup.addArgument("--bootstrap-server")
- .action(store())
- .required(true)
- .type(String.class)
- .metavar("HOST1:PORT1[,HOST2:PORT2[...]]")
- .dest("bootstrapServer")
- .help("The server(s) to connect to. Comma-separated list of
Kafka brokers in the form HOST1:PORT1,HOST2:PORT2,...");
+ .action(store())
+ .required(true)
+ .type(String.class)
+ .dest("bootstrapServer")
+ .metavar("HOST1:PORT1[,HOST2:PORT2[...]]")
+ .help("The server(s) to connect to. Comma-separated list of Kafka
brokers in the form HOST1:PORT1,HOST2:PORT2,...");
parser.addArgument("--topic")
- .action(store())
- .required(true)
- .type(String.class)
- .metavar("TOPIC")
- .help("Consumes messages from this topic.");
+ .action(store())
+ .required(true)
+ .type(String.class)
+ .metavar("TOPIC")
+ .help("Consumes messages from this topic.");
parser.addArgument("--group-protocol")
- .action(store())
- .required(false)
- .type(String.class)
- .setDefault(ConsumerConfig.DEFAULT_GROUP_PROTOCOL)
- .metavar("GROUP_PROTOCOL")
- .dest("groupProtocol")
- .help(String.format("Group protocol (must be one of %s)",
Arrays.stream(GroupProtocol.values())
- .map(Object::toString).collect(Collectors.joining(",
"))));
+ .action(store())
+ .required(false)
+ .type(String.class)
+ .setDefault(ConsumerConfig.DEFAULT_GROUP_PROTOCOL)
+ .dest("groupProtocol")
+ .metavar("GROUP-PROTOCOL")
+ .help(String.format("Group protocol (must be one of %s)",
Arrays.stream(GroupProtocol.values())
+ .map(Object::toString).collect(Collectors.joining(", "))));
parser.addArgument("--group-remote-assignor")
- .action(store())
- .required(false)
- .type(String.class)
- .setDefault(ConsumerConfig.DEFAULT_GROUP_REMOTE_ASSIGNOR)
- .metavar("GROUP_REMOTE_ASSIGNOR")
- .dest("groupRemoteAssignor")
- .help(String.format("Group remote assignor; only used if the
group protocol is %s", GroupProtocol.CONSUMER.name()));
+ .action(store())
+ .required(false)
+ .type(String.class)
+ .setDefault(ConsumerConfig.DEFAULT_GROUP_REMOTE_ASSIGNOR)
+ .dest("groupRemoteAssignor")
+ .metavar("GROUP-REMOTE-ASSIGNOR")
+ .help(String.format("Group remote assignor; only used if the group
protocol is %s", GroupProtocol.CONSUMER.name()));
parser.addArgument("--group-id")
- .action(store())
- .required(true)
- .type(String.class)
- .metavar("GROUP_ID")
- .dest("groupId")
- .help("The groupId shared among members of the consumer
group");
+ .action(store())
+ .required(true)
+ .type(String.class)
+ .dest("groupId")
+ .metavar("GROUP-ID")
+ .help("The group id of the consumer group");
parser.addArgument("--group-instance-id")
- .action(store())
- .required(false)
- .type(String.class)
- .metavar("GROUP_INSTANCE_ID")
- .dest("groupInstanceId")
- .help("A unique identifier of the consumer instance");
+ .action(store())
+ .required(false)
+ .type(String.class)
+ .dest("groupInstanceId")
+ .metavar("GROUP-INSTANCE-ID")
+ .help("A unique identifier of the consumer instance");
parser.addArgument("--max-messages")
- .action(store())
- .required(false)
- .type(Integer.class)
- .setDefault(-1)
- .metavar("MAX-MESSAGES")
- .dest("maxMessages")
- .help("Consume this many messages. If -1 (the default), the
consumer will consume until the process is killed externally");
+ .action(store())
+ .required(false)
+ .type(Integer.class)
+ .setDefault(-1)
+ .dest("maxMessages")
+ .metavar("MAX-MESSAGES")
+ .help("Consume this many messages. If -1 (the default), the
consumer will consume until the process is killed externally");
parser.addArgument("--session-timeout")
- .action(store())
- .required(false)
- .type(Integer.class)
- .metavar("TIMEOUT_MS")
- .dest("sessionTimeout")
- .help("Set the consumer's session timeout, note that this
configuration is not supported when group protocol is consumer");
+ .action(store())
+ .required(false)
+ .type(Integer.class)
+ .dest("sessionTimeout")
+ .metavar("TIMEOUT-MS")
+ .help("Set the consumer's session timeout, note that this
configuration is not supported when group protocol is consumer");
parser.addArgument("--verbose")
- .action(storeTrue())
- .type(Boolean.class)
- .metavar("VERBOSE")
- .help("Enable to log individual consumed records");
+ .action(storeTrue())
+ .type(Boolean.class)
+ .metavar("VERBOSE")
+ .help("Enable to log individual consumed records");
parser.addArgument("--enable-autocommit")
- .action(storeTrue())
- .type(Boolean.class)
- .metavar("ENABLE-AUTOCOMMIT")
- .dest("useAutoCommit")
- .help("Enable offset auto-commit on consumer");
+ .action(storeTrue())
+ .type(Boolean.class)
+ .dest("useAutoCommit")
+ .metavar("ENABLE-AUTOCOMMIT")
+ .help("Enable offset auto-commit on consumer");
parser.addArgument("--reset-policy")
- .action(store())
- .required(false)
- .setDefault("earliest")
- .type(String.class)
- .dest("resetPolicy")
- .help("Set reset policy (must be either 'earliest', 'latest',
or 'none')");
+ .action(store())
+ .required(false)
+ .setDefault("earliest")
+ .type(String.class)
+ .dest("resetPolicy")
+ .metavar("RESET-POLICY")
+ .help("Set reset policy (must be either 'earliest', 'latest', or
'none')");
parser.addArgument("--assignment-strategy")
- .action(store())
- .required(false)
- .setDefault(RangeAssignor.class.getName())
- .type(String.class)
- .dest("assignmentStrategy")
- .help(String.format("Set assignment strategy (e.g. %s); only
used if the group protocol is %s", RoundRobinAssignor.class.getName(),
GroupProtocol.CLASSIC.name()));
+ .action(store())
+ .required(false)
+ .setDefault(RangeAssignor.class.getName())
+ .type(String.class)
+ .dest("assignmentStrategy")
+ .metavar("ASSIGNMENT-STRATEGY")
+ .help(String.format("Set assignment strategy (e.g. %s); only used
if the group protocol is %s", RoundRobinAssignor.class.getName(),
GroupProtocol.CLASSIC.name()));
parser.addArgument("--consumer.config")
- .action(store())
- .required(false)
- .type(String.class)
- .metavar("CONFIG-FILE")
- .help("(DEPRECATED) Consumer config properties file" +
- "This option will be removed in a future version. Use
--command-config instead");
+ .action(store())
+ .required(false)
+ .type(String.class)
+ .metavar("CONFIG-FILE")
+ .help("(DEPRECATED) Consumer config properties file. " +
+ "This option will be removed in a future version. Use
--command-config instead");
parser.addArgument("--command-config")
- .action(store())
- .required(false)
- .type(String.class)
- .metavar("CONFIG-FILE")
- .dest("commandConfigFile")
- .help("Config properties file (config options shared with
command line parameters will be overridden).");
+ .action(store())
+ .required(false)
+ .type(String.class)
+ .metavar("CONFIG-FILE")
+ .dest("commandConfigFile")
+ .help("Config properties file (config options shared with command
line parameters will be overridden).");
return parser;
}
diff --git a/tools/src/main/java/org/apache/kafka/tools/VerifiableProducer.java
b/tools/src/main/java/org/apache/kafka/tools/VerifiableProducer.java
index bfbbb8a4854..db2d8817f50 100644
--- a/tools/src/main/java/org/apache/kafka/tools/VerifiableProducer.java
+++ b/tools/src/main/java/org/apache/kafka/tools/VerifiableProducer.java
@@ -110,69 +110,69 @@ public class VerifiableProducer implements AutoCloseable {
/** Get the command-line argument parser. */
private static ArgumentParser argParser() {
ArgumentParser parser = ArgumentParsers
- .newArgumentParser("verifiable-producer")
- .defaultHelp(true)
- .description("This tool produces increasing integers to the
specified topic and prints JSON metadata to stdout on each \"send\" request,
making externally visible which messages have been acked and which have not.");
+ .newArgumentParser("verifiable-producer")
+ .defaultHelp(true)
+ .description("This tool produces increasing integers to the
specified topic and prints JSON metadata to stdout on each \"send\" request,
making externally visible which messages have been acked and which have not.");
parser.addArgument("--topic")
- .action(store())
- .required(true)
- .type(String.class)
- .metavar("TOPIC")
- .help("Produce messages to this topic.");
+ .action(store())
+ .required(true)
+ .type(String.class)
+ .metavar("TOPIC")
+ .help("Produce messages to this topic.");
MutuallyExclusiveGroup connectionGroup =
parser.addMutuallyExclusiveGroup("Connection Group")
- .description("Group of arguments for connection to brokers")
- .required(true);
+ .description("Group of arguments for connection to brokers")
+ .required(true);
connectionGroup.addArgument("--bootstrap-server")
- .action(store())
- .required(false)
- .type(String.class)
- .metavar("HOST1:PORT1[,HOST2:PORT2[...]]")
- .dest("bootstrapServer")
- .help("REQUIRED: The server(s) to connect to. Comma-separated
list of Kafka brokers in the form HOST1:PORT1,HOST2:PORT2,...");
+ .action(store())
+ .required(false)
+ .type(String.class)
+ .dest("bootstrapServer")
+ .metavar("HOST1:PORT1[,HOST2:PORT2[...]]")
+ .help("REQUIRED: The server(s) to connect to. Comma-separated list
of Kafka brokers in the form HOST1:PORT1,HOST2:PORT2,...");
parser.addArgument("--max-messages")
- .action(store())
- .required(false)
- .setDefault(-1)
- .type(Integer.class)
- .metavar("MAX-MESSAGES")
- .dest("maxMessages")
- .help("Produce this many messages. If -1, produce messages
until the process is killed externally.");
+ .action(store())
+ .required(false)
+ .setDefault(-1)
+ .type(Integer.class)
+ .dest("maxMessages")
+ .metavar("MAX-MESSAGES")
+ .help("Produce this many messages. If -1, produce messages until
the process is killed externally.");
parser.addArgument("--throughput")
- .action(store())
- .required(false)
- .setDefault(-1)
- .type(Integer.class)
- .metavar("THROUGHPUT")
- .help("If set >= 0, throttle maximum message throughput to
*approximately* THROUGHPUT messages/sec.");
+ .action(store())
+ .required(false)
+ .setDefault(-1)
+ .type(Integer.class)
+ .metavar("THROUGHPUT")
+ .help("If set >= 0, throttle maximum message throughput to
*approximately* THROUGHPUT messages/sec.");
parser.addArgument("--acks")
- .action(store())
- .required(false)
- .setDefault(-1)
- .type(Integer.class)
- .choices(0, 1, -1)
- .metavar("ACKS")
- .help("Acks required on each produced message. See Kafka docs
on acks for details.");
+ .action(store())
+ .required(false)
+ .setDefault(-1)
+ .type(Integer.class)
+ .choices(0, 1, -1)
+ .metavar("ACKS")
+ .help("Acks required on each produced message. See Kafka docs on
acks for details.");
parser.addArgument("--producer.config")
- .action(store())
- .required(false)
- .type(String.class)
- .metavar("CONFIG-FILE")
- .help("(DEPRECATED) Producer config properties file. " +
- "This option will be removed in a future version. Use
--command-config instead.");
+ .action(store())
+ .required(false)
+ .type(String.class)
+ .metavar("CONFIG-FILE")
+ .help("(DEPRECATED) Producer config properties file. " +
+ "This option will be removed in a future version. Use
--command-config instead.");
parser.addArgument("--message-create-time")
- .action(store())
- .required(false)
- .setDefault(-1L)
- .type(Long.class)
- .metavar("CREATETIME")
- .dest("createTime")
- .help("Send messages with creation time starting at the
arguments value, in milliseconds since epoch");
+ .action(store())
+ .required(false)
+ .setDefault(-1L)
+ .type(Long.class)
+ .metavar("CREATE-TIME")
+ .dest("createTime")
+ .help("Send messages with creation time starting at the arguments
value, in milliseconds since epoch");
parser.addArgument("--value-prefix")
.action(store())
diff --git
a/tools/src/main/java/org/apache/kafka/tools/VerifiableShareConsumer.java
b/tools/src/main/java/org/apache/kafka/tools/VerifiableShareConsumer.java
index d83c1e44244..c2da3ed34d3 100644
--- a/tools/src/main/java/org/apache/kafka/tools/VerifiableShareConsumer.java
+++ b/tools/src/main/java/org/apache/kafka/tools/VerifiableShareConsumer.java
@@ -499,8 +499,8 @@ public class VerifiableShareConsumer implements Closeable,
AcknowledgementCommit
.action(store())
.required(true)
.type(String.class)
- .metavar("HOST1:PORT1[,HOST2:PORT2[...]]")
.dest("bootstrapServer")
+ .metavar("HOST1:PORT1[,HOST2:PORT2[...]]")
.help("The server(s) to connect to. Comma-separated list of Kafka
brokers in the form HOST1:PORT1,HOST2:PORT2,...");
parser.addArgument("--topic")
@@ -514,17 +514,17 @@ public class VerifiableShareConsumer implements
Closeable, AcknowledgementCommit
.action(store())
.required(true)
.type(String.class)
- .metavar("GROUP_ID")
.dest("groupId")
- .help("The groupId shared among members of the share group");
+ .metavar("GROUP-ID")
+ .help("The group id of the share group");
parser.addArgument("--max-messages")
.action(store())
.required(false)
.type(Integer.class)
.setDefault(-1)
- .metavar("MAX-MESSAGES")
.dest("maxMessages")
+ .metavar("MAX-MESSAGES")
.help("Consume this many messages. If -1 (the default), the share
consumers will consume until the process is killed externally");
parser.addArgument("--verbose")
@@ -539,6 +539,7 @@ public class VerifiableShareConsumer implements Closeable,
AcknowledgementCommit
.setDefault("auto")
.type(String.class)
.dest("acknowledgementMode")
+ .metavar("ACKNOWLEDGEMENT-MODE")
.help("Acknowledgement mode for the share consumers (must be
either 'auto', 'sync' or 'async')");
parser.addArgument("--offset-reset-strategy")
@@ -547,14 +548,15 @@ public class VerifiableShareConsumer implements
Closeable, AcknowledgementCommit
.setDefault("")
.type(String.class)
.dest("offsetResetStrategy")
- .help("Set share group reset strategy (must be either 'earliest'
or 'latest')");
+ .metavar("OFFSET-RESET-STRATEGY")
+ .help("Share group offset reset strategy (must be either
'earliest' or 'latest')");
parser.addArgument("--command-config")
.action(store())
.required(false)
.type(String.class)
.dest("commandConfig")
- .metavar("CONFIG_FILE")
+ .metavar("CONFIG-FILE")
.help("Config properties file (config options shared with command
line parameters will be overridden).");
return parser;