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 설치
- http://kafka.apache.org 에서 Kafka 설치
cd C:\Kafka
# 압축 풀기
tar xvf .\kafka_2.13-3.7.1.tgz
# Kafka는 안정성있는 메시지 전달하는 구조로 구축해야 된다.
# config 디렉토리의 파일로 Kafka의 설정정보를 수정할 수 있다.
cd config
# Kafka 실행파일과 bat파일이 존재한다.
cd ../bin
- https://cwiki.apache.org/confluence/display/kafka/clients 해당 웹페이지에서 지원하는 언어들을 확인할 수 있다.
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에도 동일하게 입력된다.
반응형