{"id":"6a94b568c0e6b180","repo":"apache/kafka","slug":"cannot-be-set-when-using-a-share-group","errorCode":null,"errorMessage":"{} cannot be set when using a share group.","messagePattern":"(.+?) cannot be set when using a share group\\.","errorType":"validation","errorClass":"org.apache.kafka.common.config.ConfigException","httpStatus":null,"severity":"error","filePath":"clients/src/main/java/org/apache/kafka/clients/consumer/ShareConsumerConfig.java","lineNumber":72,"sourceCode":"    protected ShareConsumerConfig(Map<?, ?> props, boolean doLog) {\n        super(props, doLog);\n    }\n\n    @Override\n    protected Map<String, Object> preProcessParsedConfig(final Map<String, Object> parsedValues) {\n        checkUnsupportedConfigsPreProcess(parsedValues);\n        return parsedValues;\n    }\n\n    private void checkUnsupportedConfigsPreProcess(Map<String, Object> parsedValues) {\n        List<String> invalidConfigs = new ArrayList<>();\n        SHARE_GROUP_UNSUPPORTED_CONFIGS.forEach(configName -> {\n            if (parsedValues.containsKey(configName)) {\n                invalidConfigs.add(configName);\n            }\n        });\n        if (!invalidConfigs.isEmpty()) {\n            throw new ConfigException(String.join(\", \", invalidConfigs) +\n                    \" cannot be set when using a share group.\");\n        }\n    }\n\n    @Override\n    protected void checkUnsupportedConfigsPostProcess() {\n    }\n}\n","sourceCodeStart":54,"sourceCodeEnd":81,"githubUrl":"https://github.com/apache/kafka/blob/c31c9215e131f8c17e79f8901b48c13ee6aa8e7a/clients/src/main/java/org/apache/kafka/clients/consumer/ShareConsumerConfig.java#L54-L81","documentation":"ConfigException thrown by ShareConsumerConfig when any config key in SHARE_GROUP_UNSUPPORTED_CONFIGS is present while constructing a share-group consumer. Share groups use server-side acknowledgment instead of consumer-side assignment/commit, so these classic consumer options (auto.offset.reset, enable.auto.commit, group.instance.id, isolation.level, partition.assignment.strategy, interceptor.classes, session.timeout.ms, heartbeat.interval.ms, group.protocol, group.remote.assignor) are rejected up front.","triggerScenarios":"Building a KafkaConsumer in SHARE group protocol with any of the unsupported keys set in the Properties/Map; reusing a regular consumer config verbatim for a share consumer.","commonSituations":"Promoting an existing consumer config to share-group usage without pruning incompatible options; copy-pasted config from a non-share consumer tutorial; version mismatch where share-group support was added but legacy keys were left in.","solutions":["Remove the listed keys from the share consumer config (auto.offset.reset, enable.auto.commit, group.instance.id, isolation.level, partition.assignment.strategy, interceptor.classes, session.timeout.ms, heartbeat.interval.ms, group.protocol, group.remote.assignor).","Keep a separate config template for share consumers vs classic consumers.","If the same Properties object must be shared, strip unsupported keys before constructing the share consumer."],"exampleFix":"// before\nprops.put(ConsumerConfig.ENABLE_AUTO_COMMIT_CONFIG, \"true\");\nprops.put(ConsumerConfig.PARTITION_ASSIGNMENT_STRATEGY_CONFIG, \"org.apache.kafka.clients.consumer.CooperativeStickyAssignor\");\nprops.put(ConsumerConfig.GROUP_PROTOCOL_CONFIG, \"consumer\");\ntry (KafkaConsumer<Void, Void> c = new KafkaConsumer<>(props)) { ... } // share group\n\n// after\nprops.remove(ConsumerConfig.ENABLE_AUTO_COMMIT_CONFIG);\nprops.remove(ConsumerConfig.PARTITION_ASSIGNMENT_STRATEGY_CONFIG);\nprops.remove(ConsumerConfig.GROUP_PROTOCOL_CONFIG);\ntry (KafkaConsumer<Void, Void> c = new KafkaConsumer<>(props)) { ... }","handlingStrategy":"validation","validationCode":"// Filter out share-group-incompatible keys before constructing ShareConsumer / ShareConsumerConfig\nSet<String> SHARE_GROUP_UNSUPPORTED = Set.of(\n    ConsumerConfig.GROUP_ID_CONFIG,\n    ConsumerConfig.GROUP_INSTANCE_ID_CONFIG,\n    ConsumerConfig.PARTITION_ASSIGNMENT_STRATEGY_CONFIG,\n    ConsumerConfig.AUTO_OFFSET_RESET_CONFIG,\n    ConsumerConfig.ENABLE_AUTO_COMMIT_CONFIG,\n    ConsumerConfig.AUTO_COMMIT_INTERVAL_MS_CONFIG\n);\nMap<String, Object> safeProps = new HashMap<>(props);\nList<String> offending = SHARE_GROUP_UNSUPPORTED.stream()\n    .filter(safeProps::containsKey).collect(Collectors.toList());\nif (!offending.isEmpty()) {\n    throw new ConfigException(offending + \" cannot be set when using a share group.\");\n}\nnew KafkaShareConsumer<>(safeProps, keyDeser, valDeser);","typeGuard":null,"tryCatchPattern":"try {\n    new KafkaShareConsumer<>(props, keyDeser, valDeser);\n} catch (ConfigException e) {\n    if (e.getMessage() != null && e.getMessage().contains(\"cannot be set when using a share group\")) {\n        // remove the offending keys listed in the message and retry construction\n    }\n    throw e;\n}","preventionTips":["Do not reuse a regular KafkaConsumer props map for a share consumer — keep a separate share-group props template.","Maintain a unit test that asserts no share-unsupported key is present in the share-consumer config map.","When migrating to share groups, audit existing config files for group.id, partition.assignment.strategy, enable.auto.commit, etc."],"tags":["consumer","share-group","configuration","configexception"],"analyzedSha":"c31c9215e131f8c17e79f8901b48c13ee6aa8e7a","analyzedAt":"2026-08-03T12:34:05.770Z","schemaVersion":2}