When a new connector configuration for the MongoDB sink connector is validated using Connect, the MongoDB sink connector includes in the validation output the `topic` property (with a value matching the `topics` property) even though no such property is defined in the ConfigDef and is not even included in the connector configuration.
For example, validate a connector configuration as follows:
curl -X PUT -H "Content-Type: application/json" --data @mongo-sink.json http://localhost:8083/connector-plugins/MongoSinkConnector/config/validate
where the mongo-sink.json file contains:
{ "name": "my-mongo-sink", "connector.class":"com.mongodb.kafka.connect.MongoSinkConnector", "tasks.max":1, "connection.uri":"mongodb+srv://<user>:<password>@cluster0.abcde.mongodb.net/<dbname>?retryWrites=true&w=majority", "database":"sink-test", "collection":"docs", "topics":"connect-offsets", "batch.size":0, "document.id.strategy": "com.mongodb.kafka.connect.sink.processor.id.strategy.KafkaMetaDataStrategy", "value.converter":"org.apache.kafka.connect.json.JsonConverter", "key.converter": "org.apache.kafka.connect.storage.StringConverter" }
Note that this configuration specified a `topics` (plural) property, but did not specify a `topic` (singular) property. Connect requires either sink connector configurations to specify the topics to be consumed by the connector via a `topics` or `topics.regex` property, but not both.
The result of the Connect REST API validation is the following JSON:
{ "name": "com.mongodb.kafka.connect.MongoSinkConnector", "error_count": 0, "groups": [ "Common", "Transforms", "Predicates", "Error Handling", "Connection", "Overrides", "Namespace", "Writes", "Post Processing", "Id Strategies", "Errors", "Change Data Capture" ], "configs": [ { "definition": null, "value": { "name": "topic", "value": "connect-offsets", "recommended_values": [], "errors": [ "Configuration is not defined: topic" ], "visible": true } }, ... { "definition": { "name": "topics", "type": "LIST", "required": false, "default_value": "", "importance": "HIGH", "documentation": "A list of kafka topics for the sink connector, separated by commas", "group": "Connection", "width": "MEDIUM", "display_name": "The Kafka topics", "dependents": [], "order": 1 }, "value": { "name": "topics", "value": "connect-offsets", "recommended_values": [], "errors": [], "visible": true } }, ... ] }
AK Connect is currently marking this as an error because it is not defined in the connector's ConfigDef, but that's a bug (https://issues.apache.org/jira/browse/KAFKA-10600).
Why does the MongoDB sink connector include in its validation output a `topic` configuration property when it is not required and not even supplied by the user? It's even stranger that the value of this `topic` property matches the value of the user-supplied `topics` property.
Perhaps the connector at one time looked for the `topic` property, and keeping that helps maintain backward compatibility. But if this is the only reason, then perhapsĀ this should be transparent to users and the `MongoSinkConnector.validate(...)` method should not include `topic` in its response.
- related to
-
KAFKA-195 Sink don't validate topic config when using topics.regex
- Closed