포스트

카프카 설치하면서 알게 된 내용 정리

내부 동작 원리와 용어 등

카프카 설치하면서 알게 된 내용 정리

들어가며: 설치 중 겪은 고군분투

카프카를 EC2에 직접 설치하며 맞닥뜨린 첫 번째 난관은 브로커 설정이었습니다.
아래처럼 listenersadvertised.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를 활용한 자동 기동

  1. unit 파일 작성
    • /etc/systemd/system/zookeeper.service
    • /etc/systemd/system/kafka.service
  2. enable & start
    1
    2
    3
    
    sudo systemctl daemon-reload  
    sudo systemctl enable zookeeper.service kafka.service  
    sudo systemctl start zookeeper.service kafka.service
    
  3. 부팅 순서 보장
    • 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 라이센스를 따릅니다.