오늘은 Docker를 이용하여 Kafka 서버를 구축하는 방법에 대해 알아보겠습니다.
이 글은 CentOS 7 환경에서의 실행 과정에 대한 설명이니 참고 바랍니다.
1. docker 이미지 선택
docker search kafka
docker search 명령어를 통해 docker 이미지 파일을 검색합니다.

가장 star이 많은 이미지를 선택하겠습니다.
2. docker-compose.yml 파일 작성
어떤 docker image 사용할 지 정했으니 이제 docker-compose로 kafka 환경을 구축하겠습니다.
kafka는 항상 zookeeper와 함께 동작해야 하기 때문에 여러 docker container를 실행하기 편리한 docker-compose를 사용합시다.
우선 docker-compose를 사용할 수 있는지 확인을 해봅시다.
docker-compose version

docker-compose가 설치되어 있는 것을 확인했으면 docker-compose.yml을 작성해줍니다.
(만약 dokcer-compose가 설치되어 있지 않은 경우, 이 글을 통해 설치하신 후에 진행하시길 바랍니다.)
docker-compose.yml
version: '2'
services:
zookeeper:
image: wurstmeister/zookeeper
container_name: zookeeper
ports:
- "2181:2181"
kafka:
image: wurstmeister/kafka:2.12-2.5.0
container_name: kafka
ports:
- "9092:9092"
environment:
KAFKA_ADVERTISED_HOST_NAME: 127.0.0.1
KAFKA_ZOOKEEPER_CONNECT: zookeeper:2181
volumes:
- /var/run/docker.sock:/var/run/docker.sock
docker-compose.yml 파일 작성이 완료 되었다면, docker-compose.yml을 실행시킵니다.
docker-compose up -d

저는 docker-compose.yml 파일 명을 docker-compose-kafka.yml로 하였기 때문에 docker-compose.yml을 실행할 때 -f 옵션을 사용하여 실행하였습니다.
docker-compose.yml으로 생성했을 경우, docker-compose.yml up -d로 실행시키면 됩니다.
정상적으로 동작이 되었는지 확인해봅시다.
아래와 같이 conatiner가 정상적으로 실행 된 것을 확인할 수 있습니다.
docker container ls

3. Kafka 바이너리 파일 다운로드
Kafka가 제대로 실행되었는지 확인하기 위해 공식 사이트에서 제공하는 kafka 바이너리 파일들을 다운로드 합니다.
여기서 주의할 점은 kafka 컨테이너의 실행 이미지 버전과 kafka 바이너리 파일의 버전이 동일해야 합니다.
kafka 바이러니 파일 다운로드 경로
https://kafka.apache.org/downloads
Apache Kafka
Apache Kafka: A Distributed Streaming Platform.
kafka.apache.org
# kafka 바이너리 파일 압축 풀 경로로 이동
# 바이너리 파일 다운로드
wget https://archive.apache.org/dist/kafka/2.5.0/kafka_2.12-2.5.0.tgz
# 압축 풀기
tar -zxvf kafka_2.12-2.5.0.tgz


기본적인 준비는 끝났습니다!!
4. Topic 생성 및 조회, 삭제
먼저 kafka 컨테이너에 topic을 만들어 보겠습니다.
bin/kafka-topics.sh --create --topic quickstart-events --bootstrap-server localhost:9092

- --create : 새로운 토픽을 만들 때 사용하는 옵션
- --bootstarp-server : 연결할 Kafka 서버 (host:port)
이 옵션 추가 시, 직접 zookeeper에 연결하지 않아도 됩니다.
아래의 명령어를 통해 생성한 Topic의 상세 정보를 확인 할 수 있습니다.
bin/kafka-topics.sh --describe --topic quickstart-events --bootstrap-server localhost:9092

- --describe : 운영상에 필요한 Topic의 상세정보를 보여줍니다.
생성한 topic을 삭제하고 싶을 경우 아래와 같이 --delete 옵션을 사용하여 삭제할 수 있습니다.
bin/kafka-topics.sh --delete --topic quickstart-events --bootstrap-server localhost:9092

- --delete : topic을 삭제학 위해 server.properties 파일에서 delete.topic.enable=true 설정을 추가해줘야 합니다.
5. Producer, Consumer 옵션 확인 및 메시지 생산/소비
Producer 관련 옵션 확인
bin/kafka-console-producer.sh --help
Topic에 메시지를 보냅니다. (메시지 생산)
bin/kafka-console-producer.sh --broker-list localhost:9092 --topic test
> hello kafka
> test kafka
Consumer 관련 옵션 확인
bin/kafka-console-consumer.sh --help
새로운 터미널을 열어 생산된 메시지를 확인해봅니다. (메시지 소비)
bin/kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic test --from-beginning
- --from-beginning : Consumer에게 설정된 offset이 없으므로 가장 최신의 메시지 대신 먼저 도착한 메시지부터 읽도록 하는 옵션입니다.
producer에서 메시지를 보내면 Consumer에서 바로 확인이 가능합니다.

이것으로 Docker를 이용한 Kafka 환경 구성 및 간단한 메시지 생산/소비를 실습해보았습니다.
다음에는 Spring Boot 프로젝트와 Kafka를 연동하여 사용하는 방법에 대해 알아보도록 하겠습니다.
https://kafka.apache.org/quickstart
'OpenSource > Kafka' 카테고리의 다른 글
[Kafka] Message, Topic, Partition (0) | 2021.11.04 |
---|---|
[Kafka] Consumer Group (0) | 2021.11.03 |
[Kafka] Spring Boot에 Kafka 연동하기 #2 (0) | 2021.10.27 |
[Kafka] Spring Boot에 Kafka 연동하기 #1 (0) | 2021.10.21 |
[Kafka] Kafka의 구성 요소 (0) | 2021.10.20 |