{"record":{"id":"66ed27553e479d35","repo":"quickwit-oss/quickwit","slug":"failed-to-parse-kafka-client-parameters-client-p-66ed27","errorCode":null,"errorMessage":"failed to parse Kafka client parameters. `client_params.{}` must be a boolean, number, or string","messagePattern":"failed to parse Kafka client parameters\\. `client_params\\.(.+?)` must be a boolean, number, or string","errorType":"validation","errorClass":null,"httpStatus":null,"severity":"error","filePath":"quickwit/quickwit-indexing/src/source/kafka_source.rs","lineNumber":721,"sourceCode":"        ),\n    };\n    Ok(log_level)\n}\n\nfn parse_client_params(client_params: JsonValue) -> anyhow::Result<ClientConfig> {\n    let params = if let JsonValue::Object(params) = client_params {\n        params\n    } else {\n        bail!(\"failed to parse Kafka client parameters. `client_params` must be a JSON object\");\n    };\n    let mut client_config = ClientConfig::new();\n    for (key, value_json) in params {\n        let value = match value_json {\n            JsonValue::Bool(value_bool) => value_bool.to_string(),\n            JsonValue::Number(value_number) => value_number.to_string(),\n            JsonValue::String(value_string) => value_string,\n            JsonValue::Null => continue,\n            JsonValue::Array(_) | JsonValue::Object(_) => bail!(\n                \"failed to parse Kafka client parameters. `client_params.{}` must be a boolean, \\\n                 number, or string\",\n                key\n            ),\n        };\n        client_config.set(key, value);\n    }\n    Ok(client_config)\n}\n\n/// Returns the message payload as a `Bytes` object if it exists and is not empty.\nfn message_payload_to_doc(message: &BorrowedMessage) -> Option<Bytes> {\n    match message.payload() {\n        Some(payload) if !payload.is_empty() => {\n            let doc = Bytes::from(payload.to_vec());\n            return Some(doc);\n        }\n        Some(_) => debug!(","sourceCodeStart":703,"sourceCodeEnd":739,"githubUrl":"https://github.com/quickwit-oss/quickwit/blob/a39730c5cdcd1a4fe798403737ae293999ea21f8/quickwit/quickwit-indexing/src/source/kafka_source.rs#L703-L739","documentation":"Within a `client_params` object, each value must be a JSON boolean, number, string, or null (null skips the key). Arrays and objects cannot be converted to librdkafka settings, so `parse_client_params` bails naming the offending key.","triggerScenarios":"`create_consumer` or `check_connectivity` processes a `client_params` entry whose value is a JSON array or object, e.g. `\"ssl.ca\": [...]`.","commonSituations":"Nested config structures pasted from other tools; values like lists of brokers (`\"bootstrap.servers\": [\"b1:9092\"]`) instead of comma-separated strings.","solutions":["Flatten the offending key's value to a scalar string (librdkafka convention: comma-separated lists).","Remove keys with array/object values that librdkafka does not need.","Validate `client_params` values are only bool/number/string/null before applying the source config."],"exampleFix":"// before\n\"client_params\": { \"bootstrap.servers\": [\"b1:9092\", \"b2:9092\"] }\n// after\n\"client_params\": { \"bootstrap.servers\": \"b1:9092,b2:9092\" }","handlingStrategy":"validation","validationCode":"// JS\nfor (const [k, v] of Object.entries(params.client_params)) {\n  if (!(typeof v === 'boolean' || typeof v === 'number' || typeof v === 'string' || v === null)) throw new Error(`client_params.${k} must be scalar`);\n}","typeGuard":"const isScalar = (v) => v === null || ['boolean','number','string'].includes(typeof v);","tryCatchPattern":null,"preventionTips":["Use comma-separated strings for list-valued librdkafka settings.","Lint client_params values to scalars before submitting source configs.","Never paste nested structures from other tools into client_params."],"tags":["kafka","json","invalid-argument-value","configuration"],"backgroundTag":"invalid-config-value","analyzedSha":"a39730c5cdcd1a4fe798403737ae293999ea21f8","analyzedAt":"2026-09-08T13:19:37.784Z","contentChangedAt":"2026-09-08T13:19:37.784Z","schemaVersion":2},"datasetVersion":"2026-09-14T16:17:12.679Z"}