Today
Total
KoreanEnglishFrenchGermanJapaneseSpanishChinese (Simplified)
관리 메뉴

DB & AWS Knowledge

Kafka 기본 요소들에 대한 추가 이해 - 2 본문

Kafka, MSK, Kinesis/아키텍처 및 내부 구조

Kafka 기본 요소들에 대한 추가 이해 - 2

`O` 2025. 5. 21. 22:47
728x90
반응형

이 페이지에서는 Kafka 를 공부하기 위해 주로 사용되는 용어들에 대해서 이전 게시글에 이어 추가 이해를 위하여 추가한다.

 

[1] 2025.05.12 - [Kafka, MSK, Kinesis/아키텍처 및 내부 구조] - Kafka 를 공부하기 위해 필요한 기본 용어들

[2] 2025.05.21 - [Kafka, MSK, Kinesis/아키텍처 및 내부 구조] - Kafka 기본 요소들에 대한 추가 이해 - 1

 

또한, 이 게시글은 도서 O'REILLY 의 '카프카 핵심 가이드' 의 내용들을 심화 이해하기 위하여 작성하는 글이다.

이 페이지는 perplexity 를 통해 필자가 어떤 prompt 를 작성하여 공부하는지를 공유한다. ([] 로 표기)

또한, 검색이외에 추가로 덧붙일 내용은 ※ 로 추가한다.

 

AI 를 통해 관련된 자료를 검색하다보면 이전 게시글과 중복된 사항도 있으나 이는 복습 및 상기 차원에서 그대로 기재 되도록 한다.

또한, 이 게시글 부터는 Perplexity 의 강점중 하나인 출처 표기또한 동시에 표기한다.

 

[Kafka 의 Broker, Cluster, Controller, Partition Leader, Follower 개념을 알려줘]

 

Kafka Broker, Cluster, Controller, Partition Leader, Follower 개념을 아래와 같이 정리한다.


Broker

  • Broker Kafka 서버 한 대를 의미한다.
  • Producer(생산자)로부터 메시지를 받아 저장하고, Consumer(소비자)의 요청에 따라 메시지를 제공한다.
  • 여러 대의 Broker가 모여 하나의 Kafka 클러스터를 구성한다. Broker는 고유한 ID를 가진다15810.

Cluster

  • Cluster는 여러 개의 Broker가 모여 구성된 집합이다.
  • 클러스터는 데이터의 분산 저장, 복제, 장애 대응, 확장성 등을 제공한다.
  • 클러스터 내에서는 데이터가 여러 Broker에 분산되어 저장되고, 고가용성과 내구성을 보장한다1358.

Controller

  • Controller는 클러스터 내 Broker 중 하나가 선출되어 담당하는 특별한 역할이다.
  • Controller는 파티션의 리더 할당, 파티션의 리더 교체, 브로커의 상태 감시 등 클러스터의 메타데이터 관리와 조율을 담당한다.
  • Controller가 장애가 나면, 다른 Broker가 자동으로 새로운 Controller가 된다26811.

Partition Leader

  • Partition Leader는 각 파티션(Partition)의 대표 역할을 하는 리플리카(복제본)이다.
  • Producer Consumer는 반드시 해당 파티션의 Leader를 통해서만 데이터를 쓰고 읽는다.
  • 파티션의 Leader는 클러스터 내 여러 Broker 중 하나에 할당되며, Controller가 이를 결정한다3467911.

Follower

  • Follower는 파티션의 리더가 아닌 나머지 복제본을 의미한다.
  • Follower Leader의 데이터를 실시간으로 복제하며, Leader에 장애가 발생하면 Follower 중 하나가 새로운 Leader로 승격된다.
  • Follower가 정상적으로 동기화되어 있으면 ISR(In-Sync Replica) 그룹에 포함되고, 이 그룹의 Follower만이 Leader가 될 자격이 있다47911.

 

Controller 의 존재 개념은 MySQL MHA Manager 구성 개념을 연상하고, Partition Leader 는 Aurora Cluster 의 Writer, Reader 개념을 연상하면 이해하기 쉽다.


요약 표

용어 설명
Broker Kafka 서버 한 대, 메시지 저장과 제공 담당
Cluster 여러 Broker의 집합, 데이터 분산과 고가용성 제공
Controller 클러스터 내 Broker 중 하나, 파티션 리더 할당 및 클러스터 조율 담당
Partition Leader 파티션의 대표 리플리카, 읽기/쓰기의 중심
Follower 리더가 아닌 파티션 복제본, 리더 장애 시 승격 가능, 데이터 동기화 담당

 

이 개념들은 Kafka의 안정성, 확장성, 장애 대응 능력을 뒷받침하는 핵심 구조다.

 

Citations:

  1. https://kylo8.tistory.com/entry/Kafka-Kafka-%EA%B0%9C%EB%85%90-%EC%9D%B4%ED%95%B4%ED%95%98%EA%B8%B0-Producer-Consumer-Broker
  2. https://westlife0615.tistory.com/600
  3. https://westlife0615.tistory.com/526
  4. https://colevelup.tistory.com/19
  5. https://todayproject.tistory.com/entry/13
  6. https://any-ting.tistory.com/165
  7. https://notypie.dev/kafka-%ED%8C%8C%ED%97%A4%EC%B9%98%EA%B8%B0-1-%EA%B0%9C%EB%85%90%ED%8E%B8/
  8. https://charming-kyu.tistory.com/69
  9. https://velog.io/@sunwupark/Kafka-Kafka-Definition
  10. https://velog.io/@jollypyun/Kafka-%EA%B0%9C%EC%9A%94
  11. https://simsim231.tistory.com/290
  12. https://any-ting.tistory.com/162
  13. https://hyunseo-fullstackdiary.tistory.com/418
  14. https://velog.io/@mw310/Kafka-%EC%B9%B4%ED%94%84%EC%B9%B4%EB%9E%80-%EC%A3%BC%EC%9A%94-%EA%B0%9C%EB%85%90-%EC%A0%95%EB%A6%AC
  15. https://velog.io/@jwpark06/Kafka-%EC%8B%9C%EC%8A%A4%ED%85%9C-%EA%B5%AC%EC%A1%B0-%EC%95%8C%EC%95%84%EB%B3%B4%EA%B8%B0
  16. https://www.geuni.tech/kafka/kafka_introduce_install_cluster
  17. https://unit-15.tistory.com/136
  18. https://willseungh0.tistory.com/173
  19. https://curiousjinan.tistory.com/entry/kafka-cluster-broker-understand
  20. https://suminn0.tistory.com/130
  21. https://sjh9708.tistory.com/151
  22. https://wildeveloperetrain.tistory.com/225
  23. https://clairdelunes.tistory.com/129
  24. https://blog.naver.com/pjt3591oo/222984745300
  25. https://zeroco.tistory.com/105
  26. https://velog.io/@ddongh1122/Kafka-%EC%9D%B4%ED%95%B4-%EC%B9%B4%ED%94%84%EC%B9%B4-%EA%B8%B0%EB%B3%B8-%EA%B0%9C%EB%85%90-3
  27. https://motti.tistory.com/entry/%EC%B9%B4%ED%94%84%EC%B9%B4Kakfa%EB%9E%80-%EA%B0%9C%EB%85%9012
  28. https://data-engineer-tech.tistory.com/18
  29. https://curiousjinan.tistory.com/entry/understand-kafka-partitions
  30. https://studyandwrite.tistory.com/575
  31. https://xonmin.tistory.com/80
  32. https://sjparkk-dev1og.tistory.com/207
  33. https://junuuu.tistory.com/811
  34. https://devfunny.tistory.com/823

[위의 내용과 관련된 message 보존기간 설정에 대해서 알려줘]

 

Kafka에서 메시지 보존기간(메시지 보관 주기) Broker Topic 단위로 설정할 수 있으며, 메시지가 저장된 후 얼마 동안 Kafka에 남아있을지 결정하는 중요한 설정이다.
이 보존기간이 지나면 메시지는 자동으로 삭제되어 디스크 공간이 확보된다2378.


메시지 보존기간 설정 방법

 

1. 시간 단위 설정

  • 메시지를 특정 시간 동안만 보관하고 싶을 때 사용한다.
  • Broker 전체에 적용하려면 server.properties 파일에서 아래와 같이 설정한다.
log.retention.hours=168   # 168시간 = 7일(기본값)
log.retention.minutes=60  # 60분
log.retention.ms=3600000  # 1시간(밀리초 단위)
  • Topic별로 별도 설정도 가능하다.
kafka-topics.sh --bootstrap-server localhost:9092 --create --topic my_topic \
  --partitions 1 --replication-factor 1 \
  --config retention.ms=3600000

 

2. 용량 단위 설정

  • 토픽의 전체 메시지 크기가 특정 용량을 초과하면 오래된 메시지부터 삭제한다.
  • Broker 전체에 적용할 때:
log.retention.bytes=1073741824   # 1GB
  • Topic별로 적용할 때:
kafka-topics.sh --bootstrap-server localhost:9092 --create --topic my_topic \
  --config retention.bytes=10485760   # 10MB

 

3. 동작 방식

  • 시간 기준과 용량 기준 중 하나라도 초과하면 메시지가 삭제된다(OR 조건)478.
  • 메시지 삭제는 segment(세그먼트) 단위로 이루어지며, 주기적으로 retention 정책에 따라 정리된다.
  • retention 기간을 -1로 설정하면 메시지가 영구 보관된다.

참고 사항

  • Kafka의 기본 메시지 보존기간은 7일이다37.
  • retention 정책은 Broker 단위와 Topic 단위 모두에서 설정 및 변경이 가능하다.
  • 보존기간이 지난 메시지는 자동으로 삭제되므로, Consumer가 메시지를 늦게 읽을 경우 데이터 유실에 주의해야 한다.

Kafka Broker, Cluster, Partition 등 구조와 무관하게, 메시지 보존기간은 위와 같이 설정하여 관리할 수 있다.
운영 환경에 맞게 적절한 보존기간과 용량을 설정하는 것이 중요하다.

Citations:

  1. https://deep-dive-dev.tistory.com/63
  2. https://recordsoflife.tistory.com/270
  3. https://www.baeldung.com/linux/kafka-view-topic-retention
  4. https://blog.metafor.kr/253
  5. https://devfoxstar.github.io/mq/kafka-retention-ms/
  6. https://syk531.tistory.com/137
  7. https://log-laboratory.tistory.com/232
  8. https://developnote-blog.tistory.com/197
  9. https://dydwnsekd.tistory.com/66
  10. https://learn.conduktor.io/kafka/kafka-topic-configuration-log-retention/

[Kafka 다중 클러스터 개념 및 이게 필요한 이유, 그리고 이거와 연관된 mirror maker 에 대해서 알려줘]

 

Kafka 다중 클러스터 개념 및 필요성

다중 클러스터는 여러 Kafka 클러스터를 논리적/물리적으로 연결해 데이터를 복제하거나 분산 처리하는 아키텍처를 의미한다. 이는 다음과 같은 이유로 필요하다:

필요성

  1. 재해 복구(Disaster Recovery)
    • 단일 클러스터 장애 시 다른 클러스터로 장애 조치(failover)하여 서비스 연속성 보장16.
  2. 데이터 주권 및 규정 준수
    • 특정 지역(예: GDPR)에 데이터를 격리 저장해야 할 때13.
  3. 워크로드 격리
    • 배치 처리(대용량)와 실시간 스트리밍을 분리해 성능 저하 방지19.
  4. 하이브리드/멀티 클라우드 전략
    • 온프레미스와 클라우드 간 데이터 동기화13.
  5. 확장성
    • 단일 클러스터의 물리적 한계(네트워크 대역폭, 디스크 용량) 극복15.

MirrorMaker 2.0: 다중 클러스터 데이터 복제 도구

**MirrorMaker 2.0(MM2)**은 Kafka 클러스터 간 데이터 복제를 위한 공식 도구로, Kafka Connect 프레임워크 기반으로 동작한다269.

핵심 구성 요소

구성 요소역할
MirrorSourceConnector 소스 클러스터에서 토픽, ACL, 구성을 복제하고 오프셋 동기화 정보 생성36.
MirrorSinkConnector 타겟 클러스터로 데이터 전송36.
MirrorCheckpointConnector 소비자 그룹 오프셋을 동기화해 장애 조치 지원38.
MirrorHeartbeatConnector 클러스터 간 연결 상태 모니터링36.
 

동작 방식

  1. 토픽 복제
    • 정규식(topics=.*)으로 복제 대상 토픽 지정 가능35.
    • 신규 토픽이 생성되면 자동 감지해 복제39.
  2. 오프셋 동기화
    • offset-syncs.topic에 소스/타겟 오프셋 매핑 정보 저장8.
    • 장애 시 타겟 클러스터에서 소비 재개 가능8.
  3. ACL 및 구성 동기화
    • 토픽 접근 권한과 설정(예: 보존 기간)을 복제69.

MirrorMaker 2.0 설정 예시

# mm2.properties  
clusters = source, target  
source.bootstrap.servers = kafka-source:9092  
target.bootstrap.servers = kafka-target:9092  

# 복제 규칙  
source->target.enabled = true  
source->target.topics = orders-.*  
groups = .*  

# 고급 설정  
sync.topic.configs.enabled = true  
sync.topic.acls.enabled = true  
replication.factor = 3

확장된 클러스터 vs 연결된 클러스터

구분확장된 클러스터연결된 클러스터
복제 방식 동기식 비동기식
일관성 강력한 일관성 최종 일관성
사용 사례 단일 리전 내 고가용성 멀티 리전/하이브리드 클라우드
관리 복잡도 높음 (쿼럼 유지 필요) 낮음 (독립 운영 가능)
 

 

확장된 클러스터: 물리적 클러스터를 논리적으로 통합해 애플리케이션에 단일 클러스터처럼 노출1.
연결된 클러스터: MM2를 사용해 독립적 클러스터 간 데이터 복제36.

 


활용 사례

  • 재해 복구: 주 클러스터 장애 시 미러링된 클러스터로 전환36.
  • 데이터 마이그레이션: 기존 클러스터에서 신규 클러스터로 데이터 이동59.
  • 글로벌 서비스: 지역별 클러스터에 데이터 복제해 지연 시간 최소화13.

Kafka 다중 클러스터 전략은 MM2를 통해 유연한 데이터 관리와 안정성을 제공하며, 클라우드 네이티브 환경에서 필수적인 아키텍처로 자리잡고 있다369.

Citations:

  1. https://hackernoon.com/lang/ko/Kafka%EB%A5%BC-%EC%82%AC%EC%9A%A9%ED%95%98%EC%97%AC-%EB%8B%A4%EC%A4%91-%ED%81%B4%EB%9F%AC%EC%8A%A4%ED%84%B0-%EB%B0%B0%ED%8F%AC-%EB%B0%8F-%EB%B3%B5%EC%A0%9C-%EB%A7%88%EC%8A%A4%ED%84%B0%ED%95%98%EA%B8%B0
  2. https://docs.redhat.com/ko/documentation/red_hat_streams_for_apache_kafka/2.0/html/using_amq_streams_on_rhel/proc-mirrormaker-replication-str
  3. https://learn.microsoft.com/ko-kr/azure/hdinsight/kafka/kafka-mirrormaker-2-0-guide
  4. https://velog.io/@smpaaark-tech/Apache-Kafka%EC%9D%98-MirrorMaker-%EB%8C%80%EA%B7%9C%EB%AA%A8-%EB%8D%B0%EC%9D%B4%ED%84%B0-%EB%B3%B5%EC%A0%9C%EB%A5%BC-%EC%9C%84%ED%95%9C-%EA%B0%95%EB%A0%A5%ED%95%9C-%EB%8F%84%EA%B5%AC
  5. https://idea9329.tistory.com/571
  6. https://docs.redhat.com/ko/documentation/red_hat_streams_for_apache_kafka/2.3/html/configuring_amq_streams_on_openshift/assembly-mirrormaker-str
  7. https://moongzeee.tistory.com/3
  8. https://toss.tech/article/kafka-distribution-3
  9. https://learn.microsoft.com/ko-kr/azure/event-hubs/event-hubs-kafka-mirrormaker-2-tutorial
  10. https://velog.io/@ggm0805/Kafka-Multi-Node
  11. https://dkswnkk.tistory.com/758
  12. https://sjh9708.tistory.com/151
  13. https://clairdelunes.tistory.com/129
  14. https://ghouse2020.tistory.com/91
  15. https://toss.tech/article/kafka-distribution-1
  16. https://blog.naver.com/data_flow/222660303510
  17. https://curiousjinan.tistory.com/entry/kafka-cluster-broker-understand
  18. https://madep.tistory.com/14
  19. https://knight76.tistory.com/entry/%EC%B9%B4%ED%94%84%EC%B9%B4%EC%9D%98-MirroMaker-%EA%B0%84%EB%8B%A8-%EC%86%8C%EA%B0%9C
  20. https://learn.microsoft.com/ko-kr/azure/event-hubs/event-hubs-kafka-mirror-maker-tutorial

 

 

728x90
반응형
Comments