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 |