Backend/Docker, Kubernetes

docker-compose 로 로컬 카프카 띄우기

findmypiece 2021. 12. 30. 16:24
728x90

검색하면 예제가 많지만 난 안되서 한참을 헤맸다. 최종적으로 성공한 docker-compose.yaml 은 아래와 같다.

version: '2'
services:
  zookeeper:
    image: wurstmeister/zookeeper:3.4.6
    container_name: local-zookeeper
    ports:
      - "2181:2181"
  kafka:
    image: wurstmeister/kafka:2.13-2.8.1
    container_name: local-kafka
    ports:
      - "9092:9092"
    depends_on:
      - zookeeper
    environment:
      KAFKA_ZOOKEEPER_CONNECT: local-zookeeper:2181
      KAFKA_ADVERTISED_HOST_NAME: localhost #카프카 프로듀서, 컨슈머에게 노출할 주소. 설정하지 않을 경우 디폴트로 listners 설정이 적용된다.
      KAFKA_ADVERTISED_PORT: 9092 #카프카 프로듀서, 컨슈머에게 노출할 주소. 설정하지 않을 경우 디폴트로 listners 설정이 적용된다.
      KAFKA_CREATE_TOPICS: "test-topic-1:1:1,test-topic-2:1:1" ##topic명:파티션 개수:복제본 개수

 

위 파일이 있는 경로로 이동해서 아래 명령어로 컨테이너를 띄우자.

docker-compose up -d

#종료는 아래와 같이 하면 된다.
docker-compose down

#컨테이너가 잘 떳는지 확인하자.
docker ps

 

생성된 토픽은 컨테이너에 직접 접속해서 확인해도 되지만 로컬에서 아래 명령어로도 확인 가능하다.

docker exec -ti local-kafka /opt/kafka/bin/kafka-topics.sh --list --zookeeper zookeeper

 

몇가지 참고할 사항은 아래와 같다.

  1. service.kafka.depends_on 은 지정된 서비스가 확인되면 띄워진다는 의미인데 services 지시어 하위에 생성한 zookeeper 를 명시해야 한다. container_name 을 지정하면 안된다.
  2. service.kafka.environment 에 명시하는 KAFKA_ZOOKEEPER_CONNECT 는 container_name 을 기준으로 작성해야 한다.
  3. 토픽이 생성되는 시간이 좀 걸린다. 위에서는 파티션과 복제본을 1씩 했는데도 카프카 구성후 바로 토픽을 확인하면 토픽이 보이지 않았다. 구동후 토픽이 보이지 않는다고 당황하지 말고 좀 기다렸다 다시 확인해보자.

 

https://blog.voidmainvoid.net/411
https://stackoverflow.com/questions/64783376/how-to-create-a-docker-image-for-kafka-topic
https://parkcheolu.tistory.com/196
https://github.com/wurstmeister/kafka-docker/issues/490
https://www.kua.kr/86

 

728x90