inblog logo
|
LifeLog, DevLog
    Kafka

    Kafka Cluster 실습

    KYJTHEYJ's avatar
    KYJTHEYJ
    Apr 01, 2026
    Kafka Cluster 실습
    Contents
    Kafka Cluster 구현docker-composeTopic 생성Broker 생성 확인FailOver 유발1번 복구

    Kafka Cluster 구현

    docker-compose

    3개의 파티션과 3개의 파티션 유지가 골조

    services:
      # --------------------------
      # Broker 1 (Node ID: 1)
      # --------------------------
      kafka-1:
        image: apache/kafka:3.7.0
        container_name: kafka-1
        ports:
          - "9092:9092"
        environment:
          KAFKA_NODE_ID: 1
          KAFKA_PROCESS_ROLES: broker,controller
          KAFKA_CONTROLLER_QUORUM_VOTERS: 1@kafka-1:9093,2@kafka-2:9093,3@kafka-3:9093
    
          # listeners
          KAFKA_LISTENERS: CONTROLLER://:9093,INTERNAL://:29092,EXTERNAL://:9092
          KAFKA_ADVERTISED_LISTENERS: INTERNAL://kafka-1:29092,EXTERNAL://localhost:9092
          KAFKA_LISTENER_SECURITY_PROTOCOL_MAP: CONTROLLER:PLAINTEXT,INTERNAL:PLAINTEXT,EXTERNAL:PLAINTEXT
          KAFKA_CONTROLLER_LISTENER_NAMES: CONTROLLER
          KAFKA_INTER_BROKER_LISTENER_NAME: INTERNAL
    
          # replication configs
          KAFKA_OFFSETS_TOPIC_REPLICATION_FACTOR: 3
          KAFKA_TRANSACTION_STATE_LOG_REPLICATION_FACTOR: 3
          KAFKA_TRANSACTION_STATE_LOG_MIN_ISR: 2
          KAFKA_GROUP_INITIAL_REBALANCE_DELAY_MS: 0
    
          KAFKA_LOG_DIRS: /var/lib/kafka/data
        volumes:
          - kafka1_data:/var/lib/kafka/data
        networks:
          - kafka-net
    
      # --------------------------
      # Broker 2 (Node ID: 2)
      # --------------------------
      kafka-2:
        image: apache/kafka:3.7.0
        container_name: kafka-2
        ports:
          - "9093:9092"
        environment:
          KAFKA_NODE_ID: 2
          KAFKA_PROCESS_ROLES: broker,controller
          KAFKA_CONTROLLER_QUORUM_VOTERS: 1@kafka-1:9093,2@kafka-2:9093,3@kafka-3:9093
    
          # listeners
          KAFKA_LISTENERS: CONTROLLER://:9093,INTERNAL://:29092,EXTERNAL://:9092
          KAFKA_ADVERTISED_LISTENERS: INTERNAL://kafka-2:29092,EXTERNAL://localhost:9093
          KAFKA_LISTENER_SECURITY_PROTOCOL_MAP: CONTROLLER:PLAINTEXT,INTERNAL:PLAINTEXT,EXTERNAL:PLAINTEXT
          KAFKA_CONTROLLER_LISTENER_NAMES: CONTROLLER
          KAFKA_INTER_BROKER_LISTENER_NAME: INTERNAL
    
          # replication configs
          KAFKA_OFFSETS_TOPIC_REPLICATION_FACTOR: 3
          KAFKA_TRANSACTION_STATE_LOG_REPLICATION_FACTOR: 3
          KAFKA_TRANSACTION_STATE_LOG_MIN_ISR: 2
    
          KAFKA_LOG_DIRS: /var/lib/kafka/data
        volumes:
          - kafka2_data:/var/lib/kafka/data
        networks:
          - kafka-net
    
      # --------------------------
      # Broker 3 (Node ID: 3)
      # --------------------------
      kafka-3:
        image: apache/kafka:3.7.0
        container_name: kafka-3
        ports:
          - "9094:9092"
        environment:
          KAFKA_NODE_ID: 3
          KAFKA_PROCESS_ROLES: broker,controller
          KAFKA_CONTROLLER_QUORUM_VOTERS: 1@kafka-1:9093,2@kafka-2:9093,3@kafka-3:9093
    
          # listeners
          KAFKA_LISTENERS: CONTROLLER://:9093,INTERNAL://:29092,EXTERNAL://:9092
          KAFKA_ADVERTISED_LISTENERS: INTERNAL://kafka-3:29092,EXTERNAL://localhost:9094
          KAFKA_LISTENER_SECURITY_PROTOCOL_MAP: CONTROLLER:PLAINTEXT,INTERNAL:PLAINTEXT,EXTERNAL:PLAINTEXT
          KAFKA_CONTROLLER_LISTENER_NAMES: CONTROLLER
          KAFKA_INTER_BROKER_LISTENER_NAME: INTERNAL
    
          # replication configs
          KAFKA_OFFSETS_TOPIC_REPLICATION_FACTOR: 3
          KAFKA_TRANSACTION_STATE_LOG_REPLICATION_FACTOR: 3
          KAFKA_TRANSACTION_STATE_LOG_MIN_ISR: 2
    
          KAFKA_LOG_DIRS: /var/lib/kafka/data
        volumes:
          - kafka3_data:/var/lib/kafka/data
        networks:
          - kafka-net
    
      # --------------------------
      # Kafka UI
      # --------------------------
      kafka-ui:
        image: provectuslabs/kafka-ui:latest
        container_name: kafka-ui
        ports:
          - "8088:8080"
        environment:
          KAFKA_CLUSTERS_0_NAME: local-kraft-cluster
          KAFKA_CLUSTERS_0_BOOTSTRAPSERVERS: kafka-1:29092,kafka-2:29092,kafka-3:29092
          KAFKA_CLUSTERS_0_METADATAPROVIDER: "KAFKA"
          DYNAMIC_CONFIG_ENABLED: true
        depends_on:
          - kafka-1
          - kafka-2
          - kafka-3
        networks:
          - kafka-net
    
    volumes:
      kafka1_data:
      kafka2_data:
      kafka3_data:
    
    networks:
      kafka-net:
        driver: bridge

    Topic 생성

    Broker 생성 확인

    FailOver 유발

    정상
    Docker 에서 kafka-1 을 정지
    Broker 1, 1대가 죽어도 남은 2대로 계속 운영이 가능함

    1번 복구

    다시 Docker 에서 kafka-1 작동, 복구되는 모습

    💡

    장애가 발생해도 남은 Follower 가 Leader 로 승격되며 서비스를 이어감

    Share article
    Contents
    Kafka Cluster 구현docker-composeTopic 생성Broker 생성 확인FailOver 유발1번 복구

    LifeLog, DevLog - https://github.com/KYJTHEYJ

    RSS·Powered by Inblog