{"record":{"id":"f0f05850e997f17d","repo":"risingwavelabs/risingwave","slug":"no-available-private-link-endpoints-for-kafka-brok","errorCode":null,"errorMessage":"No available private link endpoints for Kafka broker {}","messagePattern":"No available private link endpoints for Kafka broker (.+?)","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"src/connector/src/source/kafka/private_link.rs","lineNumber":162,"sourceCode":"        // if it is a string, rewrite all broker addresses to the same endpoint\n        // eg. privatelink.endpoint='some_url' ==> broker1:9092 -> some_url:9092, broker2:9093 -> some_url:9093\n        // if it is a json array, rewrite each broker address to the corresponding endpoint\n        // eg. privatelink.endpoint = '[{\"host\": \"aaaa\"}, {\"host\": \"bbbb\"}, {\"host\": \"cccc\"}]'\n        // ==> broker1:9092 -> aaaa:9092, broker2:9093 -> bbbb:9093, broker3:9094 -> cccc:9094\n        handle_privatelink_endpoint(\n            &endpoint,\n            &mut broker_rewrite_map,\n            &link_targets,\n            &broker_addrs,\n        )?;\n    } else {\n        if svc.is_none() {\n            bail!(\"PrivateLink endpoint not found\");\n        }\n        let svc = svc.unwrap();\n        for (link, broker) in link_targets.iter().zip_eq_fast(broker_addrs.into_iter()) {\n            if svc.dns_entries.is_empty() {\n                bail!(\n                    \"No available private link endpoints for Kafka broker {}\",\n                    broker\n                );\n            }\n            // rewrite the broker address to the dns name w/o az\n            // requires the NLB has enabled the cross-zone load balancing\n            broker_rewrite_map.insert(\n                broker.to_owned(),\n                format!(\"{}:{}\", svc.endpoint_dns_name, link.port),\n            );\n        }\n    }\n\n    // save private link dns names into source properties, which\n    // will be extracted into KafkaProperties\n    let json = serde_json::to_string(&broker_rewrite_map).map_err(|e| anyhow!(e))?;\n    with_options.insert(PRIVATE_LINK_BROKER_REWRITE_MAP_KEY.to_owned(), json);\n    Ok(())","sourceCodeStart":144,"sourceCodeEnd":180,"githubUrl":"https://github.com/risingwavelabs/risingwave/blob/6469eb736d691e8e9b8a419a57edd6429ca77417/src/connector/src/source/kafka/private_link.rs#L144-L180","documentation":"When rewriting each broker address through the PrivateLink DNS entries, the resolved service exists but has an empty `dns_entries` list — no usable endpoint name is available — so the rewrite for that broker fails with this error.","triggerScenarios":"In the multi-VPC PrivateLink branch, iterating `(link_target, broker)` pairs, `svc.dns_entries.is_empty()` is true for any broker: the VPC endpoint exists but exposes no DNS names (e.g. endpoint not fully provisioned or wrong endpoint supplied).","commonSituations":"VPC endpoint created but still provisioning; user passed an interface endpoint without DNS enabled; querying the wrong endpoint's service info; AWS API returned partial metadata transiently.","solutions":["Wait until the VPC endpoint is fully available and verify it has DNS names (`aws ec2 describe-vpc-endpoints`)","Use the correct endpoint whose service exposes DNS entries; enable private DNS / use the endpoint's DNS name","Re-run source creation after endpoint provisioning completes","Verify the endpoints JSON references the intended vpce IDs"],"exampleFix":null,"handlingStrategy":"retry","validationCode":"let eps = aws ec2 describe-vpc-endpoints --vpc-endpoint-ids ... ;\nif eps.empty_or_no_dns { return Err(\"endpoint has no DNS entries yet\"); }","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Wait for VPC endpoint to reach 'available' with DNS entries before creating the source","Enable DNS names on the endpoint service","Use the correct vpce ID in the endpoints JSON"],"tags":["kafka","aws","privatelink","dns","endpoint"],"backgroundTag":"empty-api-response","analyzedSha":"6469eb736d691e8e9b8a419a57edd6429ca77417","analyzedAt":"2026-09-11T21:06:21.487Z","contentChangedAt":"2026-09-11T21:06:21.487Z","schemaVersion":2},"datasetVersion":"2026-09-14T16:17:12.679Z"}