본문 바로가기
Devops

[Kafka] docker를 이용해 kafka 환경 구축하기

by heekng 2022. 8. 16.
반응형

docker를 이용해 kafka 환경 구축하기

kafka 실습 환경을 구축하면서 docker을 이용하기로 결정했습니다.
이유라 함은 처음 사용해보는 kafka이기에 설치 중 어떠한 오류가 발생할 지 모르기 때문이며, 역시나 여러 오류를 접하면서 docker을 이용하길 잘했다는 생각을 했습니다.

zookeeper, kafka image pull

제 클라우드는 arm ubuntu 22.04버전을 사용하고 있습니다.
때문에 zookeeper docker image는 흔히 사용중인 wurstmeister/zookeeper를 이용하지 않았고, 각자 환경에 맞추어 이미지를 받으시면 될 것 같습니다.

docker pull arm64v8/zookeeper
docker pull wurstmeister/kafka

docker-compose.yml 작성

저는 빠른 설치를 위해 docker-compose를 이용해 run하였습니다.

version: '3'

services:
  zookeeper:
    image: arm64v8/zookeeper
    container_name: zookeeper
    ports:
      - "9007:2181"
    networks:
      kafkaNetwork:
        ipv4_address: 10.10.20.141
  kafka:
    image: wurstmeister/kafka
    container_name: kafka
    depends_on:
      - zookeeper
    ports:
      - "9008:9092"
    environment:
      KAFKA_ADVERTISED_HOST_NAME: 10.10.20.142
      KAFKA_ZOOKEEPER_CONNECT: zookeeper:2181
      KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://[ip:port]
    networks:
      kafkaNetwork:
        ipv4_address: 10.10.20.142
networks:
  kafkaNetwork:
    external: true

위 docker-compose.yml에서 확인해야 하는 점이 두가지 있는데요.
network와 KAFKA_ADVERTISED_LISTENERS 옵션입니다.

network의 경우 zookeeper와 kafka를 동일한 네트워크 환경에서 구성할 수 있도록 kafkaNetwork라는 이름으로 네트워크를 생성했습니다.

docker network create -d bridge --subnet 10.10.20.0/24 --gateway 10.10.20.1 kafkaNetwork

이는 필수가 아니니 원하지 않을 경우 생략하셔도 좋습니다.

그리고 KAFKA_ADVERTISED_LISTENERS옵션을 따로 주었는데요.
KAFKA_ADVERTISED_LISTENERS는 외부에서 접속하는 ip와 port를 입력합니다.
이 옵션을 사용하는 이유는 kafka의 네트워크가 테스트하는 환경의 네트워크와 다르기 때문인데요.
저는 따로 만들어 둔 클라우드를 사용했기 때문에 외부 프로젝트에서 연결할 때 사용하는 ip와 port를 입력하여 외부접근을 허용한다는 개념으로 사용했습니다.
이 또한 필수가 아니며, 로컬 컴퓨터의 docker를 이용해 kafka를 띄우는 경우 localhost로도 접근이 가능합니다.

실행하기

docker-compose up -d

이제 작성한 docker-compose.yml을 이용해 실행합니다.

그리고, kafka가 잘 실행되었는지 확인하기 위해 직접 접근해봅니다.

docker exec -it kafka /bin/bash

cd /opt/kafka/bin

/opt/kafka/bin디렉토리는 kafka를 콘솔에서 조작할 수 있는 여러 스크립트가 존재합니다.

위와 같은 여러 쉘 스크립트 파일을 이용해 현재 카프카에 존재하는 토픽을 조회하거나, 데이터를 넣는 작업을 수행할 수 있습니다.

kafka의 여러 콘솔 명령어는 여기서 확인할 수 있습니다.

마침

이렇게 kafka를 docker 환경으로 구축하는 방법을 알아보았습니다.

여러가지 많은 방법이 있지만 도커를 이용하는 방법이 가장 쉽고 빠른 방법이라 생각했습니다.

그리고 저는 KAFKA_ADVERTISED_LISTENERS를 이용하지 않는 바람에 콘솔에서는 정상 이용이 되었지만, 스프링 프로젝트에서는 접근이 안되어 몇 시간 붙잡고 있기도 했습니다.

이 글을 읽으시는 분들은 저와 같은 문제를 만나지 않기를 바랍니다 ㅎㅎ

반응형