Search

[분산 시스템] Kafka란 무엇일까?

생성일
2023/07/31 11:21
태그
kafka
날짜
2023/08/01
3 more properties

Reference

Kafka Overview

Kafka 주요 특징

1.
Kafka는  Pub-Sub Model을 지원하는  분산 메세지 큐이다
2.
여러대의 서버로 Scale-out할 수 있는 클러스터를 구성한다
3.
Topic을 중심으로 Publisher = Producer Subscriber = Consumer(Group) 로 데이터 관리 및 처리
4.
하나의 Topic은 복수개의 Partition으로 확장 가능하다

Kafka가 해결하는 문제

1.
RabbitMQ 같은 single message queue가 가지는 scale과 속도의 문제를 해결할 수 있다
2.
Cluster 구성으로 Fault Tolerance, High Availability를 자체적으로 해결한다
3.
Topic, Partition, Offset, Producer (ack), Consumer group (commit) 개념으로 대용량 분산 메세지 처리에서의 메세지 저장과 처리의 신뢰를 관리할 수 있는 메커니즘 구현
4.
 대용량 데이터를 다루면서도 빠른 데이터 처리가 가능하다

이벤트 스트리밍 플랫폼

kafka의 지향점
이벤트 스트리밍 플랫폼은
여러 이벤트 소스에서 발생하는 이벤트를 안정적으로 처리할 수 있는 시스템
초당 테라바이트 이상의 이벤트를 처리하기 위해 높은 안정성 및 확장성 지향
producer API, consumer API, Kafka-Streams, Kafka-Connector 라이브러리 등을 통해 탄력적으로 스트리밍 데이터를 처리할 수 있도록 → 이벤트 스트리밍 플랫폼 지향

Kafka 구성 요소

Kafka는 고성능 TCP 네트워크 프로토콜을 통해 통신하는 서버와 클라이언트로 구성된 분산 시스템이다

Kafka Server

Kafka는 하나 이상의 서버로 구성된 클러스터
서버 중 일부는 브로커라고 하는 스토리지 계층을 형성
그외 다른 서버는 Kafka Connect를 통해 스트리밍 → Kafka와 다른 시스템 (RDBMS, Other Kafka cluster)과 통합

Kafka Client

네트워크 또는 시스템 문제에도 고가용성을 보장하면서 이벤트 스트리밍을 병렬적으로 처리
Java, Scala, Go, Python, C, C++ Client Library 제공

Kafka 주요 개념

이벤트

발생한 일에 대한 기록
이벤트 = 레코드 = 메시지
kafka는 이벤트 형태로 데이터를 쓰고 읽는다
키 + 값 + 타임스탬프 (+ 선택적 메타데이터 헤더)
이벤트 키: 양망고 이벤트 값: 1,000,000,000원 입금 이벤트 타임스탬프: 2023년 7월 31일 8시 46분
Plain Text
복사

프로듀서(Producer)와 컨슈머(Consumer)

Producer와 Consumer 모두 Kafka Client
서로는 완전히 분리 → 확장성 달성의 핵심 이유
Producer
이벤트 발행
Consumer
이벤트 구독, 읽고 처리

토픽(Topic)

Analogy
Topic = 폴더, Event = 폴더 안의 파일
논리적 구분
이벤트가 저장되는 공간
관련 이벤트를 그룹화하고 영구적으로 저장
하나의 토픽에 여러 개의 프로듀서, 컨슈머 가능
기존의 Message Queue와 달리 이벤트는 소비 수 삭제되지 않음
여러번 소비될 수 있음
토픽별로 유지 기간을 설정할 수 있음 (보통 3~7일)
토픽 이름 자체가 고유한 식별자

파티션(Partition)

물리적 구분 (하나의 Queue 논리적 Topic)
토픽 생성 시 파티션의 개수를 지정할 수 있다

오프셋(Offset)

파티션의 레코드가 갖는 고유한 순서 정보 (식별자)
변경 불가능 하며 Kafka 관리 하에 계속 증가
 offset 크기에 따른 순서는 각각의 partition 내에서만 보장
전체 파티션을 대상으로는 순서 보장이 안 됨
Timestamp 비교하는 건 어떨까? → Timestamp도 서버에서 찍는 거라서 서버마다 다를 수 있다
운영체제 레벨에서 시간 동기화 가능 → 그래도 nanosecond까지 같은 시간에 발생한다면?

Kafka 브로커(Broker)

카프카 클러스터는 하나 이상의 브로커 서버로 구성 (정수 번호로 식별)
브로커는 여러 토픽을 갖는 컨데이너
 클러스터 각각의 브로커는 전체의 일부 데이터만 갖지만, 각각이 다른 모든 브로커와 해당 브로커가 가진 파티션 및 토픽에 대해 알고있다

Kafka 클라이언트 API

Producer API: 하나 이상의 토픽에 이벤트를 발행하는 프로듀서 클라이언트 → data write하는 가장 낮은 수준의 API
Consumer API: 하나 이상의 토픽을 구독, 가져온 이벤트 스트림을 처리하는 컨슈머 클라이언트 → Kafka로부터 data read하는 가장 낮은 수준의 API
Streams API
kafka에 대한 입출력을 stream으로 처리하는 추상화된 고수준 API
내부적으로 Producer API, Consumer API 이용해서 구현
ex) SQL(join), Cache, State (순서 ..)
Connector API
기존 데이터 시스템 또는 애플리케이션과 kafka 사이의 데이터 이동의 쉽게 하도록 제공하는 고수준 API
Connector 목적은 Consumer/Producer 클라이언트를 만들지 않고도 외부 시스템과 데이터 스트리밍을 할 수 있게