[MSA] Kafka 사용하여 데이터 동기화 #1

yejin·2024년 12월 4일

MSA

목록 보기
35/36

Kafka 사용하여 데이터 동기화 #1

📌 개요

  • Apache Kafka란?
    Apache Software Foundation의 Scalar 언어로 된 오픈 소스 메시지 브로커 프로젝트
  • Kafka Broker 란?
    1. Kafka 애플리케이션 서버
    2. 3대 이상의 Broker Cluster 구성
    3. Zookeeper 연동
    ➡ 역할: 메타데이터(Broker ID, Controller ID 등) 저장
    Controller 정보 저장
    4. n개의 Broker 중 1대는 Controller 역할 수행
    ➡ 각 Broker에게 담당 파티션 할당 수행 및 Broker 정상 동작 모니터링 관리

📌 설치

🔗 다운로드 링크: https://kafka.apache.org/

1️⃣ zookeeper 기동

$ {kafka_path}/bin/zookeeper-server-start.sh {kafka_path}/config/zookeeper.properties

👇 기동 로그

port 번호: 2181

2️⃣ kafka 기동

$ {kafka_path}/bin/kafka-server-start.sh {kafka_path}/config/server.properties

👇 기동 로그

port 번호: 9092

3️⃣ topic 확인

{kafka_path}/bin/kafka-topics.sh --bootstrap-server localhost:9092 --list

👇 기동 로그

➡ 등록된 토픽이 없음을 확인

4️⃣ topic 추가

$ {kafka_path}/bin/kafka-topics.sh --bootstrap-server localhost:9092 --create --topic quickstart-events --partitions 1

👇 추가 결과

🤔 partitions 이란?

  • 개념
    1. Kafka에서 토픽을 여러 파티션으로 나누는 개념
    2. 파티션은 Kafka 클러스터 내에서 메시지가 분산되고 병렬 처리될 수 있는 단위
    3. --partitions 옵션은 생성하려는 토픽에 대해 몇 개의 파티션을 만들 것인지를 지정
  • 특징
    1. 병렬 처리: 여러 파티션을 만들면, 각 파티션에 저장된 데이터를 병렬로 처리가 가능하여 Kafka 클러스터의 성능을 크게 향상
    2. 확장성: Kafka는 파티션을 여러 서버에 분산하여 저장할 수 있기 때문에, 파티션 수가 많으면 클러스터 확장에 유리
    3. 내구성: Kafka는 각 파티션에 대해 복제(replication)를 설정할 수 있어, 여러 복제본을 통해 데이터를 내구성 있게 관리 가능
    4. 메시지 순서 보장: 각 파티션 내에서는 메시지가 들어오는 순서대로 저장되고, 소비자는 해당 순서를 보장 가능 (※ 파티션 간에는 순서가 보장되지 않음)

토픽의 상세 정보 확인

$ {kafka_path}/bin/kafka-topics.sh --bootstrap-server localhost:9092 --describe --topic quickstart-events

✅ 참고: 토픽 삭제

 {kafka_path}/bin/kafka-topics.sh --delete --bootstrap-server localhost:9092 --topic {토픽명}

📌 테스트

1️⃣ Producer 실행

$ {kafka_path}/bin/kafka-console-producer.sh --broker-list localhost:9092 --topic quickstart-events

2️⃣ consumer 실행

$ {kafka_path}/bin/kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic quickstart-events --from-beginning

3️⃣ 실행결과


Producer에서 작성된 텍스트(=메시지)가 Consumer에서 동일하게 출력됨
--from-beginning 옵션을 통해 나중에 생성된 Consumer에서도 생성 이전의 Producer의 메시지를 다 볼 수 있음

profile
새싹 개발자

0개의 댓글