일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
Tags
- ELASTIC
- query
- springboot
- 900gle
- Kafka
- matplotlib
- plugin
- 차트
- Java
- Mac
- MySQL
- high level client
- docker
- zip 암호화
- flask
- TensorFlow
- aggregation
- licence delete curl
- License
- analyzer test
- Test
- Elasticsearch
- token filter test
- 파이썬
- license delete
- API
- aggs
- zip 파일 암호화
- Python
- sort
Archives
- Today
- Total
개발잡부
[kafka] docker compose kafka 본문
반응형
version 확인
(base) ➜ kafka docker compose version
Docker Compose version v2.2.3
version: '3.6'
services:
zookeeper1:
container_name: zookeeper1
image: wurstmeister/zookeeper:3.4.6
volumes:
- "./zookeeper/data:/data"
- "./zookeeper/logs:/datalog"
ports:
- "12181:2181"
zookeeper2:
container_name: zookeeper2
image: wurstmeister/zookeeper:3.4.6
volumes:
- "./zookeeper/data:/data"
- "./zookeeper/logs:/datalog"
ports:
- "22181:2181"
zookeeper3:
container_name: zookeeper3
image: wurstmeister/zookeeper:3.4.6
volumes:
- "./zookeeper/data:/data"
- "./zookeeper/logs:/datalog"
ports:
- "32181:2181"
kafka1:
container_name: kafka1
image: wurstmeister/kafka:2.12-2.3.0
restart: on-failure
ports:
- "9095:9092"
volumes:
- /var/run/docker.sock:/var/run/docker.sock
environment:
KAFKA_BROKER_ID: 1
KAFKA_ZOOKEEPER_CONNECT: zookeeper1:2181,zookeeper2:2181,zookeeper3:2181
JMX_PORT: 9093
KAFKA_JMX_OPTS: -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false -Djava.rmi.server.hostname=${EXPOSED_HOSTNAME} -Dcom.sun.management.jmxremote.rmi.port=9093
KAFKA_ADVERTISED_HOST_NAME: ${EXPOSED_HOSTNAME}1
KAFKA_ADVERTISED_PORT: 9092
KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://${EXPOSED_HOSTNAME}1:9095
KAFKA_OFFSETS_TOPIC_REPLICATION_FACTOR: 2
depends_on:
- zookeeper1
- zookeeper2
- zookeeper3
kafka2:
container_name: kafka2
image: wurstmeister/kafka:2.12-2.3.0
restart: on-failure
ports:
- "9096:9092"
volumes:
- /var/run/docker.sock:/var/run/docker.sock
environment:
KAFKA_BROKER_ID: 2
KAFKA_ZOOKEEPER_CONNECT: zookeeper1:2181,zookeeper2:2181,zookeeper3:2181
JMX_PORT: 9093
KAFKA_JMX_OPTS: -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false -Djava.rmi.server.hostname=${EXPOSED_HOSTNAME} -Dcom.sun.management.jmxremote.rmi.port=9093
KAFKA_ADVERTISED_HOST_NAME: ${EXPOSED_HOSTNAME}2
KAFKA_ADVERTISED_PORT: 9092
KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://${EXPOSED_HOSTNAME}2:9096
KAFKA_OFFSETS_TOPIC_REPLICATION_FACTOR: 2
depends_on:
- zookeeper1
- zookeeper2
- zookeeper3
kafka3:
container_name: kafka3
image: wurstmeister/kafka:2.12-2.3.0
restart: on-failure
ports:
- "9097:9092"
volumes:
- /var/run/docker.sock:/var/run/docker.sock
environment:
KAFKA_BROKER_ID: 3
KAFKA_ZOOKEEPER_CONNECT: zookeeper1:2181,zookeeper2:2181,zookeeper3:2181
JMX_PORT: 9093
KAFKA_JMX_OPTS: -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false -Djava.rmi.server.hostname=${EXPOSED_HOSTNAME} -Dcom.sun.management.jmxremote.rmi.port=9093
KAFKA_ADVERTISED_HOST_NAME: ${EXPOSED_HOSTNAME}3
KAFKA_ADVERTISED_PORT: 9092
KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://${EXPOSED_HOSTNAME}3:9097
KAFKA_OFFSETS_TOPIC_REPLICATION_FACTOR: 2
depends_on:
- zookeeper1
- zookeeper2
- zookeeper3
kafka-manager:
container_name: kafka-manager
image: hlebalbau/kafka-manager:2.0.0.2
restart: on-failure
depends_on:
- kafka1
- kafka2
- kafka3
- zookeeper1
- zookeeper2
- zookeeper3
environment:
ZK_HOSTS: zookeeper1:2181
APPLICATION_SECRET: "random-secret"
KM_ARGS: -Djava.net.preferIPv4Stack=true
ports:
- "9000:9000"
- version:
- docker-compose 버젼을 지정한다.
- services:
- docker-compose의 경우 docker 컨테이너로 수행될 서비스들은 services 하위에 기술한다.
- zookeeper:
- 서비스 이름을 zookeeper 로 작성했다.
- service 하위에 작성하면 서비스 이름으로 동작한다.
- image:
- 우리는 여기서 confluentinc/cp-zookeeper:latest 를 이용할 것이다.
- 참고로 실전에서 사용하려면 latest 라는 태그를 사용하지 말고, 정확히 원하는 버젼을 기술해서 사용하길 추천한다.
- latest라고 태그를 지정하면, 매번 컨테이너를 실행할때마다 최신버젼을 다운받아 실행하므로 변경된 버젼으로 인해 원하지 않는 결과를 볼 수 있다. (주의 !!!)
- environment:
- confluentinc 는 몇가지 환경 변수를 설정할 수 있다.
- environment 하위에 필요한 환경을 작성하자.
- ZOOKEEPER_SERVER_ID:
- zookeeper 클러스터에서 유일하게 주키퍼를 식별할 아이디이다.
- 동일 클러스터 내에서 이 값은 중복되면 안된다. 단일 브로커이기 때문에 이 값은 의미가 없다.
- ZOOKEEPER_CLIENT_PORT:
- zookeeper_client_port를 지정한다. 여기서는 기본 주키퍼의 포트인 2181로 지정한다.
- 즉 컨테이너 내부에서 주키퍼는 2181로 실행된다.
- ZOOKEEPER_TICK_TIME:
- zookeeper이 클러스터를 구성할때 동기화를 위한 기본 틱 타임을 지정한다.
- millisecond로 지정할 수 있으며 여기서는 2000으로 설정했으니 2초가 된다.
- ZOOKEEPER_INIT_LIMIT:
- 주키퍼 초기화를 위한 제한 시간을 설정한다.
- 주키퍼 클러스터는 쿼럼이라는 과정을 통해서 마스터를 선출하게 된다. 이때 주키퍼들이 리더에게 커넥션을 맺을때 지정할 초기 타임아웃 시간이다.
- 타임아웃 시간은 이전에 지정한 ZOOKEEPER_TICK_TIME 단위로 설정된다.
- 우리는 ZOOKEEPER_TICK_TIME을 2000으로 지정했고, ZOOKEEPER_INIT_LIMIT을 5로 잡았으므로 2000 * 5 = 10000 밀리세컨이 된다. 즉, 10초가 된다.
- 이 옵션은 멀티 브로커에서 유효한 속성이다.
- ZOOKEEPER_SYNC_LIMIT:
- 이 시간은 주키퍼 리더와 나머지 서버들의 싱크 타임이다.
- 이 시간내 싱크응답이 들어오는 경우 클러스터가 정상으로 구성되어 있늠을 확인하는 시간이다.
- 여기서 2로 잡았으므로 2000 * 2 = 4000 으로 4초가 된다.
- 이 옵션은 멀티 브로커에서 유효한 속성이다.
- kafka
- kafka 브로커 이름을 지정한다.
- image:
- kafka 브로커는 confluentinc/cp-kafka:latest 를 이용하였다.
- 역시 태그는 latest보다는 지정된 버젼을 사용하는것을 추천한다.
- depends_on:
- docker-compose 에서는 서비스들의 우선순위를 지정해 주기 위해서 depends_on 을 이용한다.
- zookeeper 라고 지정하였으므로, kafka는 zookeeper이 먼저 실행되어 있어야 컨테이너가 올라오게 된다.
- ports:
- kafka 브로커의 포트를 의미한다.
- 외부포트:컨테이너내부포트 형식으로 지정한다.
- environment:
- kafka 브로커를 위한 환경 변수를 지정한다.
- KAFKA_BROKER_ID:
- kafka 브로커 아이디를 지정한다. 유니크해야하며 지금 예제는 단일 브로커기 때문에 없어도 무방하다.
- KAFKA_ZOOKEEPER_CONNECT:
- kafka가 zookeeper에 커넥션하기 위한 대상을 지정한다.
- 여기서는 zookeeper(서비스이름):2181(컨테이너내부포트) 로 대상을 지정했다.
- KAFKA_ADVERTISED_LISTENERS:
- 외부에서 접속하기 위한 리스너 설정을 한다.
- KAFKA_LISTENER_SECURITY_PROTOCOL_MAP:
- 보안을 위한 프로토콜 매핑이디. 이 설정값은 KAFKA_ADVERTISED_LISTENERS 과 함께 key/value로 매핑된다.
- KAFKA_INTER_BROKER_LISTENER_NAME:
- 도커 내부에서 사용할 리스너 이름을 지정한다.
- 이전에 매핑된 PLAINTEXT가 사용되었다.
- KAFKA_OFFSETS_TOPIC_REPLICATION_FACTOR:
- single 브로커인경우에 지정하여 1로 설정했다.
- 멀티 브로커는 기본값을 사용하므로 이 설정이 필요 없다.
- KAFKA_GROUP_INITIAL_REBALANCE_DELAY_MS:
- 카프카 그룹이 초기 리밸런싱할때 컨슈머들이 컨슈머 그룹에 조인할때 대기 시간이다.
반응형
'Kafka' 카테고리의 다른 글
[kafka] Mac OS kafka 3.5 (0) | 2023.06.23 |
---|---|
[kafka] kafka 버전 확인 (0) | 2022.10.13 |
[kafka] kafka-full (0) | 2022.08.27 |
Error response from daemon: Container 2c8318196be216b730907022eccaffc314fdd7e5d8e0286ea3f6b1d219acd5c0 is restarting, wait until the container is running (0) | 2022.08.27 |
[kafka] docker dompose multi broker kafka 3.6 (0) | 2022.08.27 |
Comments