본문 바로가기
DevOps/Kafka

Kafka

by Mecodata 2023. 9. 21.

정의

- 실시간으로 기록 스트림을 게시, 구독, 저장 및 처리할 수 있는 분산형 데이터 스트리밍 플랫폼

- Pub-Sub 모델의 메시지 큐 형태로 동작하며 분산환경에 특화

 

기본 구성

- Cluster = 여러 대의 컴퓨터들이 연결되어 하나의 시스템처럼 동작하는 컴퓨터들의 집합

- Producer = 데이터를 만들어내어 전달하는 전달자

- Consumer = 프로듀서에서 전달한 메시지를 브로커에 요청하여 소비하는 소비자

- Broker = Producer와 Consumer 사이의 중재자
(kafka에 설치되어 있는 일종의 서버 단위 => 보통 3개 이상으로 권장)

- Topic = 보내는 메시지(데이터)를 구분하기 위한 카테고리

- Partition = 토픽을 구성하는 데이터 저장소(메시지 큐)

작동 방식

- Produer가 메시지를 kafka로 전달 → kafka에서 메시지를 Broker의 Topic에 저장 → Consumer가 구독한 토픽에 접근하여 메시지 소비 

Offset

- 특정 토픽의 파티션 내에서 메시지의 위치를 식별하는 정수 값 (Index와 비슷한 개념, 0부터 시작)

- 각 메시지에는 고유한 오프셋이 있으며, 이를 이용하여 Consumer가 어떤 메시지를 읽었는지 추적하고 중단된 처리를 복구하거나 데이터 손실을 방지할 수 있음

 

특징

- Consumer가 메시지를 소비하면 메시지 큐에 보관된 메시지가 삭제되는 다른 메시지 브로커들과는 다르게 Consumer가 메시지를 소비하더라도 Partition에 메시지를 일정기간 보관하기 때문에 메시지의 손실이 없음

- Partition은 개수를 늘릴 수 있지만 줄일 수는 없음

- 최대 보관 시간 설정과 최대 보관 크기 설정으로 파티션에 저장되어 있는 메시지 관리 가능

 

Replication

- 다른 Broker로의 Partition 복제를 의미

- 최대로 Broker의 개수만큼 지정할 수 있음 (Replication = 1 → 복제 X)

- 원본인 Leader Partition복제본인 Follower Partition으로 구분

- ISR(In Sync Replica) = 현재 Leader와 동기화된 상태에 있는 Follower의 집합

- Replication의 수가 많을수록 Broker의 리소스 사용량도 증가하므로 데이터 양과 저장 시간을 고려하여 설정해야 함

ack 옵션(acknowledgments)

- Producer에서 메시지를 보내고 그 메시지를 kafka가 잘 받았는지에 대한 확인 응답 수신 유무를 결정하는 옵션

  • 0 = 확인 X (속도는 가장 빠르지만 데이터 유실 가능성 ↑)
  • 1 = Leader Patition에 대해서만 확인 응답 수신 가능
    (Leader는 메시지를 수신한 뒤 Producer에게 확인 응답을 보내고 나서 Follower에게 메시지를 전송함
    → Leader가 메시지를 수신하자마자 Leader가 속한 Broker에 에러가 발생하면 Follwer에게 메시지 전달 X)
  • all = Leader Partition + Follower Partition 모두 확인 응답 수신 가능
    (데이터 유실은 없지만 0과 1에 비해 속도가 느림)

 

Partitioner

- Producer가 메시지를 특정 Partition에 분배하는 데 사용

- 메시지의 키(key)와 topic의 Partition 구성에 따라 이루어짐

  • 메시지 키 기반 파티셔닝 = 동일한 키를 가진 메시지는 항상 동일한 Partition에 저장되도록 보장
  • 기본 RR(라운드 로빈) 방식 = 모든 Partition을 차례대로 선택하여 메시지를 균등하게 분배
  • UniformStickyPartitioner = Accumulator에 메시지를 쌓은 뒤에 전송 (배치 전송에 특화)
  • 사용자 정의(Custom) 방식

 

Consumer Lag

- Producer가 마지막으로 Partition에 넣은 메시지의 Offset과 Consumer가 마지막으로 읽은 메시지의 Offset의 차이
=> Consumer Group이 Topic의 Partition에서 얼마나 많은 메시지를 아직 처리하지 않았는지를 나타냄

- Consumer Lag ↑ = 데이터 처리에 대한 지연 발생

- records-lag-max = 한 개의 Topic과 Consumer Group에 대한 여러 Consumer lag 중에서 가장 높은 값

 

Burrow

- Kafka를 모니터링하고 관리하기 위한 오픈 소스 도구 중 하나

  • 하나의 Burrow 애플리케이션으로 여러 개의 kafka Cluster의 모든 Consumer Group을 모니터링하고, 각 Group의 상태와 통계 정보 수집이 가능
  • Sliding Window를 통해 Comsumer의 status를 "ERROR", "WARNING", "OK"로 표현
    (ERROR = Consumer에서 메시지 미수신 시, WARNING = Consumer Offset 증가 시)
  • REST API를 통해 Consumer GroupPartition의 세부 정보에 접근 가능

Sliding Window

- 데이터 스트림에서 일정 시간 또는 크기 범위 내의 데이터 세트

- 데이터 스트림에서 통계 정보를 계산하거나 분석할 때 사용

- 시간 기반 슬라이딩 윈도우 = 특정 시간 간격 내의 데이터를 포함하는 슬라이딩 윈도우

- 크기 기반 슬라이딩 윈도우 = 일정한 메시지 수 또는 이벤트 수를 가진 데이터를 포함하는 슬라이딩 윈도우 

 

Reference

인프런 [데브원영] 아파치 카프카 for beginners
https://www.inflearn.com/course/%EC%95%84%ED%8C%8C%EC%B9%98-%EC%B9%B4%ED%94%84%EC%B9%B4-%EC%9E%85%EB%AC%B8#

댓글