코딩공부

Apache Kafka를 실행해보자

integerJI 2025. 2. 16. 22:22

1. 들어가며

최근 회사 프로젝트에서 클라이언트와 실시간으로 데이터를 저장해야하는 일이 생겼다. 이 데이터를 보다 효율적으로 처리하기 위해 Apache Kafka를 도입하게 되었고 Kafka를 도입하기 전 Kafka의 개념과 주요 특징, 그리고 로컬에서 실행해보았다.

 

2. Apache Kafka란?

Kafka는 대량의 데이터를 빠르고 안정적으로 전송하는 분산 스트리밍 플랫폼이다. 링크드인에서 개발되었으며, 현재는 실시간 로그 수집, 이벤트 스트리밍, 데이터 파이프라인 구축 등의 다양한 용도로 사용된다.

 

Kafka의 기본적인 구조는 다음과 같다:

  • Producer: 데이터를 Kafka로 보내는 역할
  • Broker: 데이터를 저장하고 관리하는 서버
  • Consumer: Kafka에서 데이터를 가져가는 역할
  • Topic: 데이터가 저장되는 논리적인 공간
  • Partition: Topic을 여러 개의 작은 단위로 나누어 병렬 처리 가능하게 함\

 

AWS에서 제공하는 카프카 대기열

 

그리고 게시-구독

 

3. Kafka의 특징

3.1. 높은 처리량과 확장성

Kafka는 분산 처리 기반으로 작동하기 때문에, 데이터 양이 증가해도 성능이 크게 저하되지 않는다.

  • Topic을 여러 Partition으로 나누어 Consumer가 병렬 처리 가능
  • 다수의 Broker로 클러스터를 구성해 수평 확장 가능

3.2. 내결함성(Fault-Tolerance)

Kafka는 Replicas를 지원하여 하나의 Broker가 다운되더라도 데이터 손실 없이 서비스 운영이 가능하다.

  • 기본적으로 Leader-Follower 구조를 유지하며 안정성 확보
  • 장애 발생 시 자동으로 다른 노드가 리더 역할을 수행

3.3. 실시간 데이터 처리

Kafka Streams 또는 Spark Streaming 같은 기술과 결합하면 실시간 데이터 분석이 가능하다.

  • 실시간 사용자 행동 분석, 실시간 모니터링, 로그 분석 등

 

4. Kafka 로컬 실행

Kafka를 간단하게 사용해 보려고 한다. 윈도우 환경에서 간단하게 한번 실행해 보자.

 

테스트 환경

  • Kafka 버전: Apache Kafka 3.9.0
  • Java : Java 17

4.1 다운로드

다운로드 -> https://kafka.apache.org/downloads

 

Apache Kafka

Apache Kafka: A Distributed Streaming Platform.

kafka.apache.org

 

현재 카프카 홈페이지에서 최신 버전인 3.9.0 버전의 Scala 2.12를 설치해 준다.

 

그 다음 받은 압축 파일을 아무 경로에 풀어준다.

 

4.2 zookeeper 실행

zookeeper.properties 파일 수정

 

 

E 드라이브의 특정 경로에 카프카를 설치하였는데 

 

프로퍼티 설정을 바꿔주어야한다.

 

추가로 

 

mkdir E:\Developer\kafka\data\zookeeper

 

디렉터리를 하나 더 생성해준 뒤 

 

/e/Developer/kafka/bin/windows
./zookeeper-server-start.bat /e/Developer/kafka/config/zookeeper.properties

 

 

실행해보면 ..

 

 

zookeeper 구동 성공!

 

zookeeper는 Kafka 를 실행시키기 위해 꼭 필요하다. 하지만 3.3.0 이상 버전부터는 zookeeper 

 

GPT의 힘을 빌려 Zookeeper가 필요한 이유를 찾아보면

✅ Kafka가 Zookeeper를 필요로 하는 이유

Broker 등록 및 상태 모니터링
Leader Election (리더 선출)
Topic 및 Partition 메타데이터 저장
Consumer Group 관리 및 오프셋 저장

 

라고한다.

 

4-3. Kafka 실행

 

Kafka도 실행하기 전 프로퍼티를 손봐줘야한다.

 

새로운 bash 창을 열어서

/e/Developer/kafka/config/server.properties

 

로그를 저장하는 디렉터리 경로를 바꿔주자.

 

그 다음 알맞게 폴더도 생성 !

 

mkdir E:\Developer\kafka\data\kafka-logs

 

kafka를 실행해 보자.

./kafka-server-start.bat /e/Developer/kafka/config/server.properties

 

 

4-4. Topic 생성 및 테스트

bash 창을 새로 열어 토픽을 생성하자.

cd /e/Developer/kafka/bin/windows #kafka 폴더 이동
./kafka-topics.bat --create --topic test-topic --bootstrap-server localhost:9092 --partitions 1 --replication-factor 1 #kafka 토픽 생성
./kafka-topics.bat --list --bootstrap-server localhost:9092 #kafka 토픽 목록 확인

 

Kafka에서 데이터를 송수신하려면 Topic을 먼저 만들어야한다.

 

토픽 생성 후 "Created topic test-topic"가 나오면 성공이다.

 

4-5. Producer 실행 (메시지 전송)

새로운 bash 창을 또 열어서 메시지를 전송해보자

 ./kafka-console-producer.bat --topic test-topic --bootstrap-server localhost:9092
hihi kafka
test message
message test one two

 

Kafka는 메시지를 Consumer가 가져가기 전까지는 별다른 응답을 주지 않는다.

 

4-6. Consumer 실행 (메시지 수신)

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

 

1번 bash 창이 메시지 전송 bash이다. 2번이 방금 입력한 메시지 수신 명령어!

 

수신 명령어를 치면 로그가 쭈르륵 올라오며 1번에서 보낸 메시지가 정상적으로 노출이 되는것을 볼 수 있다!!

 

5. 결론

Kafka를 도입하기 위해 구동시켜보았다. 확실히 이미지로 로드맵을 보는 것보다 직접 구동시키며 동작하는 과정을 보니 이해하기가 더 쉬웠다. Topic에서부터 Producer, Consumer까지 메시지가 이동되는 게 상당히 흥미로웠다.

최근 마인크래프트 서버를 운영하면서 Kafka를 활용한 실험을 진행할 계획이다. Kafka를 통해 서버와 클라이언트 간의 비동기 메시지 처리를 테스트하고, 실시간 데이터 전송 및 로그 수집을 자동화하는 방법을 탐색해볼 것이다. 이를 통해 Kafka의 확장성과 비동기 처리 모델이 게임 서버에서 어떻게 활용될 수 있는지 검증할 예정이다. 이를 바탕으로 앞으로 더 발전된 구조로 개선하고 실 업무에 도입할 생각이다. 재밌을 것 같다.