docker compose, kafka 그리고 TimeoutException

2024. 10. 18. 00:44·TIL
  zookeeper:
    image: wurstmeister/zookeeper:latest
    platform: linux/amd64
    ports:
      - "2181:2181"
    environment:
      ZOOKEEPER_CLIENT_PORT: 2181
      ZOOKEEPER_TICK_TIME: 2000
    networks:
      - image_network

  kafka:
    image: wurstmeister/kafka:latest
    platform: linux/amd64
    ports:
      - "29092:29092"
      - "9092:9092"
    environment:
      KAFKA_ADVERTISED_LISTENERS: INSIDE://kafka:9092,OUTSIDE://kafka:29092
      KAFKA_LISTENER_SECURITY_PROTOCOL_MAP: INSIDE:PLAINTEXT,OUTSIDE:PLAINTEXT
      KAFKA_LISTENERS: INSIDE://0.0.0.0:9092,OUTSIDE://0.0.0.0:29092
      KAFKA_INTER_BROKER_LISTENER_NAME: INSIDE
      KAFKA_ZOOKEEPER_CONNECT: zookeeper:2181
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
    networks:
      - image_network
    depends_on:
      - zookeeper

  kafka-ui:
    image: provectuslabs/kafka-ui:latest
    platform: linux/amd64
    ports:
      - "8080:8080"
    environment:
      KAFKA_CLUSTERS_0_NAME: local
      KAFKA_CLUSTERS_0_BOOTSTRAPSERVERS: kafka:29092
      KAFKA_CLUSTERS_0_ZOOKEEPER: zookeeper:2181
      KAFKA_CLUSTERS_0_READONLY: "false"
    networks:
      - image_network
  • KAFKA_ADVERTISED_LISTENERS:
    • 외부에서 접속하기 위한 리스너 설정을 한다.
    • 카프카 프로듀서, 컨슈머에게 노출할 주소
    • 설정하지 않을 경우 listeners 설정이 적용된다.
    • key:value 형식
    • 이때 INSIDE와 OUTSIDE는 정해진 키워드가 아니다.
  • KAFKA_LISTENER_SECURITY_PROTOCOL_MAP:
    • 보안을 위한 프로토콜 매핑
    • KAFKA_ADVERTISED_LISTENERS 과 함께 key/value로 매핑된다.
  • KAFKA_LISTENERS
    • 카프카 브로커가 내부적으로 바인딩하는 주소
  •  KAFKA_INTER_BROKER_LISTENER_NAME:
    • 내부에서 사용할 리스너 이름을 지정한다.
    • 이전에 매핑된 PLAINTEXT가 사용되었다.

 

❓KAFKA_ADVERTISED_LISTENERS와 KAFKA_LISTENERS의 차이점

KAFKA_ADVERTISED_LISTENERS는 브로커가 리스닝하는 포트를 외부 세계로 연결하는 역할을 한다.

카프카는 클러스터 환경이라 Private Network 내부에서 동작하는데, 내부 네트워크를 외부로 연결 시키는 역할을 하는 것이 KAFKA_ADVERTISED_LISTENERS이다.

 

KAFKA_LISTENERS를 통해 브로커의 네트워크 포트를 활성화시키고, 그 포트 정보를 토대로 KAFKA_ADVERTISED_LISTENERS를 활용하여 다른 서버들과 소통한다.

 

개별 브로커는 1. 다른 브로커 2. 메시지 프로듀서 or 컨슈머 와 통신을 하게되는데,

1번은 내부 통신

2번은 외부 통신이라 할 수 있겠다. 

 

그러므로, KAFKA_INTER_BROKER_LISTENER_NAME로 INSIDE를 설정하게 되면

내부 브로커들의 통신은 kafka:9092

클라이언트(메시지 프로듀서와 컨슈머) 통신은 kafka:29092로 정해지는 것이다.

 

스프링 애플리케이션 yml 파일에 아래와 같이 설정하면 된다. 

  kafka:
    bootstrap-servers: kafka:29092

 

 

👩‍🌾삽질의 원인

우선.,. INSIDE가 도커 컨테이너끼리의 통신이고 OUTSIDE가 아예 외부??통신인줄 알았다..

OUTSIDE://localhost:29092 로 설정하고

INSIDE로 설정한 주소만 계속 시도했더니..타임아웃이 났다! 

클라이언트쪽에서 내부통신 포트를 요청하니 그랬던거 같다.

생각보다 단순한 문제였는데 개념을 제대로 알지 못하는 상황에서 gpt에 의존하다보니 시간이 오래 소요되었다..

이제 확실히 알았으니 다음부턴 조심하자

 

 

참고

https://www.sktenterprise.com/bizInsight/blogDetail/dev/2565

https://parkcheolu.tistory.com/196

https://westlife0615.tistory.com/529

'TIL' 카테고리의 다른 글

Docker : no space left on device  (0) 2024.10.22
[TIL 2024/10/15] MSA 프로젝트 Docker로 실행하기  (0) 2024.10.16
[WIL] 프로젝트 2주차  (0) 2024.10.07
[TIL 2024/10/01] docker db 연결 오류  (1) 2024.10.03
[TIL 2024/09/30] 이미지 서버 모듈  (1) 2024.10.01
'TIL' 카테고리의 다른 글
  • Docker : no space left on device
  • [TIL 2024/10/15] MSA 프로젝트 Docker로 실행하기
  • [WIL] 프로젝트 2주차
  • [TIL 2024/10/01] docker db 연결 오류
dev_ajrqkq
dev_ajrqkq
알고리즘 천재가 될 거야
기록이 자산이다알고리즘 천재가 될 거야
  • dev_ajrqkq
    기록이 자산이다
    dev_ajrqkq
  • 전체
    오늘
    어제
    • 분류 전체보기 (163)
      • Front-end (0)
      • Back-end (16)
        • Spring (4)
        • Java (8)
      • CS (9)
        • 데이터베이스 (5)
        • 네트워크 (4)
      • Algorithm (91)
      • 이것저것 (0)
      • 버그잡기 (1)
      • TIL (37)
      • 후기 (1)
      • 취준 (0)
  • 블로그 메뉴

    • 링크

    • 공지사항

    • 인기 글

    • 태그

      습관형성
      패스트캠퍼스
      코딩테스트준비
      Til
      환급챌린지
      오공완
      직장인자기계발
      TypeScript
      99클럽
      항해99
      오블완
      티스토리챌린지
      개발자취업
      패스트캠퍼스후기
    • 최근 댓글

    • 최근 글

    • hELLO· Designed By정상우.v4.10.2
    dev_ajrqkq
    docker compose, kafka 그리고 TimeoutException
    상단으로

    티스토리툴바

    단축키

    내 블로그

    내 블로그 - 관리자 홈 전환
    Q
    Q
    새 글 쓰기
    W
    W

    블로그 게시글

    글 수정 (권한 있는 경우)
    E
    E
    댓글 영역으로 이동
    C
    C

    모든 영역

    이 페이지의 URL 복사
    S
    S
    맨 위로 이동
    T
    T
    티스토리 홈 이동
    H
    H
    단축키 안내
    Shift + /
    ⇧ + /

    * 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.