아빠는 개발자

[kafka] docker compose kafka 본문

Kafka

[kafka] docker compose kafka

father6019 2024. 8. 10. 15:35
728x90
반응형

개발잡부에서  쓴 기억이 있는데 2년 전이라 기억이 가물 가물..

 

일단 작업은 해놨으니 테스트 부터

 

먼저 현재 Docker에 존재하는 네트워크 목록을 확인

docker network ls

 

네트워크 목록

 

혹시나 남아있다면 테스트를 위해 삭제를 하는것도 괜차늠

docker network rm <network_name_or_id>

docker network rm kafka-network

 

작업 파일

docker-compose.yml

version: '3.6'

services:
  zookeeper1:
    container_name: zookeeper1
    image: wurstmeister/zookeeper:3.4.6
    volumes:
      - "./zookeeper/data:/data"
      - "./zookeeper/logs:/datalog"
    ports:
      - "12181:2181"
    networks:
      - kafka-network
    environment:
      ZOO_MY_ID: 1
      ZOO_SERVERS: server.1=zookeeper1:2888:3888,server.2=zookeeper2:2888:3888,server.3=zookeeper3:2888:3888
  zookeeper2:
    container_name: zookeeper2
    image: wurstmeister/zookeeper:3.4.6
    volumes:
      - "./zookeeper/data:/data"
      - "./zookeeper/logs:/datalog"
    ports:
      - "22181:2181"
    networks:
      - kafka-network
    environment:
      ZOO_MY_ID: 2
      ZOO_SERVERS: server.1=zookeeper1:2888:3888,server.2=zookeeper2:2888:3888,server.3=zookeeper3:2888:3888
  zookeeper3:
    container_name: zookeeper3
    image: wurstmeister/zookeeper:3.4.6
    volumes:
      - "./zookeeper/data:/data"
      - "./zookeeper/logs:/datalog"
    ports:
      - "32181:2181"
    networks:
      - kafka-network
    environment:
      ZOO_MY_ID: 3
      ZOO_SERVERS: server.1=zookeeper1:2888:3888,server.2=zookeeper2:2888:3888,server.3=zookeeper3:2888:3888
  kafka1:
    container_name: kafka1
    image: wurstmeister/kafka:2.12-2.3.0
    restart: on-failure
    ports:
      - "9095:9092"
      - "10993:10993"
    networks:
      - kafka-network
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
    environment:
      KAFKA_LISTENERS: INSIDE://0.0.0.0:9095,OUTSIDE://0.0.0.0:9092
      KAFKA_ADVERTISED_LISTENERS: INSIDE://kafka1:9095,OUTSIDE://localhost:9092
      KAFKA_LISTENER_SECURITY_PROTOCOL_MAP: INSIDE:PLAINTEXT,OUTSIDE:PLAINTEXT
      KAFKA_LISTENER_NAME_REQUIRES_AUTH: INSIDE
      KAFKA_INTER_BROKER_LISTENER_NAME: INSIDE
      KAFKA_BROKER_ID: 1
      KAFKA_ZOOKEEPER_CONNECT: zookeeper1:2181,zookeeper2:2181,zookeeper3:2181
      JMX_PORT: 10993
      KAFKA_JMX_OPTS: -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false -Djava.rmi.server.hostname=kafka1 -Dcom.sun.management.jmxremote.rmi.port=10993
      KAFKA_ADVERTISED_HOST_NAME: kafka1
      KAFKA_ADVERTISED_PORT: 9092
      KAFKA_OFFSETS_TOPIC_REPLICATION_FACTOR: 2
    depends_on:
      - zookeeper1
      - zookeeper2
      - zookeeper3
  kafka2:
    container_name: kafka2
    image: wurstmeister/kafka:2.12-2.3.0
    restart: on-failure
    ports:
      - "9096:9092"
      - "20993:20993"
    networks:
      - kafka-network
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
    environment:
      KAFKA_LISTENERS: INSIDE://0.0.0.0:9096,OUTSIDE://0.0.0.0:9092
      KAFKA_ADVERTISED_LISTENERS: INSIDE://kafka2:9096,OUTSIDE://localhost:9092
      KAFKA_LISTENER_SECURITY_PROTOCOL_MAP: INSIDE:PLAINTEXT,OUTSIDE:PLAINTEXT
      KAFKA_LISTENER_NAME_REQUIRES_AUTH: INSIDE
      KAFKA_INTER_BROKER_LISTENER_NAME: INSIDE
      KAFKA_BROKER_ID: 2
      KAFKA_ZOOKEEPER_CONNECT: zookeeper1:2181,zookeeper2:2181,zookeeper3:2181
      JMX_PORT: 20993
      KAFKA_JMX_OPTS: -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false -Djava.rmi.server.hostname=kafka2 -Dcom.sun.management.jmxremote.rmi.port=20993
      KAFKA_ADVERTISED_HOST_NAME: kafka2
      KAFKA_ADVERTISED_PORT: 9092
      KAFKA_OFFSETS_TOPIC_REPLICATION_FACTOR: 2
    depends_on:
      - zookeeper1
      - zookeeper2
      - zookeeper3
  kafka3:
    container_name: kafka3
    image: wurstmeister/kafka:2.12-2.3.0
    restart: on-failure
    ports:
      - "9097:9092"
      - "30993:30993"
    networks:
      - kafka-network
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
    environment:
      KAFKA_LISTENERS: INSIDE://0.0.0.0:9097,OUTSIDE://0.0.0.0:9092
      KAFKA_ADVERTISED_LISTENERS: INSIDE://kafka3:9097,OUTSIDE://localhost:9092
      KAFKA_LISTENER_SECURITY_PROTOCOL_MAP: INSIDE:PLAINTEXT,OUTSIDE:PLAINTEXT
      KAFKA_LISTENER_NAME_REQUIRES_AUTH: INSIDE
      KAFKA_INTER_BROKER_LISTENER_NAME: INSIDE
      KAFKA_BROKER_ID: 3
      KAFKA_ZOOKEEPER_CONNECT: zookeeper1:2181,zookeeper2:2181,zookeeper3:2181
      JMX_PORT: 30993
      KAFKA_JMX_OPTS: -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false -Djava.rmi.server.hostname=kafka3 -Dcom.sun.management.jmxremote.rmi.port=30993
      KAFKA_ADVERTISED_HOST_NAME: kafka3
      KAFKA_ADVERTISED_PORT: 9092
      KAFKA_OFFSETS_TOPIC_REPLICATION_FACTOR: 2
    depends_on:
      - zookeeper1
      - zookeeper2
      - zookeeper3

  kafka-manager:
    container_name: kafka-manager
    image: hlebalbau/kafka-manager:2.0.0.2
    restart: on-failure
    depends_on:
      - kafka1
      - kafka2
      - kafka3
      - zookeeper1
      - zookeeper2
      - zookeeper3
    environment:
      ZK_HOSTS: zookeeper1:2181,zookeeper2:2181,zookeeper3:2181
      APPLICATION_SECRET: "random-secret"
      KM_ARGS: -Djava.net.preferIPv4Stack=true
    ports:
      - "9000:9000"
    networks:
      - kafka-network
networks:
  kafka-network:
    driver: bridge
    name: kafka-network

 

자 실행해보자

docker compose up -d --build

 

 

STATUS 에 

 

자 kafka manager 에 접속해보자 9000 번으로 띄워져 있으니 

http://localhost:9000/

 

 

 

add cluster 하고

 

여기서 Cluster Zookeeper Hosts 는 zookeeper 정보를 입력한다. 

 

 

브로커가 하나만 뜬다..

이게 문제인데 뭐가 잘못된지를..  모르겠다. 

 

docker restart kafka3 

 

3번을 재시작 해보면 그래도 1번만 잡혀있다. 

 

네트워크 생성 OK 

29b5490547ca   kafka-network           bridge    local

 

네트워크 상태 확인

docker network inspect kafka-network

 

 

 

1. 브로커 컨테이너가 정상적으로 실행되지 않음

  • 문제: docker-compose up 명령어로 브로커 컨테이너가 실행되지 않았거나, 실행 중 에러가 발생해 정상적으로 기동되지 않았을 수 있습니다.
  • 해결:
    • 각 브로커 컨테이너의 상태를 확인하기 위해 docker ps 명령어를 사용해 확인합니다. 각 브로커가 정상적으로 실행 중인지 확인하세요.
    • 로그를 확인하기 위해 docker logs <브로커 컨테이너 이름> 명령어를 사용해 Kafka 브로커 컨테이너 로그를 확인하고, 에러가 있는지 확인합니다.

2. Zookeeper와의 연결 문제

  • 문제: Kafka 브로커가 Zookeeper에 제대로 연결되지 않았을 수 있습니다.
  • 해결:
    • KAFKA_ZOOKEEPER_CONNECT 환경 변수가 모든 Kafka 브로커에서 동일하게 설정되었는지 확인하세요.
    • zookeeper1:2181,zookeeper2:2181,zookeeper3:2181으로 설정했는지 확인합니다.
    • 각 브로커가 Zookeeper에 연결될 수 있도록 네트워크 설정이 올바른지 확인하세요.

3. 네트워크 문제

  • 문제: 브로커들이 서로 통신할 수 없거나, 네트워크 문제가 있을 수 있습니다.
  • 해결:
    • 각 브로커가 동일한 Docker 네트워크에 있는지 확인하세요.
    • 네트워크 이름이나 서브넷이 올바르게 설정되었는지 확인하고, 브로커들이 서로의 IP를 통해 접근 가능한지 확인합니다.

4. Kafka 설정 문제

  • 문제: 각 브로커의 설정이 잘못되어 클러스터가 형성되지 않을 수 있습니다.
  • 해결:
    • KAFKA_BROKER_ID가 각 브로커마다 고유한지 확인하세요.
    • KAFKA_ADVERTISED_LISTENERS가 올바르게 설정되어 있는지 확인합니다. 각 브로커가 서로 다른 포트를 사용하도록 설정되어 있는지 확인합니다.

5. Kafka Manager 설정 문제

  • 문제: Kafka Manager에서 브로커가 모두 표시되지 않을 수 있습니다.
  • 해결:
    • Kafka Manager에서 Zookeeper 연결이 올바르게 설정되었는지 확인합니다.
    • 필요시 Kafka Manager를 다시 시작해보세요.

 

토픽 생성 

728x90
반응형