Cloud/MSA

[MSA] Apache Kafka

문승주 2024. 12. 2. 21:37
반응형

본 내용은 인프런의 이도원 님의 강의 "Spring Cloud로 개발하는 마이크로서비스 애플리케이션(MSA)" 내용을 바탕으로 정리한 내용입니다.

 

Apache Kafka란

  • Scalar 언어로 구현된 오픈 소스 메시지 브로커 프로젝트이다.
  • 실시간으로 데이터 스트림을 게시, 구독, 저장 및 처리할 수 있다.
  • 주로 대규모 데이터 처리와 실시간 데이터 파이프라인 구축에 사용된다.

주요 역할

  • 분산 시스템 : 여러 서버에 걸쳐 데이터를 분산 저장하고 처리할 수 있다.
  • 높은 처리량 : 초당 수백만 개의 메시지를 처리할 수 있다.
  • 내구성 : 데이터를 디스크에 저장하여 데이터 손실을 방지한다.
  • 확장성 : 클러스터를 통해 쉽게 확장할 수 있다.

Kafka Broker

  • 실행된 Kafka 서버를 의미하며, Kafka 클러스터는 3대 이상의 브로커로 구성되고, 각 브로커는 특정 파티션의 데이터를 저장하고 관리한다.
  • 주요 역할
  • 메시지 저장: 브로커는 토픽의 파티션 데이터를 디스크에 저장한다.
  • 메시지 전송: 프로듀서로부터 메시지를 받아서 저장하고, 컨슈머에게 메시지를 전달한다.
  • 클러스터 관리: 브로커는 클러스터 내에서 리더 선출, 파티션 복제 등의 작업을 수행한다.

Apache Zookeeper

  • 분산 시스템을 위한 코디네이션 서비스로 주로 분산 시스템에서 구성 관리, 동기화, 네이밍 레지스트리 등의 기능을 제공한다.

Topic

  • Kafka에서 데이터를 저장하고 관리하는 기본단위이다.
  • 특정 주제나 목적에 맞게 데이터를 그룹화하여 저장한다.

Producer

  • 데이터를 생성하고 Kafka의 특정 토픽에 데이터를 전송한다.

Condumer

  • Kakfka 토픽에서 데이터를 읽어와 처리한다.

Kafka 설치

cd C:\Kafka

# 압축 풀기
tar xvf .\kafka_2.13-3.7.1.tgz

# Kafka는 안정성있는 메시지 전달하는 구조로 구축해야 된다.
# config 디렉토리의 파일로 Kafka의 설정정보를 수정할 수 있다.
cd config

# Kafka 실행파일과 bat파일이 존재한다.
cd ../bin

Kafka 서버 기동

  • 윈도우에서 명령어로 서버 기동시 입력 줄이 너무 길다는 오류 나옴 kafka 관련 폴더 C:// 바로 아래로 복사하고 실행하니 정상작동함
cd C:\Kafka\kafka_2.13-3.7.1\

# Zokeeper 기동
.\bin\windows\zookeeper-server-start.bat .\config\zookeeper.properties
cd C:\Kafka\kafka_2.13-3.7.1\

# Kafka 기동
.\bin\windows\kafka-server-start.bat .\config\server.properties
cd C:\Kafka\kafka_2.13-3.7.1\

# 토픽 목록 확인
.\bin\windows\kafka-topics.bat --bootstrap-server localhost:9092 --list

# 토픽 생성
.\bin\windows\kafka-topics.bat --bootstrap-server localhost:9092 --create --topic quickstart-events

# 토픽 상세 정보 확인
.\bin\windows\kafka-topics.bat --bootstrap-server localhost:9092 --describe --topic quickstart-events

# producer 실행
.\bin\kafka-console-producer.sh --broker-list localhost:9092 --topic quickstart-events
cd C:\Kafka\kafka_2.13-3.7.1\

# consumer 실행
.\bin\kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic quickstart-events
log4j:ERROR Could not read configuration file from URL [file:.../config/tools-log4j.properties]. java.io.FileNotFoundException 에러 발생
# Direct log messages to stdout
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target=System.out
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d{ABSOLUTE} %5p %c{1}:%L - %m%n

# Root logger option
log4j.rootLogger=ERROR, stdout

# Hibernate logging options (INFO only shows startup messages)
log4j.logger.org.hibernate=INFO

# Log JDBC bind parameter runtime arguments
log4j.logger.org.hibernate.SQL=debug
log4j.logger.org.hibernate.type.descriptor.sql=trace
  • ./config/tools-log4j.properties 파일 정보를 수정한다.
  • shell 에서 수정 시 echo 명령어 사용
# (( WINDOWS_OS_FORMAT )) && LOG4J_DIR=$(cygpath --path --mixed "${LOG4J_DIR}")
  • ./bin/kafka-run-class.sh 파일의 log4j 설정 중 위 부분 주석 처리하여 cygpath 명령을 사용하지 않도록 수정한다.

결과 확인

  • 좌측 producer에 입력한 내용이 concumer에도 동일하게 입력된다.
반응형