DevOps/Kafka

기본기있는-카프카깡패 (5) 카프카 브로커 설치하기

키깡 2025. 4. 7. 22:35
728x90

계속되는 브로커 설치 시 오류로 인해... 우선 스겜 해보겠다는 마음으로 confluent의 카프카 이미지를 사용하기로 했다...

  • 구성도
    아래 처럼 docker 안에서 zk-net이라는 bridge 네트워크를 만들고 주키퍼 3대 + 브로커 1대 구성으로 테스트 해볼 것이다.
📦 Host Machine (Docker)
│
├── 🐳 Container: zookeeper-1
│     - 내부 포트: 2181
│     - 외부 포트: 2181
│     - ZOO_MY_ID: 1
│     - 서버 ID: server.1
│
├── 🐳 Container: zookeeper-2
│     - 내부 포트: 2181
│     - 외부 포트: 2182
│     - ZOO_MY_ID: 2
│     - 서버 ID: server.2
│
├── 🐳 Container: zookeeper-3
│     - 내부 포트: 2181
│     - 외부 포트: 2183
│     - ZOO_MY_ID: 3
│     - 서버 ID: server.3
│
├── 🐳 Container: kafka
│     - 내부 포트: 9092
│     - 외부 포트: 9092
│     - ZOOKEEPER_CONNECT:
│         zookeeper-1:2181,
│         zookeeper-2:2181,
│         zookeeper-3:2181
│
└── 🕸 네트워크: zk-net (Docker user-defined bridge)
  • docker로 network를 만들어준다.
    • docker network create zk-net

다시 주키퍼 띄우기

  • 주키퍼쪽 네트워크 설정 external로 바꿔주기.
  • ZOO_CLIENT_PORT를 2181로 설정하여야 함.
services:
  zookeeper-1:
    image: zookeeper:latest
    hostname: zookeeper-1
    container_name: zookeeper-1
    ports:
      - "2181:2181"
    environment:
      ZOO_MY_ID: 1
      ZOO_CLIENT_PORT: 2181
      ZOO_SERVERS: server.1=zookeeper-1:2888:3888 server.2=zookeeper-2:2888:3888 server.3=zookeeper-3:2888:3888
    networks:
      - zk-net

  zookeeper-2:
    image: zookeeper:latest
    hostname: zookeeper-2
    container_name: zookeeper-2
    ports:
      - "2182:2181"
    environment:
      ZOO_MY_ID: 2
      ZOO_CLIENT_PORT: 2181
      ZOO_SERVERS: server.1=zookeeper-1:2888:3888 server.2=zookeeper-2:2888:3888 server.3=zookeeper-3:2888:3888
    networks:
      - zk-net

  zookeeper-3:
    image: zookeeper:latest
    hostname: zookeeper-3
    container_name: zookeeper-3
    ports:
      - "2183:2181"
    environment:
      ZOO_MY_ID: 3
      ZOO_CLIENT_PORT: 2181
      ZOO_SERVERS: server.1=zookeeper-1:2888:3888 server.2=zookeeper-2:2888:3888 server.3=zookeeper-3:2888:3888
    networks:
      - zk-net

networks:
  zk-net:
    external: true

브로커 띄우기

  • 브로커 올리기
services:
  kafka-1:
    image: confluentinc/cp-kafka:7.5.0
    hostname: kafka-1
    container_name: kafka-1
    ports:
      - "9092:9092"
    environment:
      KAFKA_BROKER_ID: 1
      KAFKA_ZOOKEEPER_CONNECT: zookeeper-1:2181,zookeeper-2:2181,zookeeper-3:2181
      KAFKA_LISTENER_SECURITY_PROTOCOL_MAP: PLAINTEXT:PLAINTEXT
      KAFKA_LISTENERS: PLAINTEXT://0.0.0.0:9092
      KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://kafka-1:9092
      KAFKA_LOG_DIRS: /tmp/kafka-logs
      # 브로커 1개용
      KAFKA_OFFSETS_TOPIC_REPLICATION_FACTOR: 1
      KAFKA_TRANSACTION_STATE_LOG_REPLICATION_FACTOR: 1
      KAFKA_TRANSACTION_STATE_LOG_MIN_ISR: 1
    networks:
      - zk-net

networks:
  zk-net:
    external: true
  • docker exec -it kafka sh
  • 로그 세그먼트는 /tmp/kafka-logs에 저장

토픽 생성하고 확인

sh-4.4$ /usr/bin/kafka-topics --bootstrap-server localhost:9092 --create --replication-factor 1 --partitions 1 --topic test
Created topic test.
sh-4.4$ /usr/bin/kafka-topics --bootstrap-server localhost:9092 --describe --topic test
Topic: test    TopicId: 9cV-8X4fTQWYnV-LAcVeyw    PartitionCount: 1    ReplicationFactor: 1    Configs:
    Topic: test    Partition: 0    Leader: 1    Replicas: 1    Isr: 1

test 토픽에 메시지 쓰고 읽기

  • kafka-console-producer 통해 토픽에 메시지 작성하고, kafka-console-consumer 명령어로 토픽의 메시지 읽기
sh-4.4$ kafka-console-producer --bootstrap-server localhost:9092 --topic test
>naa01
>naa02
>^C

sh-4.kafka-console-consumer --bootstrap-server localhost:9092 --topic test --from-beginning
naa01
naa02