Python

[KAFKA] 대용량 센서데이터 저장 처리 - 환경설정

최강깜시 2025. 5. 27. 13:14

회사에서 테스트 중에 있는 프로젝트 중

센서 하나에서 초당 3200개의 데이터를 보내는걸 DB 저장하고 그래프로 시각화 해야 하는 내용이 있었다.

단순히 thread를 돌려서 웹으로 처리하는 방식으로 친구들이 처리 하고 있는데.

그건 1개의 센서에 대해서는 가능해 보이지만 다수의 센서에서 초당 3200개는 무리로 보였다.

그래서 나도 테스트 작업 한번 해 보기로 하고 Python으로 작성을 시작하였다.

 


환경 구성 : Python, Kafka Python Client(kafka-python), FastAPI
Docker 환경 : Kafka, zookeeper
개발 : VSCode

 

나는 VSCode에서 터미널을 사용해서 진행한다.

탐색기 등에서 프로젝트 폴더를 생성하고 VSCode의 파일에서 Open Folder...을 클릭하여 해당 프로젝트 폴더를 연다.

 

1. Docker desktop 설치

윈도우에서 작성했기 때문에 docker desktop를 설치했다.

https://www.docker.com/products/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

 

2. kafka 및 zookeeper 설치

Docker에 kafka와 zookeeper을 설치한다.

kafka가 zookeeper에 의존하여서 둘다 설치해야 한단다.

설치를 위해 VSCode 프로젝트 폴더에 docker-compose.yml 파일을 생성한다.

version: '3.8'

services:
  zookeeper:
    image: confluentinc/cp-zookeeper:7.5.1
    container_name: zookeeper
    ports:
      - "2181:2181"
    environment:
      ZOOKEEPER_CLIENT_PORT: 2181
      ZOOKEEPER_TICK_TIME: 2000

  kafka:
    image: confluentinc/cp-kafka:7.5.1
    container_name: kafka
    depends_on:
      - zookeeper
    ports:
      - "9092:9092"
    environment:
      KAFKA_BROKER_ID: 1
      KAFKA_ZOOKEEPER_CONNECT: zookeeper:2181
      KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://localhost:9092
      KAFKA_OFFSETS_TOPIC_REPLICATION_FACTOR: 1

파일을 생성하고 프로젝트 폴더에서 컨테이너를 올린다.

프로젝트폴더> docker-compose up -d

그리고 확인한다.

프로젝트폴더> docker ps

이런식으로 출력이 된다.

 

3. kafka CLI 도구 설치

프로젝트폴더> docker exec -it kafka bash

위의 명령어로 docker의 kafka 컨테이너에 접근한다.

그리고 kafka 토픽을 생성한다.

kafka-topics \
  --bootstrap-server localhost:9092 \      # Kafka 브로커의 주소 지정 (로컬의 기본 포트)
  --create \                               # 새로운토픽생성
  --topic sensor_data \                    # 생성할 토픽 이름 지정
  --partitions 3 \                         # 해당 토픽을 3개의 파티션으로 분할 (병렬 처리)
  --replication-factor 1                   # 복제 개수 설정 (1이면 복제 없음, 단일 브로커 환경에 적합)

토픽생성 확인

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

저렇게 보이면 성공.

 

4. Python 클라이언트 설치

프로젝트폴더> pip install kafka-python

 

여기까지가 환경 설정 끝.