docker-compose.yml or .yaml
version: '3.7'
services:
zk1:
container_name: zookeeper1
image: wurstmeister/zookeeper:latest
restart: always
hostname: zk1
ports:
- "2181:2181"
environment:
ZOO_MY_ID: 1
ZOO_SERVERS: server.1=zk1:2888:3888;2181 server.2=zk2:2888:3888;2181 server.3=zk3:2888:3888;2181
volumes:
- "~/zk-cluster/zk1/data:/data"
zk2:
container_name: zookeeper2
image: wurstmeister/zookeeper:latest
restart: always
hostname: zk2
ports:
- "2182:2181"
environment:
ZOO_MY_ID: 2
ZOO_SERVERS: server.1=zk1:2888:3888;2181 server.2=zk2:2888:3888;2181 server.3=zk3:2888:3888;2181
volumes:
- "~/zk-cluster/zk2/data:/data"
zk3:
container_name: zookeeper3
image: wurstmeister/zookeeper:latest
restart: always
hostname: zk3
ports:
- "2183:2181"
environment:
ZOO_MY_ID: 3
ZOO_SERVERS: server.1=zk1:2888:3888;2181 server.2=zk2:2888:3888;2181 server.3=zk3:2888:3888;2181
volumes:
- "~/zk-cluster/zk3/data:/data"
kafka1:
container_name: kafka1
image: wurstmeister/kafka:latest
restart: on-failure
depends_on:
- zk1
- zk2
- zk3
ports:
- "9092:9092"
environment:
KAFKA_BROKER_ID: 1
KAFKA_ADVERTISED_HOST_NAME: 34.64.123.128
BOOTSTRAP_SERVERS: 34.64.123.128:9092, 34.64.123.128:9093, 34.64.123.128:9094
KAFKA_ZOOKEEPER_CONNECT: "zk1:2181,zk2:2182,zk3:2183"
KAFKA_OFFSETS_TOPIC_REPLICATION_FACTOR: 2
kafka2:
container_name: kafka2
image: wurstmeister/kafka:latest
restart: on-failure
depends_on:
- zk1
- zk2
- zk3
ports:
- "9093:9092"
volumes:
- /var/run/docker.sock:/var/run/docker.sock
environment:
KAFKA_BROKER_ID: 2
KAFKA_ADVERTISED_HOST_NAME: 34.64.123.128
BOOTSTRAP_SERVERS: 34.64.123.128:9092, 34.64.123.128:9093, 34.64.123.128:9094
KAFKA_ZOOKEEPER_CONNECT: "zk1:2181,zk2:2182,zk3:2183"
KAFKA_OFFSETS_TOPIC_REPLICATION_FACTOR: 2
kafka3:
container_name: kafka3
image: wurstmeister/kafka:latest
restart: on-failure
depends_on:
- zk1
- zk2
- zk3
ports:
- "9094:9092"
volumes:
- /var/run/docker.sock:/var/run/docker.sock
environment:
KAFKA_BROKER_ID: 3
KAFKA_ADVERTISED_HOST_NAME: 34.64.123.128
BOOTSTRAP_SERVERS: 34.64.123.128:9092, 34.64.123.128:9093, 34.64.123.128:9094
KAFKA_ZOOKEEPER_CONNECT: "zk1:2181,zk2:2182,zk3:2183"
KAFKA_OFFSETS_TOPIC_REPLICATION_FACTOR: 2
kafka-ui:
image: provectuslabs/kafka-ui
container_name: kafka-ui
ports:
- "10000:8080"
restart: always
environment:
- KAFKA_CLUSTERS_0_NAME=local
- KAFKA_CLUSTERS_0_BOOTSTRAPSERVERS=:34.64.123.128:9092,34.64.123.128:9093,34.64.123.128:9094
- KAFKA_CLUSTERS_0_ZOOKEEPER=zk1:2181,zk2:2182,zk1:2183
version: docker-compose 버전을 지정합니다
services: docker-compose의 경우 docker 컨테이너로 수행될 서비스들은 services 하위에 기술합니다.
zookeeper: 서비스 이름을 zk1, zk2, zk3으로 작성했습니다.
service 하위에 작성하면 서비스 이름으로 동작합니다.
image: wurstmeister/zookeeper:latest
environment: 몇몇 환경변수를 지정할 수 있습니다.
ZOO_MY_ID: zookeeper에서 앙상블이라고 하는 클러스터 내에서 주키퍼를 구별하기 위한 환경변수 id는 반드시 유일해야 하며 1~255 사이에 값이 들어가야 합니다.
ZOO_SERVERS**: zookeeper 앙상블(클러스터) 내 시스템 목록을 지정 즉 클러스터 내 주키퍼 노드 리스트들을 입력합니다
server.id=::[:role];[:] 형식으로 입력합니다
kafka
image: wurstmeister/kafka:latest
depends_on:
docker-compose에서는 서비스들의 우선순위를 지정해 주기 위해서 depends_on을 이용합니다.
zk라고 지정하였으므로, kafka는 zookeeper이 먼저 실행되어 있어야 컨테이너가 올라오게 됩니다.
ports:
kafka 브로커의 포트를 의미합니다.
외부포트 : 컨테이너내부 포트 형식으로 지정합니다.
environment:
KAFKA_BROKER_ID: 클러스터 각 노드에 할당할 브로커의 아이디 유니크 해야 합니다.
KAFKA_ADVERTISED_HOST_NAME: kafka 브로커에 사용할 host 정보
BOOTSTRAP_SERVERS: kafka 브로커 리스트를 나열해 주면 됩니다.
KAFKA_ZOOKEEPER_CONNECT: 연결할 zookeeper를 지정해 줍니다.
KAFKA_OFFSETS_TOPIC_REPLICATION_FACTOR: 토픽 파티션의 복제 개수
kafka-ui 는 선택사항입니다. 개괄적인 정보를 web-ui로 제공 받고 싶으시면 추가하시는 것을 추천 드립니다.
Local의 경우 : host.docker.internal 로 변경해주면 됩니당 ~
docker-compose up -d
"-d" 는 백그라운드 실행을 위한 옵션이다.
docker-compose ps
자 이제 docker-compose로 kafka cluster를 구축하였으니 ui로 확인해보자.
주소창에 "<외부 ip>:10000 " 를 입력해보자.
localhost:10000 으로 입력해주세용 !
다중 클러스터 관리 : 모든 클러스터를 한 곳에서 모니터링 및 관리
메트릭 대시보드를 통한 성능 모니터링 : 대시보드로 주요 Kafka 메트릭 추적
Kafka Broker 보기 : 주제 및 파티션 할당, 컨트롤러 상태 보기
Kafka 주제 보기 : 파티션 수, 복제 상태 및 사용자 정의 구성 보기
소비자 그룹 보기 : 파티션별 고정 오프셋, 결합 및 파티션별 지연 보기
메시지 찾아보기 : JSON, 일반 텍스트 및 Avro 인코딩으로 메시지 찾아보기
동적 주제 구성 : 동적 구성으로 새 주제 생성 및 구성
구성 가능한 인증 : Github/Gitlab/Google OAuth 2.0(옵션)으로 설치 보안
⭐ 다음은 logstah를 활용하여 django의 로그데이터를 받아보도록 하겠습니다. ⭐