{"record":{"id":"3e00469f5a5d8bba","repo":"apache/kafka","slug":"the-configured-group-id-should-not-be-an-empty-str","errorCode":null,"errorMessage":"The configured group.id should not be an empty string or whitespace.","messagePattern":"The configured group\\.id should not be an empty string or whitespace\\.","errorType":"validation","errorClass":"InvalidGroupIdException","httpStatus":null,"severity":"error","filePath":"clients/src/main/java/org/apache/kafka/clients/consumer/internals/AsyncKafkaConsumer.java","lineNumber":842,"sourceCode":"\n    private Optional<ConsumerGroupMetadata> initializeGroupMetadata(final ConsumerConfig config,\n                                                                    final GroupRebalanceConfig groupRebalanceConfig) {\n        final Optional<ConsumerGroupMetadata> groupMetadata = initializeGroupMetadata(\n            groupRebalanceConfig.groupId,\n            groupRebalanceConfig.groupInstanceId\n        );\n        if (groupMetadata.isEmpty()) {\n            config.ignore(ConsumerConfig.AUTO_COMMIT_INTERVAL_MS_CONFIG);\n            config.ignore(THROW_ON_FETCH_STABLE_OFFSET_UNSUPPORTED);\n        }\n        return groupMetadata;\n    }\n\n    private Optional<ConsumerGroupMetadata> initializeGroupMetadata(final String groupId,\n                                                                    final Optional<String> groupInstanceId) {\n        if (groupId != null) {\n            if (groupId.isEmpty()) {\n                throw new InvalidGroupIdException(\"The configured \" + ConsumerConfig.GROUP_ID_CONFIG\n                    + \" should not be an empty string or whitespace.\");\n            } else {\n                return Optional.of(initializeConsumerGroupMetadata(groupId, groupInstanceId));\n            }\n        }\n        return Optional.empty();\n    }\n\n    @SuppressWarnings(\"removal\")\n    private ConsumerGroupMetadata initializeConsumerGroupMetadata(final String groupId,\n                                                                  final Optional<String> groupInstanceId) {\n        return new ConsumerGroupMetadata(\n            groupId,\n            JoinGroupRequest.UNKNOWN_GENERATION_ID,\n            JoinGroupRequest.UNKNOWN_MEMBER_ID,\n            groupInstanceId\n        );\n    }","sourceCodeStart":824,"sourceCodeEnd":860,"githubUrl":"https://github.com/apache/kafka/blob/996fb4585aa1bcc8980b0e1b8d6b168b986cd979/clients/src/main/java/org/apache/kafka/clients/consumer/internals/AsyncKafkaConsumer.java#L824-L860","documentation":"AsyncKafkaConsumer.initializeGroupMetadata deliberately distinguishes null group.id (allowed - supports standalone/no-group consumers) from an empty/whitespace string, which is rejected with InvalidGroupIdException. An empty group id would otherwise create a group whose name cannot be addressed for admin operations or rebalances.","triggerScenarios":"Constructing KafkaConsumer with group.id set to \"\" (empty) or a whitespace-only string - typically because a properties file or env var resolved to an empty value.","commonSituations":"group.id sourced from an unset env var (System.getenv returns null) that a wrapper defaulted to \"\"; Spring/Quarkus config binding an empty placeholder; YAML/properties with `group.id=` (no value).","solutions":["Provide a non-empty group.id, or remove the key entirely to operate without a group.","If group.id comes from configuration/env, validate it is non-blank before constructing the consumer and fail fast with a clear message.","Use Objects.requireNonNullElseGet to fall back to a concrete id rather than \"\" when the source is unset."],"exampleFix":"// before\nprops.put(ConsumerConfig.GROUP_ID_CONFIG, System.getenv().getOrDefault(\"KAFKA_GROUP\", \"\"));\nnew KafkaConsumer<>(props); // -> InvalidGroupIdException when env unset\n\n// after\nString gid = System.getenv(\"KAFKA_GROUP\");\nif (gid != null && !gid.isBlank()) {\n    props.put(ConsumerConfig.GROUP_ID_CONFIG, gid);\n}\nnew KafkaConsumer<>(props);","handlingStrategy":"validation","validationCode":"String gid = props.getProperty(ConsumerConfig.GROUP_ID_CONFIG);\nif (gid != null && gid.trim().isEmpty()) {\n    throw new IllegalArgumentException(ConsumerConfig.GROUP_ID_CONFIG + \" must be non-blank or omitted\");\n}","typeGuard":"null","tryCatchPattern":"try { new KafkaConsumer<>(props); }\ncatch (InvalidGroupIdException e) { /* unset or fix group.id */ props.remove(ConsumerConfig.GROUP_ID_CONFIG); }","preventionTips":["Reject blank group.id at your config-loading layer before it reaches Kafka.","Distinguish 'no group' (omit the key) from 'a group' (concrete non-blank name)."],"tags":["consumer","group-id","config","validation","kafka-clients"],"backgroundTag":null,"analyzedSha":"996fb4585aa1bcc8980b0e1b8d6b168b986cd979","analyzedAt":"2026-08-11T22:03:28.655Z","contentChangedAt":null,"schemaVersion":2},"datasetVersion":"2026-09-23T08:17:48.524Z"}