카프카 설치하면서 알게 된 내용 정리
내부 동작 원리와 용어 등
카프카 설치하면서 알게 된 내용 정리
들어가며: 설치 중 겪은 고군분투
카프카를 EC2에 직접 설치하며 맞닥뜨린 첫 번째 난관은 브로커 설정이었습니다.
아래처럼 listeners
와 advertised.listeners
를 sed로 수정할 때, 과연 이 두 설정이 어떤 차이를 만드는지 궁금해졌습니다.
1
2
3
# server.properties 수정 예시
sed -i 's|^#listeners=.*|listeners=PLAINTEXT://0.0.0.0:9092|' /opt/confluent/etc/kafka/server.properties
sed -i 's|^#advertised.listeners=.*|advertised.listeners=PLAINTEXT://'"$(curl -s http://169.254.169.254/latest/meta-data/public-ipv4)"':9092|' /opt/confluent/etc/kafka/server.properties
이제 이 다이어그램을 바탕으로, 각 설정이 어떤 역할을 하고 전체 흐름이 어떻게 흘러가는지 단계별로 살펴보겠습니다.
클러스터 핵심 구성 요소 한눈에 보기
다이어그램은 다음 네 부분으로 나뉩니다:
- Client: Producer/Consumer 애플리케이션
- Kafka Brokers: Broker A, B, C
- Zookeeper Ensemble: ZK 노드 3대
- systemd Startup: 부팅 시 서비스 자동 기동
1) Client → bootstrap.servers
- Client(Producer/Consumer)는 클러스터에 접속하기 위해
bootstrap.servers
에 명시된 브로커 주소 목록을 사용합니다.1
bootstrap.servers=broker1:9092,broker2:9092
- 이 중 하나에 TCP 연결을 맺으면, 해당 브로커로부터 “이 클러스터에는 A, B, C 브로커가 있다”는 메타데이터를 전달받아 이후 통신에 활용합니다.
2) listeners vs. advertised.listeners
설정 항목 | 역할 |
---|---|
listeners | 브로커 프로세스가 바인딩(bind) 할 네트워크 인터페이스/포트 (예: 0.0.0.0:9092 → 모든 인터페이스 수신) |
advertised.listeners | 클라이언트에게 알려줄(advertise) 실제 접근 주소/호스트명 (예: 퍼블릭 IP 또는 DNS) |
listeners=PLAINTEXT://0.0.0.0:9092
브로커가 내부적으로 9092 포트를 열어 모든 인터페이스에서 연결을 받습니다.advertised.listeners=PLAINTEXT://ec2-XX-XX-XX-XX.compute.amazonaws.com:9092
클라이언트가 “메시지 주고받을 땐 이 호스트명으로 접속하세요”라고 안내하는 설정입니다.
3) 브로커 간 TCP 연결 (port 9092)
- Broker A ↔ Broker B/C 간의 점선 화살표는 메타데이터 동기화와 리더 선출을 위해 서로 통신하는 TCP 연결을 나타냅니다.
- 이를 통해 파티션 리더, ISR(In-Sync Replica) 정보가 브로커들끼리 공유됩니다.
4) Zookeeper Ensemble 연동 (port 2181)
- 하단의 Zookeeper 3대 클러스터(
2181
)에 각 브로커가 자신을 등록(register) 하며, 이후 다음 기능을 수행합니다:- 리더 선출: 파티션 리더를 결정
- 메타데이터 조회: 토픽·파티션 정보 확보
- 멤버십 관리: 브로커 추가/제거 감지
- 설정 예시:
1
zookeeper.connect=zk1:2181,zk2:2181,zk3:2181
5) systemd를 활용한 자동 기동
- unit 파일 작성
/etc/systemd/system/zookeeper.service
/etc/systemd/system/kafka.service
- enable & start
1 2 3
sudo systemctl daemon-reload sudo systemctl enable zookeeper.service kafka.service sudo systemctl start zookeeper.service kafka.service
- 부팅 순서 보장
After=network.target
→ 네트워크 활성화 후 ZK 기동After=zookeeper.service
→ ZK 이후 Kafka 기동
마치며: 정리 및 다음 단계
bootstrap.servers, listeners vs. advertised.listeners, 브로커 간 통신, Zookeeper 연동, systemd 자동 기동까지 핵심 흐름을 설명했습니다.
다음은 이 PoC 환경을 확장해 Lambda → Kafka 연동, S3 배치 적재 등 데이터 파이프라인 구축 과정을 다뤄보겠습니다.
이 기사는 저작권자의
CC BY 4.0
라이센스를 따릅니다.