Camel代码订阅Kafka Topic后出现Node -1断开连接错误
针对本地Kafka连接正常、dev1环境连接失败,报错Node -1 disconnected、Canceled in-flight API_VERSIONS request、Bootstrap broker (id: -1 rack: null) disconnected的问题,可按以下步骤排查解决:
检查网络与端口可达性
用ping xxxx确认Broker地址可访问,再用telnet xxxx 9094或nc -zv xxxx 9094验证9094端口是否开放。如果不通,联系运维调整防火墙、安全组规则,允许你的机器IP访问目标Broker端口。核对Broker监听配置
dev1环境的Kafka Broker可能仅绑定了内网或localhost地址,导致外部无法连接。需要确认Broker的listeners和advertised.listeners配置,确保暴露了可路由的公网/内网地址,而非仅本地地址。补充SSL/TLS配置(若环境启用)
若dev1 Kafka启用了SSL加密,而你的连接参数缺少SSL配置,会直接导致连接失败。需添加以下关键参数:securityProtocol=SSL- 若需证书认证,额外配置
ssl.truststore.location、ssl.truststore.password等参数。
验证客户端与集群版本兼容性
Camel 3.2.0依赖的Kafka客户端版本可能与dev1集群版本不兼容,引发API_VERSIONS请求失败。可尝试升级Camel至3.x系列较新版本,或对照Kafka官方版本兼容矩阵确认客户端与集群版本匹配。Schema Registry连通性验证(辅助排查)
虽然核心问题在Broker连接,但也可通过curl xxxx:8081/subjects测试Schema Registry地址是否可达,排除额外依赖问题。
示例调整后的Camel配置(含SSL场景):
from("kafka:mytopic?brokers=xxxx:9094&groupId=xxxx&autoOffsetReset=latest&keyDeserializer=org.apache.kafka.common.serialization.StringDeserializer&specificAvroReader=true&valueDeserializer=io.confluent.kafka.serializers.KafkaAvroDeserializer&schemaRegistryURL=xxxx:8081&securityProtocol=SSL&ssl.truststore.location=/path/to/truststore.jks&ssl.truststore.password=yourpassword") .log("Message is : ${body}");
内容的提问来源于stack exchange,提问作者Aditya Kavathekar

