listeners 와 advertised.listeners 차이

server.properties 에서 설정할 수 있는 서버의 여러 프로퍼티들 중에는 listenersadvertised.listeners처럼 비슷해 보이는 두 속성이 있다.

이 둘은 모두 리스너이름://IP:PORT 형식의 값을, 콤마로 구분하여 1개 이상 갖는데, 이들 사이에는 중요한 차이점이 있다.


listeners

listeners는 카프카 브로커가 내부적으로 바인딩하는 엔드포인트이다.

즉, 브로커들은 설정한 listeners 값을 가지고 클러스터 내부에서 서로 통신하면서 주키퍼에 자신을 등록시킨다.

머신의 호스트 OS 위에 브로커가 직접 설치되는 경우, 이러한 엔드포인트는 단순히 해당 호스트의 주소이다.

그러나 클러스터가 클라우드 상에 올라가거나, 브로커가 다른 내부적인 네트워크에 속하는 등 네트워크 환경이 복잡해질 경우, 엔드포인트들을 구분할 필요가 있다.


advertised.listeners

advertised.listeners 는 브로커에 외부 클라이언트가, 즉 프로듀서와 컨슈머가 접근할 수 있는 엔드포인트이다.

따로 설정하지 않을 경우 디폴트로 listeners 의 값이 적용된다.

브로커들은 설정한 advertised.listeners 값을 주키퍼에 저장해놓고, 외부 호스트가 카프카 클러스터에 접근하려고 할 때 해당 엔드포인트를 반환함으로써 통신할 수 있게 한다.

listeners와 다르게 0.0.0.0과 같은 메타주소를 사용하여 바인딩시킬 수 없다.

또한 내부적으로 사용하는 암호화/인증 방식에 대한 프로토콜은 단순한 PLAINTEXT 로 설정하고, 외부와 통신하기 위한 프로토콜을 SASL_SSL 로 설정하는 등의 구분도 가능하다.


직접 클러스터를 구축해보면서 알아가는 것이 이해하는데 훨씬 더 도움이 많이 된다.