MSA/Event Driven Architecture 2024. 7. 14. 00:59

[Kafka] 개요, 사용 목적, 특징, 구성

목차
  1. 개요
  2. 목표
  3. 사용 목적
  4. 특징
  5. 파일 시스템 기반
  6. Pull 방식 (Consumer의 메세지 수신 방식)
  7. 다중 producer, consumer
  8. 확장성
  9. 고가용성
  10. 고성능
  11. Broker 클러스터 구성
  12. Controller: 다른 브로커를 지휘하는 브로커
  13. 메세지 저장 성능 극대화: log append-only
  14. 메세지 레코드의 구조
  15. 토픽
  16. 키
  17. 파티션
  18. Consumer Group
  19. 출처

개요

  • 아파치에서 스칼라로 개발한 오픈소스 메세지 브로커
  • 링크드인에서 최초 개발
  • 2011년 오픈소스화
  • 링크드인에서는 백엔드 데이터 흐름 처리 위한 목적
    • 스트리밍 데이터 원할한 처리
  • 정적인 데이터 저장이 아닌 동적인 데이터 처리 주 목적
    • 계속적으로 변하는 스트리밍 데이터
      ⇒ 현대의 기업은 정적인 DB로는 관리할 수 없는 복잡성, 다양성을 띈 데이터 처리할 수 있는 시스템 요구
    • ex) 배민 라이더 위치 추적, 지하철 칸별 혼잡도
  • RDBMS의 트랜잭션 로그 마이너 기술 영향을 받아서 만들어졌음
    • 데이터가 생성, 변경될 때 마다 로그를 기록

목표

  • 고성능
  • 이벤트
  • 분산
  • 스트리밍
    • 카프카 스트림이라는 별도의 기술(api) 사용
    • 스트리밍 프로세스에 최적화된 방법 제공

사용 목적

  • 시스템 또는 애플리케이션 간에 실시간 데이터 파이프라인 만들 때 사용
  • 대용량 실시간 로그 처리에 특화되어 있는 솔루션
  • 데이터를 유실 없이 안전하게 전달하는 것이 주 목적인 메세지 시스템활용 사례
  • 초기에는 ETL과 메세지 교환 등 정적 메세지 처리 용도
    현재에는
  • 이벤트 주도 마이크로서비스 환경에서 각 서비스 이벤트를 연동할 때
  • 실시간 스트림 처리
  • IoT - 센서, 자율 주행
  • 머신 러닝 파이프라인
  • 실시간 게임 플레이 데이터
  • 실시간 위치 추적
  • 대용량 스트리밍 서비스
    • 넷플릭스

특징

  • 다중 producer, consumer 지원
  • 파일 시스템 기반
  • 확장성
  • 고가용성
  • 고성능
  • pull 방식 (Consumer 입장)
  • 파일 시스템 기반, pull 방식이 다른 메세지 브로커와의 큰 차이

파일 시스템 기반

  • 전통적인 메세징 시스템
    • ActiveMQ, RabbitMQ
    • 전송한 메세지를 메모리 유지
    • 정적 성격 데이터 아니다 하고 생각하고 설계
    • 빠르게 소비되어야 하는 메모리 상의 데이터
    • 메모리 데이터
  • 카프카
    • 프로듀서가 생성한 메세지를 파일 시스템에 저장
    • 메세지 보존 기간 내에는 언제든지 읽어갈 수 있음
    • 풀 방식 가능해지는 특징
  • 유일하지는 않는데 카프카가 대표적인 기술
  • 프로듀서와 컨슈머의 속도(성능) 차이가 있을 때 유용
  • 컨슈머가 데이터 소비하는 것이 아니라 모았다가 처리하는 배치 처리 가능하게 함
  • 컨슈머 쪽에서 에러가 생겼을 때 이전에 읽었던 데이터를 다시 가져갈 수 있게 해준다
  • 최소한 한 번의 메세지 전송 보장 (신뢰성)

Pull 방식 (Consumer의 메세지 수신 방식)

일반적인 메세지 브로커와 반대
consumer에게 push하지 않음

  • pull 방식 채택
    • 가져가는 쪽에서 필요한 만큼
  • 컨슈머의 처리량을 브로커가 고려하지 않아도 됨
  • 컨슈머는 자기가 처리할 수 잇는 메세지만 폴링
    • 메세지 처리 성능 최적화
  • 프로듀서의 성능보다 일반적으로 컨슈머의 처리 속도가 느림
    • 그럴 때 컨슈머 추가해서 처리량 늘릴 수 있다
  • Consumer가 주기적으로 Polling을 해서 메세지를 읽음

다중 producer, consumer

  • 여러 프로듀서가 동시 메세지 발행 가능
  • 여러 컨슈머가 읽을 수 있음
  • 토픽 방식
    • 큐 방식, 토픽 방식 중
      ⇒ 하나의 카프카 시스템을 통해 다양한 애플리케이션이 데이터를 주고받을 수 있음

확장성

  • 여러 마이크로서비스 기술 가지고 있는 특징
  • 기본적으로 클러스터 구성
  • 서비스 중단 없이 확장 용이하도록 설계
  • 토픽, 파티션 구성도 운영 중 추가 가능
  • 토픽의 데이터는 내부의 파티션 세분화된 단위로 저장
  • Consumer 는 Consumer Group으로 묶이며, 필요 시 컨슈머 그룹에 추가 가능
    • 컨슈머 그룹에 컨슈머가 추가되면 컨슈머의 파티션 소유권이 재분배되는 리밸런스 과정 수행
      • 리밸런스 부하 많이 줘서 일반적으로는 일어나지 않도록 설계함
    • 리밸런스 과정 후 컨슈머 그룹에 속한 컨슈머가 고르게 할당

고가용성

  • 파티션 데이터의 복사본(replication)을 가지고 있음
  • 데이터의 중요성에 따라 Replication factor 설정

고성능

  • 기본적으로 성능이 좋다
  • 높은 처리량
  • 이를 위해 일반적인 범용 메시징 시스템이 지원하는 몇 가지를 포기
    • 메세지 처리를 위한 복잡한 승인 프로토콜
    • 복잡한 메세지 라우팅 및 필터링 기능
    • 메세지 우선 순위, 순차적 전달 보장
      • 설정은 가능하나 일반적으로는 offset
      • 단순한 메세지 처리 방식으로 설계
      • 순위, 순차 보장 필수는 아님

Broker 클러스터 구성

  • 클러스터
    • 여러 서버를 묶어서 하나의 시스템으로 작동하게 하는 것
    • 내부적으로는 분산된 여러 시스템
    • 고가용성 서비스 제공
  • 클러스터 구성 및 관리를 위한 Zookeeper가 필요
    • Zookeeper(사육사)
      • 브로커 노드들 관리 담당
      • 메타 정보 관리
      • 카프카에만 쓰이는 것은 아니다
      • 여러 노드로 구성하는 마이크로서비스 노드 상태 관리에도 zookeeper 사용
      • 분산 시스템 마스터 역할 선출
  • 주키퍼 클러스터 + 브로커 클러스터
    • 브로커가 3개면 주키퍼도 3개 클러스터
  • 일반적 최소 사양
    • 주키퍼 3EA, 카프카 3EA
    • 기본 구성
    • 왜 3개가 필요한가?
      • 다수결의 방식으로 리더 선정하는 포럼 기반
      • 최소 3개 필요
      • 마스터 선출되려면 2개 이상의 노드 동의
      • 앙상블. 합의에 도달하고 과반수 포럼 기반 작동
      • 마스터 선출
      • 마스터 문제되면 후보

Controller: 다른 브로커를 지휘하는 브로커

  • 브로커 상태 체크
    • 특정 브로커가 컨트롤러 역할
  • 셧다운, 정상 작동 못 하는 경우 새로운 리더(또 다른 브로커) 선출
  • 다른 브로커 생존 여부 모니터링
    • 토픽은 파티션에 들어가기 때문에 리더 파티션
    • 리더 파티션 가지는 브로커 문제 생기면 탈락. 다른 팔로워
  • 컨트롤러가 중단된 경우
    • 주키퍼가 감지하여 새로운 컨트롤러 선출
  • 브로커가 종료될 때, 컨트롤러를 통한 복제 파티션의 리더 재선출 과정 발생
    • 컨트롤러가 리더 파티션 정보 가지고 있음
    • 파티션 정보 바꾸고 주키퍼에게 알려줌
    • 리더 바꿈

메세지 저장 성능 극대화: log append-only

  • 브로커는 파일 시스템 기반
  • 로그 자료구조 형태로 디스크에 저장
    • RDBMS의 트랜잭션 로그 마이너 영향
    • 로그 형태로 디스크 저장
  • 로그는 새로운 쓰기 작업이 중간에 삽입되지 않고 오로지 끝에서만 추가되는 append-only 특징
    • 쓰기 성능 극대화
  • 메세지들은 파티션별로 세그먼트 단위의 파일로 저장
  • ⇒ 파티션으로 발행되는 메세지를 세그먼트 파일에 쓰고, 컨슈머는 이 파일을 읽어가서 메세지를 구독*

메세지 레코드의 구조

  • 헤더
    • 토픽
    • 파티션
    • 메세지 생성 시간
  • 메세지 키
  • 메세지 값

토픽

  • ex) ORDER_APPROVED: 주문 확정 메세지

키

  • 메세지 유니크한 키값
    • DB의 PK와 비슷한 개념
  • Optional
  • 순차 메세지 보장하지 않음
  • 정렬하지 않음

파티션

  • Consumer가 메세지를 처리하는 단위
  • Consumer:Partition은 1:N 관계를 맺고 있다
    • One consumer hasMany partitions
    • Consumer는 Partition을 중첩 없이 소유한다
  • 지정하지 않으면 라운드 로빈 방식으로 자동 할당
  • 파티션을 설계할 때 특정 파티션에 메세지가 몰리지 않도록 유의해야 한다
    • 리밸런싱이 부하가 크기 때문이다
    • 리밸런싱: 컨슈머 추가, 이탈 시 파티션 소유권을 재조정하는 작업
    • 리밸런싱을 최소화해야 한다
    • 리밸런싱이 일어나지 않게 파티션 용량을 여유롭게 설정하는 것도 하나의 방법

Consumer Group

  • 주로 마이크로서비스가 scale-out됐을 때 같은 종류의 노드를 묶을 때 쓴다
    • ex) 주문 마이크로서비스 그룹
  • 분할된 파티션을 병렬 처리하여 성능 극대화
    • 같은 토픽의 메세지를 여러 컨슈머가 나눠서 처리한다Auto Commit
  • 컨슈머 오프셋을 자동으로 업데이트할 지 여부
  • false일 경우, 커밋 코드를 직접 작성해야 함
    • 데이터를 처리한 후 커밋을 한다
  • 일부 데이터가 중복, 유실되어도 상관없는 환경에서 사용
    • 센서, GPS 등
  • 중복, 유실 허용하지 않는 곳에서는 수동 커밋
    • 은행, 카드사

출처

  • 제로베이스 EDA 특강 3주차 - EDA 대표 기술: Kafka 개요, 장용규님
저작자표시 (새창열림)

'MSA > Event Driven Architecture' 카테고리의 다른 글

[EDA] 장단점과 적용 사례  (0) 2024.06.29
[MSA] Event Driven Architecture  (0) 2024.04.21
  1. 개요
  2. 목표
  3. 사용 목적
  4. 특징
  5. 파일 시스템 기반
  6. Pull 방식 (Consumer의 메세지 수신 방식)
  7. 다중 producer, consumer
  8. 확장성
  9. 고가용성
  10. 고성능
  11. Broker 클러스터 구성
  12. Controller: 다른 브로커를 지휘하는 브로커
  13. 메세지 저장 성능 극대화: log append-only
  14. 메세지 레코드의 구조
  15. 토픽
  16. 키
  17. 파티션
  18. Consumer Group
  19. 출처
'MSA/Event Driven Architecture' 카테고리의 다른 글
  • [EDA] 장단점과 적용 사례
  • [MSA] Event Driven Architecture
개발자 이우진
이우진 기술 블로그
  • All (86)
    • Spring Framework (20)
    • MSA (7)
      • Event Driven Architecture (3)
    • Java (3)
    • Flink (2)
    • Computer Science (9)
      • Object Oriented Programming (3)
    • Problem Solving (15)
    • Design Pattern (0)
    • React (4)
    • Javascript (2)
    • Web (3)
    • Tools & Environment (3)
    • C++ (2)
    • misc (5)
    • Essay (3)
      • 기술 회고 (5)
  • 홈
  • 태그
  • 관리자
  • 글쓰기
hELLO · Designed By 정상우.v4.2.2
[Kafka] 개요, 사용 목적, 특징, 구성
상단으로

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.