본문 바로가기

개인 프로젝트

리눅스 서버에 Docker Compose로 Kafka 구동하기

1. 서론

이번에 회사 동기들과 지연이체 서비스를 구현해보려고 한다.

시작은 아래 카카오 테크 발표 영상이었고, 우리의 목적은 카프카를 공부하고 적용해보자는 것에 있다.

https://www.youtube.com/watch?v=LECTNX8WDHo&ab_channel=kakaotech

 

가장 먼저 서로 다른 로컬 환경이지만 동일하게 테스트하기 위해서 Docker Compose를 사용하기로 했다. 컨테이너로는 zookeeper, kafka, redis, postgreSQL을 띄우고, API 서버는 로컬로 실행하여 테스트해보려고 한다.

 

우선 카프카부터 시작해보자!

 

2. 본론

가장 먼저 docker-compose가 설치되어있는지 확인한다. 만약 없다면 새로 설치한다.

# 버전 확인
docker-compose --version

# 없다면 설치
sudo apt update
sudo apt install docker-compose

 

아래와 같이 docker-compose.yml 파일을 작성 후 실행한다.

services:
  zookeeper:
    image: bitnami/zookeeper:latest
    container_name: zookeeper
    environment:
      - ALLOW_ANONYMOUS_LOGIN=yes
    ports:
      - "2181:2181"
    volumes:
      - /etc/localtime:/etc/localtime:ro
      - /etc/timezone:/etc/timezone:ro

  kafka:
    image: bitnami/kafka:latest
    container_name: kafka
    environment:
      - KAFKA_BROKER_ID=1
      - KAFKA_CFG_ZOOKEEPER_CONNECT=zookeeper:2181
      - ALLOW_PLAINTEXT_LISTENER=yes
      - KAFKA_CFG_LISTENERS=PLAINTEXT://:9092
      - KAFKA_CFG_ADVERTISED_LISTENERS=PLAINTEXT://localhost:9092
    ports:
      - "9092:9092"
    depends_on:
      - zookeeper
# docker-compose 실행
sudo docker-compose up -d

# 컨테이너 확인
sudo docker ps

위와 같이 뜨면 성공이다.

 

이제 카프카 전송되는 걸 테스트해보자. 기존 터미널에 아래 명령어를 입력한다. 메시지를 제공하는 역할이다.

# 카프카 컨테이너 접속
docker exec -it kafka bash

# test-topic 생성
kafka-topics.sh --create --topic test-topic --bootstrap-server localhost:9092

# producer 실행
kafka-console-producer.sh --topic test-topic --bootstrap-server localhost:9092

 

한편, 메시지를 소비하는 새로운 터미널을 열고 아래 명령어를 입력한다.

# consumer 실행
docker exec -it kafka kafka-console-consumer.sh --topic test-topic --bootstrap-server localhost:9092 --from-beginning

 

그리고 producer에 메시지를 입력하면 consumer에서 확인할 수 있다. (위가 producer, 아래가 consumer)

 

3. 결론

오늘은 간단하게 예제 코드로 docker-compose 위에서 카프카를 작동시켜보았다. 다음에는 카프카에 대해 좀 더 자세히 알아보고 코드를 수정해보자.