#11 클라이언트 메타데이터와 브로커 통신
📡 클라이언트 메타데이터와 브로커 통신
Kafka 클라이언트란? 🤔
Kafka 클라이언트는 Kafka 클러스터와 상호작용하여 데이터를 송수신하거나 명령을 내리는 역할을 한다. 대표적으로 프로듀서(Producer) 와 컨슈머(Consumer) 가 있는데, 프로듀서는 데이터를 생산하고 컨슈머는 데이터를 소비한다.
그런데 클라이언트가 Kafka 클러스터와 제대로 통신하려면 클러스터의 메타데이터(Metadata) 를 알아야 한다. 이 메타데이터를 기반으로 클라이언트는 적절한 브로커(Broker)와 통신할 수 있다.
🗂️ 클라이언트와 메타데이터
Kafka 클라이언트는 먼저 클러스터에 메타데이터 요청 을 보낸다. 이 요청에 대한 응답으로 Kafka 클러스터는 다음과 같은 정보를 반환한다.
- 리더 파티션(Leader Partition) 위치
- 브로커 정보
- 토픽과 파티션 정보
클라이언트는 이 정보를 활용해서 해당 파티션과 직접 통신하게 된다. 그런데 여기서 궁금한 점이 하나 생긴다. 메타데이터는 얼마나 자주 갱신될까? 🤔
⏳ 메타데이터 갱신 관련 설정
Kafka에서는 메타데이터를 갱신하는 두 가지 중요한 설정이 있다.
1️⃣ metadata.max.age.ms
- 메타데이터를 강제로 리프레시하는 간격을 설정한다.
- 기본값: 5분(300000ms)
- 즉, 클라이언트는 5분마다 새로운 메타데이터를 요청하게 된다.
2️⃣ metadata.max.idle.ms
- 프로듀서가 유휴 상태일 경우, 메타데이터를 캐시에 유지하는 기간을 설정한다.
- 기본값: 5분(300000ms)
- 예를 들어, 프로듀서가 특정 토픽으로 데이터를 보낸 후 지정한 시간이 지나면 강제로 메타데이터를 리프레시한다.
이 두 설정이 없다면, 클라이언트는 메타데이터를 갱신할 기회를 놓칠 수도 있다. 그런데 만약 메타데이터가 잘못되면 어떤 문제가 발생할까? 🤔
⚠️ 메타데이터 이슈와 예외 발생
Kafka에서 메타데이터가 정확하지 않으면 심각한 문제가 발생할 수 있다. 예를 들어, 리더 파티션의 위치가 잘못 입력되었을 경우 LEADER_NOT_AVAILABLE
예외가 발생한다.
이런 경우는 보통 다음과 같은 이유에서 발생할 수 있다:
- 브로커가 다운되었거나 리더가 변경됨 → 기존 메타데이터가 더 이상 유효하지 않음.
- 클라이언트가 메타데이터를 갱신하지 않음 → 오래된 메타데이터를 참조함.
- 네트워크 문제 → 클라이언트가 브로커로부터 최신 정보를 받지 못함.
결론적으로, Kafka 클라이언트가 안정적으로 동작하려면 주기적인 메타데이터 리프레시가 필수적 이다.
마무리 🎯
Kafka 클라이언트는 메타데이터를 기반으로 브로커와 통신하며, 이 메타데이터가 올바르게 관리되지 않으면 심각한 문제를 초래할 수 있다. 따라서 metadata.max.age.ms
및 metadata.max.idle.ms
설정을 적절하게 조정하는 것이 중요하다.