DevOps/Kafka
기본기있는-카프카깡패 (5) 카프카 브로커 설치하기
키깡
2025. 4. 7. 22:35
728x90
계속되는 브로커 설치 시 오류로 인해... 우선 스겜 해보겠다는 마음으로 confluent의 카프카 이미지를 사용하기로 했다...
- 구성도
아래 처럼 docker 안에서 zk-net이라는 bridge 네트워크를 만들고 주키퍼 3대 + 브로커 1대 구성으로 테스트 해볼 것이다.
📦 Host Machine (Docker)
│
├── 🐳 Container: zookeeper-1
│ - 내부 포트: 2181
│ - 외부 포트: 2181
│ - ZOO_MY_ID: 1
│ - 서버 ID: server.1
│
├── 🐳 Container: zookeeper-2
│ - 내부 포트: 2181
│ - 외부 포트: 2182
│ - ZOO_MY_ID: 2
│ - 서버 ID: server.2
│
├── 🐳 Container: zookeeper-3
│ - 내부 포트: 2181
│ - 외부 포트: 2183
│ - ZOO_MY_ID: 3
│ - 서버 ID: server.3
│
├── 🐳 Container: kafka
│ - 내부 포트: 9092
│ - 외부 포트: 9092
│ - ZOOKEEPER_CONNECT:
│ zookeeper-1:2181,
│ zookeeper-2:2181,
│ zookeeper-3:2181
│
└── 🕸 네트워크: zk-net (Docker user-defined bridge)
- docker로 network를 만들어준다.
docker network create zk-net
다시 주키퍼 띄우기
- 주키퍼쪽 네트워크 설정 external로 바꿔주기.
- ZOO_CLIENT_PORT를 2181로 설정하여야 함.
services:
zookeeper-1:
image: zookeeper:latest
hostname: zookeeper-1
container_name: zookeeper-1
ports:
- "2181:2181"
environment:
ZOO_MY_ID: 1
ZOO_CLIENT_PORT: 2181
ZOO_SERVERS: server.1=zookeeper-1:2888:3888 server.2=zookeeper-2:2888:3888 server.3=zookeeper-3:2888:3888
networks:
- zk-net
zookeeper-2:
image: zookeeper:latest
hostname: zookeeper-2
container_name: zookeeper-2
ports:
- "2182:2181"
environment:
ZOO_MY_ID: 2
ZOO_CLIENT_PORT: 2181
ZOO_SERVERS: server.1=zookeeper-1:2888:3888 server.2=zookeeper-2:2888:3888 server.3=zookeeper-3:2888:3888
networks:
- zk-net
zookeeper-3:
image: zookeeper:latest
hostname: zookeeper-3
container_name: zookeeper-3
ports:
- "2183:2181"
environment:
ZOO_MY_ID: 3
ZOO_CLIENT_PORT: 2181
ZOO_SERVERS: server.1=zookeeper-1:2888:3888 server.2=zookeeper-2:2888:3888 server.3=zookeeper-3:2888:3888
networks:
- zk-net
networks:
zk-net:
external: true
브로커 띄우기
- 브로커 올리기
services:
kafka-1:
image: confluentinc/cp-kafka:7.5.0
hostname: kafka-1
container_name: kafka-1
ports:
- "9092:9092"
environment:
KAFKA_BROKER_ID: 1
KAFKA_ZOOKEEPER_CONNECT: zookeeper-1:2181,zookeeper-2:2181,zookeeper-3:2181
KAFKA_LISTENER_SECURITY_PROTOCOL_MAP: PLAINTEXT:PLAINTEXT
KAFKA_LISTENERS: PLAINTEXT://0.0.0.0:9092
KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://kafka-1:9092
KAFKA_LOG_DIRS: /tmp/kafka-logs
# 브로커 1개용
KAFKA_OFFSETS_TOPIC_REPLICATION_FACTOR: 1
KAFKA_TRANSACTION_STATE_LOG_REPLICATION_FACTOR: 1
KAFKA_TRANSACTION_STATE_LOG_MIN_ISR: 1
networks:
- zk-net
networks:
zk-net:
external: true
- docker exec -it kafka sh
- 로그 세그먼트는 /tmp/kafka-logs에 저장
토픽 생성하고 확인
sh-4.4$ /usr/bin/kafka-topics --bootstrap-server localhost:9092 --create --replication-factor 1 --partitions 1 --topic test
Created topic test.
sh-4.4$ /usr/bin/kafka-topics --bootstrap-server localhost:9092 --describe --topic test
Topic: test TopicId: 9cV-8X4fTQWYnV-LAcVeyw PartitionCount: 1 ReplicationFactor: 1 Configs:
Topic: test Partition: 0 Leader: 1 Replicas: 1 Isr: 1
test 토픽에 메시지 쓰고 읽기
- kafka-console-producer 통해 토픽에 메시지 작성하고, kafka-console-consumer 명령어로 토픽의 메시지 읽기
sh-4.4$ kafka-console-producer --bootstrap-server localhost:9092 --topic test
>naa01
>naa02
>^C
sh-4.kafka-console-consumer --bootstrap-server localhost:9092 --topic test --from-beginning
naa01
naa02