💡 Apache Kafka - 실시간으로 스트림 데이터를 수집하고 처리하는 데 최적화된 ‘분산 이벤트 스트리밍 플랫폼(Distributed Data Streaming Platform)’입니다. 이는 실시간으로 발생하는 대량의 데이터를 중앙 허브를 통해 흐르도록 설계되어 있습니다. 이를 통해 데이터의 일관성을 유지하고 시스템 전반의 복잡성을 줄일 수 있습니다.
- 이러한 다량의 데이터는 A 지점에서 B 지점까지 만의 데이터가 이동되는 것뿐만 아니라, A 지점에서 Z지점까지의 필요한 모든 곳에 대규모 데이터를 동시에 전달할 수 있습니다. - 현대적인 데이터 파이프라인 구축에 필수적인 도구로 자리 잡았으며, Netflix, LinkedIn, Uber 등 많은 기업들이 핵심 인프라로 사용하고 있습니다.
[ 더 알아보기 ] 💡 Kafka에 의해 처리되는 스트림(Stream)과 스트리밍(Streaming)은 무엇일까?
- 스트림(Stream)이란 시간에 따라 연속적으로 발생하는 데이터의 흐름을 의미합니다. 예를 들어, 실시간 주식 거래 데이터, SNS 피드, IoT 센서 데이터 등이 스트림의 예시입니다. - 스트리밍(Streaming)**은 이러한 데이터 스트림을 실시간으로 처리하는 과정을 말합니다
💡 분산 이벤트 스트리밍 플랫폼(Distributed Event Streaming Platform)이란? - 여러 서버에 걸쳐 이벤트 데이터를 실시간으로 처리하고 저장하는 시스템을 의미합니다. 주요한 특징은 분산 처리를 실시간으로 처리하며, 데이터 복제를 통해 장애 상황에서도 데이터 손실을 방지하며, 이벤트 발생 순서대로 처리하여 데이터의 일관성을 보장합니다.
2) Docker Compose
💡 Docker Compose
- 여러 컨테이너가 함께 실행되는 환경에서, 하나의 파일 내에 정의하여 여러 컨테이너를 관리하기 위한 도구를 의미합니다. 즉, 여러 컨테이너를 관리할 때, 단일 명령어를 통해 생성-관리-배포하는 기능을 수행하는 역할을 합니다.
- 기존의 Dockerfile을 통해 단일 컨테이너를 ‘생성-관리-배포’하는 과정에서의 처리과정은 간단하였으나 여러 컨테이너를 일괄 띄우는데 시간 소요가 많이 되기에 이를 사용합니다. - 이러한 컨테이너 관리는 YAML 파일 형식을 사용하여 서비스, 네트워크 및 볼륨 같은 애플리케이션 서비스를 구성할 수 있습니다. 또한 개발, 테스트, 스테이징, 운영 및 CI 워크플로우 환경에서 애플리케이션을 이동하여 배포가 가능하기에 관리가 매우 편리합니다.
1. Dockerfile에 필요한 모든 서비스를 정의합니다 (Define all your required services in a Dockerfile)
- Dockerfile 내에 각 다운로드할 이미지와 실행할 컨테이너에 대한 정의를 구성합니다.
2. Compose 파일(YAML/YML) 내에 각 서비스 간의 관계를 정의합니다(Define the releationship between each service in a Compose file)
- 이 파일에는 실행할 서비스(컨테이너)들과 그 설정들을 포함하고 있습니다. 사용할 파일 내용은 Docker 이미지, 포트 매핑, 볼륨 마운트, 네트워크 설정, 환경 변수 등이 정의됩니다.
3. Docker Compose를 사용하여 애플리케이션을 시작합니다(Use Docker Compose to start the application)
- Docker Compose의 실행 명령어 ‘docker-compose up’ 명령어를 수행하여 서비스를 실행합니다. - 이 명령어를 통해서 Docker Compose 파일에 정의된 모든 서비스를 시작합니다. 필요한 Docker 이미지가 로컬에 없으면 자동으로 다운로드하고, 컨테이너를 생성하고 시작합니다.
+ Docker Compose의 서비스 상태를 확인합니다.
- Docker Compose의 상태 확인 명령어 ‘docker-compose ps’ 명령어를 수행하여 서비스의 상태를 확인합니다. - 현재 실행 중인 서비스의 상태를 확인할 수 있습니다.
+ 필요에 따라 Docker Compose의 서비스를 중지합니다.
- Docker Compose의 중지 명령어 ‘docker-compose stop’ 명령어를 수행하거나 ‘docker-compose down’ 명령어를 수행하여 모든 서비스를 중지하고 컨테이너, 네트워크, 볼륨을 삭제합니다.
3) Apache Kafka Docker Compose 환경 구성 : KRaft(Kafka Raft) 활용
💡 Apache Kafka Docker Compose 환경 구성 : KRaft(Kafka Raft) 활용
- Apache Kafka 중 Zookeeper가 아닌 KRaft를 Docker Compose를 이용하여서 구성하는 방법에 대해 알아봅니다.
- 구성한 docker-compose.yml 파일을 기반으로 이미지를 생성하고 컨테이너를 실행합니다.
1. Docker Compose 실행
💡 Docker Compose 실행
- docker-compose 명령어를 통해서 기본값인 ‘docker-compose.yml’ 파일을 찾아서 ‘-d’ 명령어를 통해 백그라운드에서 컨테이너를 실행합니다.
💡 지정한 명령어를 기준으로 실행 시 동작 과정
1. Docker Compose 파일을 읽고 필요한 이미지를 다운로드 2. 정의된 서비스들의 컨테이너를 생성 3. 서비스 간의 네트워크 구성 4. 볼륨 마운트 설정 5. 환경 변수 적용 6. 정의된 순서대로 컨테이너 시작
명령어
설명
docker-compose
Docker Compose 도구를 실행하기 위한 기본 명령어
up
Docker Compose 파일에 정의된 모든 서비스를 시작하는 명령어
-d
detached mode의 약자로, 백그라운드에서 컨테이너를 실행하여 터미널을 계속 사용할 수 있게 하는 옵션
# 프로젝트 접근
$ cd simple-apache-kafka
# docker compose 실행
$ docker-compose up -d
💡 Docker Desktop을 통해서 이미지가 생성되고 컨테이너 실행 됨을 확인하였습니다
2. Docker Compose 상태 확인
💡 Docker Compose 상태 확인
- docker-compose 명령어를 통해서 기본값인 ‘docker-compose.yml’ 파일을 찾아서 ‘ps’ 명령어를 통해 실행 중인 Docker Compose 서비스들의 상태를 확인합니다.
# docker compose 상태 확인
$ docker-compose ps
명령어
설명
docker-compose
Docker Compose 도구를 실행하기 위한 기본 명령어
ps
현재 실행 중인 Docker Compose 서비스들의 상태를 확인하는 명령어
3. Kafka UI 접속 확인
💡 Kafka UI 접속 확인
- 위에서 구성한 Docker Compose의 서비스로 Kafka UI를 확인할 수 있습니다
5) Apache Kafka 동작 확인
1. Kafka 컨테이너 접속
💡 Kafka 컨테이너 접속
- Kafka CLI 도구를 사용하여서 Kafka 컨테이너에 접속합니다.
명령어
설명
docker exec -it
실행 중인 Docker 컨테이너에 대화형 터미널로 접속하는 명령어
simple-apache-kafka-kafka-1
접속할 Kafka 컨테이너의 이름
bash
컨테이너 내에서 실행할 셸(shell) 프로그램
# Kafka 컨테이너에 접속
$ docker exec -it simple-apache-kafka-kafka-1 bash
2. Kafka 컨테이너 내의 토픽 생성
💡 Kafka 컨테이너 내의 토픽 생성
- Kafka 컨테이너 내에서 토픽을 생성하기 위해서는 kafka-topics 명령어를 사용합니다. - 이 명령어를 통해 새로운 토픽을 생성하고, 파티션 수와 복제 팩터를 설정할 수 있습니다. - 토픽은 Kafka에서 메시지를 구성하는 가장 기본적인 단위이며, 생산자(Producer)가 메시지를 발행하고 소비자(Consumer)가 구독하는 대상이 됩니다.