개발이 취미인 사람

[Kafka] - 로컬 개발 환경 구축 본문

백앤드(Back-End)/Kafka

[Kafka] - 로컬 개발 환경 구축

RyanSin 2024. 7. 20. 23:34
반응형

개요

안녕하세요 이번 시간에는 로컬 PC 환경에 Kafka 환경을 구축하고 토픽을 생성해서 콘솔 환경에서 메시지를 전송하고 메시지를 읽는 실습 시간을 가져보겠습니다.

 

혹시 이전 시간에 Kafka에 대한 기본 개념을 학습하고 오지 않으신 분들은 다음 링크를 통해 학습하고 오시는 걸 추천드리겠습니다.

[Kafka] - 기본 개념

 

[Kafka] - 기본 개념

개요안녕하세요. 이번 시간에는 Apache Kafka의 대해 알아보겠습니다.  Apache Kafka(이하: 카프카)는 아파치 재단에서 만든 오픈소스 메시지 브로커 프로젝트입니다.아파치 재단은 Apache Web Server, HBase

any-ting.tistory.com

 

개발환경 구축

물리적인 PC환경에 도커를 설치를 하거나 클라우드에 생성하는 방법도 있지만 Docker 환경에서 카프카를 구축하겠습니다.

아무래도 카프카 서버를 실제 구축해서 운영하는 부분보다는 토픽을 생성하고 메시지를 발송하고 수신하는 부분에 초점을 맞추도록 하겠습니다.

 

만약 로컬 환경에 Docker Desktop을 설치하지 않으신 분들은 꼭 설치하시면 감사하겠습니다.

 

Docker Desktop: The #1 Containerization Tool for Developers | Docker

Docker Desktop is collaborative containerization software for developers. Get started and download Docker Desktop today on Mac, Windows, or Linux.

www.docker.com

 

 

자 그럼 Docker Desktop을 설치했다는 가정하에 아래 파일을 다운로드해 주신 다음 docker-compose -f ./kafka-single.yaml up -d 이라는 명령어를 실행시켜 줍니다.

 

kafka-single.yaml
0.00MB

 

 

kafka-single.yaml 파일 내용은 아래와 같습니다.

version: "3"

networks:
  kafka-single:
    driver: bridge

services:
  kafka:
    image: bitnami/kafka:latest
    container_name: kafka-single
    ports:
      - "9092:9092"
    environment:
      - KAFKA_CFG_PROCESS_ROLES=broker,controller
      - KAFKA_CFG_NODE_ID=1
      - ALLOW_PLAINTEXT_LISTENER=yes
      - KAFKA_CFG_LISTENERS=PLAINTEXT://:9092,CONTROLLER://:9093
      - KAFKA_CFG_LISTENER_SECURITY_PROTOCOL_MAP=CONTROLLER:PLAINTEXT,PLAINTEXT:PLAINTEXT
      - KAFKA_CFG_CONTROLLER_QUORUM_VOTERS=1@localhost:9093
      - KAFKA_CFG_CONTROLLER_LISTENER_NAMES=CONTROLLER
      - KAFKA_CFG_LOG_DIRS=/bitnami/kafka/data
      - KAFKA_CFG_OFFSETS_TOPIC_REPLICATION_FACTOR=1
      - KAFKA_CFG_TRANSACTION_STATE_LOG_MIN_ISR=1
      - KAFKA_CFG_TRANSACTION_STATE_LOG_REPLICATION_FACTOR=1
      - KAFKA_CFG_MIN_INSYNC_REPLICAS=1
    volumes:
      - ./.data/kafka:/bitnami/kafka/data
    networks:
      - kafka-single

 

많은 내용들이 있지만 상세한 환경변수 정보는 다음 링크를 통해 필요한 설정을 추가하시는 걸 추천드리겠습니다.

https://hub.docker.com/r/bitnami/kafka

 

https://hub.docker.com/r/bitnami/kafka

 

hub.docker.com

 

위 yaml 파일을 보시면 중요한 부분 한 가지는 Zookeeper 서버를 설정하는 부분이 없습니다. 

 

카프카는 3.5 버전부터는 Zookeeper 서버를 사용하지 않고 독립적인 카프카 실행 환경을 구축할 수 있게 변경되었습니다.

공식 문서 내용을 꼭 참고하시는 걸 추천드리겠습니다. 

 

Apache Kafka

Apache Kafka: A Distributed Streaming Platform.

kafka.apache.org

 

 

토픽 생성 및 메시지 발송

위 매뉴얼을 그대로 잘 따라 했다면 아래 이미지와 같이 kafka 서버가 실행되는 걸 확인할 수 있습니다.

Kafka Docker-Desktop

 

그럼 이제 kafka-single 가상 환경에 접속해서 토픽을 생성하고 메시지 수신과 발신을 확인해 보겠습니다.

 

docker-compose 명령어를 실행시킨 디렉터리 위치로 이동합니다. 이동 후 아래와 같이 두 개의 터미널을 실행시킵니다.

 

이제 가상환경에 접속하기 위해 각 터미널에 다음과 같은 명령어를 실행시키겠습니다.

docker exec -it kafka-single /bin/bash

 

그럼 뭔가 처음 보는 이상한 글자가 보입니다.

가상 환경 접속

 

위와 같은 이미지가 보인다면 정상적으로 접속이 되었습니다.

 

이제 순차적으로 토픽을 조회하고 생성해 보겠습니다.

 

- 토픽 조회

kafka-topics.sh --list --bootstrap-server localhost:9092

 

- 토픽 생성

kafka-topics.sh --create --topic test-topic --bootstrap-server localhost:9092 --partitions 1 --replication-factor 1

 

- 토픽 삭제

kafka-topics.sh --delete --topic test-topic --bootstrap-server localhost:9092

 

 

가장 먼저 토픽 조회 명령어를 실행해 보겠습니다. 아무 내용도 콘솔에 출력되지 않았다면 토픽이 존재하지 않다는 걸 알 수 있습니다.

토픽 조회

 

그럼 test-topic이라는 토픽을 생성해 보겠습니다.

토픽 생성

Created topic test-topic이라는 글자가 출력되면 정상적으로 토픽을 생성했다고 생각하시면 됩니다.

 

토픽 삭제 명령어도 실행시켜 다음과 같이 출력되면 성공입니다.

토픽 삭제

 

자 그럼 이제 Producer 콘솔과 Consumer 콘솔에 접속을 해보겠습니다.

 

- Producer 콘솔 실행

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

 

 

- Consumer 콘솔 실행

kafka-console-consumer.sh --topic test-topic --bootstrap-server localhost:9092 --from-beginning

 

위 두 명령어를 실행하면 아래와 같은 화면을 확인할 수 있습니다.

Producer Console & Consumer Console

 

Producer 콘솔에서 메시지를 입력해서 엔터를 치면 Consumer 콘솔에 메시지가 출력되는 걸 확인할 수 있습니다.

 

메시지 발송 테스트

 

아래는 Kafka-ui 웹 사이트에서 확인한 내용입니다.

Kafka-ui

 

우리가 발송한 메시지가 메시지 큐에 잘 전송되고 컨슈머는 해당 데이터를 가져가는 걸 확인할 수 있습니다.

 

Kafka-ui yaml 파일은 아래 공유하도록 하겠습니다. 참고로 꼭! Kafka 서버를 먼저 실행시키고 Kafka-ui 서버를 실행해야 합니다.

kafka-single-ui.yaml
0.00MB

 

 

이번 시간에는 로컬 환경에서 카프카를 가볍게 설정해서 토픽을 생성하고 메시지를 발송 수신 테스트를 진행했습니다.

 

처음 하시는 분들은 복잡할 수 있기 때문에 질문은 댓글로 부탁드리겠습니다.