通过代理访问 Kafka:引导连接成功,但 broker 连接失败
说明为什么一次成功的 Kafka 引导连接并不能保证通过代理访问到所有已发现的 broker。
引导连接可能成功,而 Kafka 客户端仍然无法生产或消费。引导服务器帮助客户端发现集群;它们不一定是要连接的唯一端点。
broker 元数据中包含后续连接所使用的地址。如果这些名称或端口无法通过预期的代理路径访问,第一次连接成功并不能解决其余问题。
阅读对外公布的端点
将引导地址与客户端实际收到的 broker 地址进行比较。一个公共引导别名可能指向私有的公布名称,而转发一个本地端口并不会自动改写元数据中的每个地址。
还要确定客户端实现所支持的代理路径。Java 系统 SOCKS 属性并不能保证某个库基于 NIO 的传输会使用 JDK Socket 代理机制。请检查实际的 Kafka 客户端和网络集成,而不是假设每个 Java socket 都遵循相同的设置。
感知代理的客户端需要一条获准通往相关 broker 端点的路径。网络层面的安排则需要相应的可达性和名称解析。这是两种不同的设计,仅把代理列为引导服务器并不能提供其中任何一种。
将安全协议与认证设置分开处理。代理可以建立 TCP 路径,而 TLS 身份、SASL 认证或 broker 授权仍然可能失败。
诊断时,请记下是哪个端点失败,以及它来自静态配置还是返回的元数据。这种区分比反复更改一个本来就可到达的端点更能缩小问题范围。