728x90
반응형
Kafka 서버 비정상적 종료 에러 해결 에서 로그 폴더를 삭제 하는 방향으로 에러를 해결했는데 동일 에러가 다시 발생해서 Kafka를 Linux OS에서 실행하기 위해서 Docker에서 Kafka가 실행되게 변경하였습니다.
1. compose.yml 파일 작성
version: "3"
volumes:
kafka_data:
driver: local
services:
kafka:
image: 'bitnami/kafka:3.6.1'
ports:
- '9092:9092'
environment:
- KAFKA_CFG_NODE_ID=0
- KAFKA_CFG_PROCESS_ROLES=controller,broker
- KAFKA_CFG_LISTENERS=PLAINTEXT://:9092,CONTROLLER://:9093
- KAFKA_CFG_LISTENER_SECURITY_PROTOCOL_MAP=CONTROLLER:PLAINTEXT,PLAINTEXT:PLAINTEXT
- KAFKA_CFG_CONTROLLER_QUORUM_VOTERS=0@kafka:9093
- KAFKA_CFG_CONTROLLER_LISTENER_NAMES=CONTROLLER
- KAFKA_CFG_AUTO_CREATE_TOPICS_ENABLE=true
volumes:
- "kafka_data:/bitnami/kafka"
파일 구조와 서비스 정의
- version: "3": Docker Compose 파일의 버전을 지정합니다. 여기서는 버전 3을 사용합니다.
- volumes: 사용할 볼륨을 정의하는 섹션입니다.
- kafka_data: 볼륨의 이름을 kafka_data로 지정합니다.
- driver: local: 이 볼륨의 드라이버를 로컬로 설정합니다. 이는 Docker 호스트의 로컬 파일 시스템에 데이터를 저장하겠다는 의미입니다. Kafka 데이터(예: 로그 파일)를 영구적으로 저장하기 위해 사용됩니다.
- kafka_data: 볼륨의 이름을 kafka_data로 지정합니다.
- services: 이 파일에서 정의하고자 하는 서비스들의 시작점입니다.
Kafka 서비스 구성
- kafka: 서비스의 이름을 kafka로 지정합니다. 이 이름은 Docker Compose 내에서 이 서비스를 참조할 때 사용됩니다.
컨테이너 이미지 설정
- image: 'bitnami/kafka:3.6.1': kafka 서비스에 사용될 Docker 이미지를 지정합니다. 여기서는 Bitnami가 제공하는 Kafka 3.6.1 버전의 이미지를 사용합니다.
포트 설정
- ports:
- - '9092:9092': 호스트 머신의 9092 포트와 컨테이너의 9092 포트를 연결합니다. Kafka의 기본 클라이언트 연결 포트인 9092를 사용하여 외부에서 Kafka 서버에 접근할 수 있게 합니다.
환경 변수 설정
- environment: Kafka 서버의 구성을 위한 환경 변수들을 설정합니다.
- KAFKA_CFG_NODE_ID=0: Kafka 클러스터 내에서 이 브로커의 노드 ID를 0으로 설정합니다.
- KAFKA_CFG_PROCESS_ROLES=controller,broker: 이 Kafka 인스턴스가 컨트롤러와 브로커 역할을 모두 수행하도록 설정합니다. KRaft(Kafka Raft 메타데이터 모드) 설정에서 사용됩니다.
- KAFKA_CFG_LISTENERS=PLAINTEXT://:9092,CONTROLLER://:9093: Kafka 인스턴스에 대한 리스너를 설정합니다. 클라이언트 연결을 위한 PLAINTEXT 리스너를 9092 포트에, 컨트롤러 통신을 위한 CONTROLLER 리스너를 9093 포트에 각각 설정합니다.
- KAFKA_CFG_LISTENER_SECURITY_PROTOCOL_MAP=CONTROLLER:PLAINTEXT,PLAINTEXT:PLAINTEXT: 리스너 이름과 사용할 보안 프로토콜 간의 매핑을 정의합니다. 여기서는 모든 통신을 PLAINTEXT(암호화되지 않은 텍스트)로 설정합니다.
- KAFKA_CFG_CONTROLLER_QUORUM_VOTERS=0@kafka:9093: KRaft 모드에서 사용되는 컨트롤러 퀴럼의 구성을 정의합니다. 노드 ID 0이 9093 포트에서 컨트롤러 역할을 수행하게 됩니다.
- KAFKA_CFG_CONTROLLER_LISTENER_NAMES=CONTROLLER: 컨트롤러 통신에 사용할 리스너의 이름을 지정합니다. 여기서는 CONTROLLER 리스너를 사용합니다.
- KAFKA_CFG_AUTO_CREATE_TOPICS_ENABLE=true: Kafka가 자동으로 토픽을 생성할 수 있도록 설정합니다.
볼륨설정
- volumes
- - "kafka_data:/bitnami/kafka": kafka_data 볼륨을 컨테이너의 /bitnami/kafka 디렉토리에 마운트합니다. 이는 Kafka 데이터의 영구적인 저장을 위해 사용됩니다.
2. docker에서 kafka 실행
compose.yml 파일이 있는 경로에서 아래의 명령어를 통해 kafka를 실행해줍니다.
docker compose up
참고자료
https://github.com/ArminShoeibi/KafkaDockerCompose/blob/main/docker-compose.yml
https://hub.docker.com/r/bitnami/kafka
728x90
반응형
'개발 > Docker' 카테고리의 다른 글
[Docker] [Kafka] cluster 구성하는 방법 (0) | 2024.02.23 |
---|---|
[Docker] [Spring Boot] [Kafka] [ELK] 다른 Docker Container 간 통신 (0) | 2024.02.14 |
[Docker] Dockerfile와 docker compose 파일의 차이 (1) | 2024.02.13 |
[Docker] elasticsearch exited with code 137 에러 해결 (0) | 2024.01.23 |
[Docker] Spring boot 환경에서 Docker로 ELK 사용하기 (0) | 2024.01.23 |