부트스트랩 연결이 성공해도 Kafka 클라이언트가 여전히 프로듀스나 컨슘을 하지 못할 수 있습니다. 부트스트랩 서버는 클라이언트가 클러스터를 발견하도록 돕는 것이며, 클라이언트가 연결할 유일한 엔드포인트라는 보장은 없습니다.

브로커 메타데이터에는 이후 연결에 사용되는 주소가 들어 있습니다. 그 이름이나 포트가 의도한 프록시 경로로 도달할 수 없다면, 첫 번째 성공한 연결이 나머지 작업을 해결하지 못합니다.

광고된 엔드포인트를 읽어라

부트스트랩 주소를 클라이언트가 실제로 받는 브로커 주소와 비교하세요. 공용 부트스트랩 별칭이 사설 광고 이름으로 이어질 수 있으며, 로컬 포트 하나를 전달한다고 해서 메타데이터의 모든 주소가 자동으로 다시 쓰이지는 않습니다.

클라이언트 구현이 지원하는 프록시 경로도 확인하세요. Java 시스템 SOCKS 속성이 있다고 해서 라이브러리의 NIO 기반 전송이 JDK Socket 프록시 메커니즘을 사용한다는 보장은 없습니다. 모든 Java 소켓이 같은 설정을 존중한다고 가정하지 말고 실제 Kafka 클라이언트와 네트워크 통합을 확인하세요.

프록시를 인식하는 클라이언트에는 관련 브로커 엔드포인트로 가는 허용된 경로가 필요합니다. 네트워크 수준 구성에는 그에 맞는 도달성과 이름 확인이 필요합니다. 이 둘은 서로 다른 설계이며, 프록시를 부트스트랩 서버로 나열하는 것만으로는 어느 것도 제공되지 않습니다.

보안 프로토콜과 인증 설정은 분리해 두세요. 프록시가 TCP 경로를 설정해도 TLS ID, SASL 인증 또는 브로커 권한 부여는 여전히 실패할 수 있습니다.

진단을 위해 어느 엔드포인트가 실패했는지, 그리고 그것이 정적 구성에서 왔는지 반환된 메타데이터에서 왔는지 기록하세요. 그 구분이 이미 도달 가능했던 엔드포인트를 반복해서 바꾸는 것보다 문제를 훨씬 더 좁혀 줍니다.

관련 글