services:
  zookeeper:
    image: bitnami/zookeeper:latest
    ports:
      - '2181:2181'
    environment:
      - ALLOW_ANONYMOUS_LOGIN=yes

  kafka:
    image: bitnami/kafka:latest
    ports:
      - '9092:9092'
    environment:
      - KAFKA_BROKER_ID=1
      - KAFKA_CFG_ZOOKEEPER_CONNECT=zookeeper:2181
      - ALLOW_PLAINTEXT_LISTENER=yes
      - KAFKA_CFG_LISTENER_SECURITY_PROTOCOL_MAP=CLIENT:PLAINTEXT,EXTERNAL:PLAINTEXT
      - KAFKA_CFG_LISTENERS=CLIENT://:9333,EXTERNAL://:9092
      - KAFKA_CFG_ADVERTISED_LISTENERS=CLIENT://kafka:9333,EXTERNAL://localhost:9092
      - KAFKA_CFG_INTER_BROKER_LISTENER_NAME=CLIENT
    depends_on:
      - zookeeper

  kafdrop:
    image: obsidiandynamics/kafdrop:latest
    ports:
      - '9000:9000'
    environment:
      KAFKA_BROKERCONNECT: "PLAINTEXT://kafka:9333"
      JVM_OPTS: "-Xms320M -Xmx640M -XX:-TieredCompilation -XX:+UseStringDeduplication -noverify"
      SERVER_PORT: 9000
      MANAGEMENT_SERVER_PORT: 9000
    depends_on:
      - kafka

로컬 테스트를 위해 zookeeper + kafka 컨테이너 띄운 docker-compose 환경을 구성해야 했는데, 찾아보니 kafka 이미지가 꽤 많습니다.

공식 이미지는 따로 없고, wurstmeister/kafka, confluentinc/cp-kafka, bitnami/kafka 등의 비공식 이미지들이 있는데요 저는 bitnami 이미지로 선택했습니다. 이유는 bitnami 이미지가 예제도 많고 관리도 잘 되고 있는듯 해서 골랐습니다.

참고로 bitnami에서 제공하는 이미지들은 깃허브 bitnami/containers에서 확인할 수 있습니다

 

kafdrop은 카프카 클러스터 상태를 웹으로 볼 수 있는 모듈인데, consumer lag 같은거 확인할 때 쓸만해서 docker compose에 추가했습니다.

 

redis는 따로 추가했습니다

띄우는건 docker compose up -d, 내리는건 docker compose down 으로 하면 됩니다

 

단점이 좀 있는데 kafka가 좀 늦게 켜지면 kafdrop이랑 kafka 커넥션이 안맺어지는 것 같네요 ;;

healthcheck 엔드포인트가 뚫려있는지 확인해보고 나중에 추가해봐야겠습니다. 지금은 뭐 로컬이면 다시 띄우면 그만이니 패스!

반응형