Opensource

KAFKA // RDS oracle>postgre kafka docker-compose.yml (test용)

KK_Ryong 2025. 3. 12. 10:17

services:
  kafka:
    image: bitnami/kafka:3.7.0
    container_name: KafkaContainer
    ports:
      - '9092:9092'  # Kafka 컨테이너 내부에서 9092 포트로 수신
    environment:
      # 기본 설정
      - KAFKA_AUTO_CREATE_TOPICS_ENABLE=true
      - KAFKA_BROKER_ID=0
      - KAFKA_NODE_ID=0
      # KRaft 단일 노드 설정
      - KAFKA_PROCESS_ROLES=controller,broker
      - KAFKA_CONTROLLER_QUORUM_VOTERS=0@kafka:9093
      # 리스너 설정
      - ALLOW_PLAINTEXT_LISTENER=yes
      - KAFKA_LISTENERS=PLAINTEXT://:9092,CONTROLLER://:9093  # 9092 포트를 사용할 것
      - KAFKA_ADVERTISED_LISTENERS=PLAINTEXT://kafka:9092  # 광고할 포트는 9092
      - KAFKA_LISTENER_SECURITY_PROTOCOL_MAP=CONTROLLER:PLAINTEXT,PLAINTEXT:PLAINTEXT
      - KAFKA_CFG_CONTROLLER_LISTENER_NAMES=CONTROLLER  # Controller 리스너 이름을 CONTROLLER로 설정
      # 단일 노드에 맞춘 복제 팩터
      - KAFKA_OFFSETS_TOPIC_REPLICATION_FACTOR=1
      - KAFKA_TRANSACTION_STATE_LOG_REPLICATION_FACTOR=1
      - KAFKA_TRANSACTION_STATE_LOG_MIN_ISR=1
      - KAFKA_MESSAGE_MAX_BYTES=209715200  # 200MB
      - KAFKA_REPLICA_FETCH_MAX_BYTES=209715200  # 200MB
      - KAFKA_MAX_REQUEST_SIZE=209715200  # 200MB
    networks:
      - kafka_network
    volumes:
      - "/app/docker/kafka:/bitnami/kafka"  # 로컬 디렉토리 매핑
    deploy:
      resources:
        limits:
          cpus: '1.0'
          memory: 2G
        reservations:
          cpus: '0.5'
          memory: 1G

  KafkaWebUiService:
    image: provectuslabs/kafka-ui:latest
    container_name: KafkaWebUiContainer
    restart: unless-stopped
    ports:
      - '8080:8080'  # Kafka UI 웹 포트
    environment:
      - KAFKA_CLUSTERS_0_NAME=Local-Kraft-Cluster
      - KAFKA_CLUSTERS_0_BOOTSTRAPSERVERS=kafka:9092  # 단일 Kafka 노드의 9092 포트
      - DYNAMIC_CONFIG_ENABLED=true
      - KAFKA_CLUSTERS_0_AUDIT_TOPICAUDITENABLED=true
      - KAFKA_CLUSTERS_0_AUDIT_CONSOLEAUDITENABLED=true
    depends_on:
      - kafka
    networks:
      - kafka_network
    volumes:
      - "/app/docker/kafka:/var/lib/kafka-ui"  # Kafka UI 로그와 데이터 저장

  kafka-connect:
    image: confluentinc/cp-kafka-connect:latest
    container_name: KafkaConnectContainer
    ports:
      - "8083:8083"
    environment:
      CONNECT_BOOTSTRAP_SERVERS: "kafka:9092"
      CONNECT_REST_ADVERTISED_HOST_NAME: "kafka-connect"
      CONNECT_GROUP_ID: "connect-cluster"
      CONNECT_CONFIG_STORAGE_TOPIC: "connect-configs"
      CONNECT_OFFSET_STORAGE_TOPIC: "connect-offsets"
      CONNECT_STATUS_STORAGE_TOPIC: "connect-status"
      CONNECT_KEY_CONVERTER: "org.apache.kafka.connect.json.JsonConverter"
      CONNECT_VALUE_CONVERTER: "org.apache.kafka.connect.json.JsonConverter"
      CONNECT_INTERNAL_KEY_CONVERTER: "org.apache.kafka.connect.json.JsonConverter"
      CONNECT_INTERNAL_VALUE_CONVERTER: "org.apache.kafka.connect.json.JsonConverter"
      CONNECT_PLUGIN_PATH: "/usr/share/java,/usr/share/confluent-hub-components"
      CONNECT_CONFIG_STORAGE_REPLICATION_FACTOR: 1
      CONNECT_OFFSET_STORAGE_REPLICATION_FACTOR: 1
      CONNECT_STATUS_STORAGE_REPLICATION_FACTOR: 1
    depends_on:
      - kafka
    networks:
      - kafka_network
    volumes:
      - "/app/docker/kafka:/var/lib/kafka-connect"  # Kafka Connect 로그와 데이터 저장

  # Debezium (Oracle에서 데이터 추출) 서비스
  debezium:
    image: debezium/connect:2.7.0.Final
    container_name: DebeziumContainer
    environment:
      - GROUP_ID=debezium
      - BOOTSTRAP_SERVERS=kafka:9092
      - CONFIG_STORAGE_TOPIC=debezium-configs
      - OFFSET_STORAGE_TOPIC=debezium-offsets
      - STATUS_STORAGE_TOPIC=debezium-status
      - CONNECT_KEY_CONVERTER=org.apache.kafka.connect.storage.StringConverter
      - CONNECT_VALUE_CONVERTER=org.apache.kafka.connect.json.JsonConverter
      - CONNECT_VALUE_CONVERTER_SCHEMAS_ENABLE=false
      - CONNECT_PLUGIN_PATH=/kafka/connect  # 플러그인 경로 명시
    depends_on:
      - kafka
      - kafka-connect
    networks:
      - kafka_network
    volumes:
      - "/app/docker/kafka:/kafka/data"  # 데이터 저장 경로를 /kafka/data로 변경

networks:
  kafka_network:
    driver: bridge

'Opensource' 카테고리의 다른 글

Scouter 설치 및 Slack 연동  (0) 2024.09.09
ActiveMQ 설치  (0) 2024.01.30
thumbor docker yml  (0) 2024.01.15
ci4 설정  (0) 2023.11.29
Mysql_MSR  (1) 2023.11.21