터칭 데이터

Kafka 중요 개념 본문

Kafka와 Spark Streaming

Kafka 중요 개념

터칭 데이터 2024. 1. 24. 11:49

 

 

3. Kafka 소개


Kafka가 무엇인지 소개하는 시간을 가져보자

 

 

 

 

 

 

 

Contents


1. Kafka 역사
2. Kafka 소개
3. Kafka 아키텍처
4. Kafka 중요 개념
5. Kafka 설치
6. Kafka Python 프로그래밍

 

 

 

 

 

 

 

 

 

 

Kafka 중요 개념


Kafka의 여러 가지 중요 개념(Producer, Topic, Consumer)에 대해서 다시 알아보고 다른 기능들도 살펴보자.

 

 

 

 

 

 

 

Producer, Broker, Consumer, Controller, Consumer Group

 

 

 

 

 

 

 

 

 

 

 

Topics, Partitions, Segments

 

 

Segmant 파일이자 Commit Log

 

요약하자면 Topic은 Producer가 만드는 이벤트 스트림(데이터), Topic은 다수의 Partition으로 나누어집니다. 각 Partition은 Broker라는 서버에 저장되는데 Segment라는 하나 혹은 그 이상의 Physical 로그 파일로 저장됩니다.

 

 

 

 

 

 

 

 

Topic

 

Consumer가 데이터(Message)를 읽는다고 없어지지 않음

 

Consumer별로 어느 위치의 데이터를 읽고 있는지 위치 정보를 유지함

 

Fault Tolerance를 위해 이 정보는 중복 저장됨

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Topic과 Partition와 Replication

 

하나의 Topic은 다수의 Partition으로 구성 (Scalability)

 

하나의 Partition은 Fail-over를 위해 Replication Partition을 가짐

 

한 Partition에는 Leader와 Follower가 존재

○ 쓰기는 Leader를 통해 하고 읽기는 모든 Leader와 Follower를 통해 함

 

 

Kafka는 한 Topic에 들어가는 데이터의 크기와 데이터를 읽어가는 Consumer의 용량을 결정할 수 있습니다.

Topic은 다수의 Partition으로 저장되고 각 Partition은 복제본을 갖습니다. 수평적으로 Partition의 수를 늘려 Topic이 가질 수 있는 데이터의 크기를 늘리고, 수직적으로는 복제본을 늘려 이 데이터를 동시에 읽어갈 수 있는 Consumer의 수를 늘리게 됩니다.

 

쓰기 작업은 무조건 Leader가 읽기 작업은 Leader와 Follower를 통합니다.

 

몇개의 Partition이 있는지, 복제본이 몇 개 있는지와 같은  이런 정보들이 어느 Broker에 저장되어 있는지 기록해야 하는데 이를 책임지는 것이 Controller입니다. Zookeeper모드 일때는 Zookepper를 Kraft일 경우에는 별도의 3개 Controller를 만들어 정보를 유지합니다.

 

 

 

 

 

 

 

 

 

 

 

Partition과 Segment

 

하나의 Partition은 다수의 Segment로 구성됨

○ Segment는 변경되지 않는 추가만 되는 로그 파일이라고 볼 수 있음 (Immutable, Append-Only)
    ■ Commit Log

 

각 Segment는 디스크상에 존재하는 하나의 파일

 

Segment는 최대 크기가 있어서 이를 넘어가면 새로 Segment 파일을 만들어냄

○ 그래서 각 Segment는 데이터 오프셋 범위를 갖게 됨
○ Segment의 최대

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

로그 파일의 특성 (Partition의 특성 => 정확히는 Segment의 특성)

 

항상 뒤에 데이터(Message)가 쓰여짐: Append Only

기존의 데이터가 수정되거나 삭제될 일이 없이 Append Only

 

한번 쓰여진 데이터는 불변 (immutable)

 

Retention period에 따라 데이터를 제거하기도 함

 

데이터에는 번호(offset)가 주어짐

 

 

 

 

 

 

 

 

 

 

 

 

 

 

참고! Commit Log란?

 

Sequential, Immutable, Append-Only

 

WAL (Write Ahead Logging)

데이터 무결성과 신뢰성을 보장하는 표준 방식
데이터베이스에 대한 모든 변경 사항을 먼저 Commit Log라는 추가 전용 파일에 기록

 

Replication과 Fault Tolerance의 최소 단위

 

Data Recovery나 Replay에 사용 가능

 

 

 

 

 

 

 

 

 

 

 

Broker의 역할 (1)

 

Topic은 다수의 시간순으로 정렬된 Message들로 구성

 

Producer는 Topic을 먼저 생성하고 속성 지정

 

Producer가 Message들을 Broker로 전송

 

Broker는 이를 Partition으로 나눠 저장 (중복 저장)

○ Replication Factor: Leader & Follower

 

Consumer는 Broker를 통해 메세지를 읽음

 

 

 

 

 

 

 

 

 

 

 

 

 

Broker의 역할 (2)

 

하나의 Kafka 클러스터는 다수의 Broker로 구성됨

 

하나의 Broker는 다수의 Partition들을 관리/운영

 

한 Topic에 속한 Message들은 스케일을 위해 다수의 Partition들에 분산 저장

 

다수의 Partition들을 관리하는 역할을 하는 것이 Broker들

○ 한 Broker가 보통 여러 개의 Partition들을 관리하며 이 Partition을 이루는 Segment들은 Broker가 있는 서버의 디스크에 저장됨

○ Broker들 전체적으로 저장된 Partition/Replica의 관리는 Controller의 역할

 

하나의 Partition은 하나의 로그 파일이라고 볼 수 있음

○ 각 Message들은 각기 위치 정보(offset)를 갖고 있음

 

이런 Message들의 저장 기한은 Retention Policy로 지정

 

 

 

 

 

 

 

 

 

 

 

 

Producer 기본

 

대부분의 프로그래밍 언어로 작성 가능

○ Java, C/C++, Scala, Python, Go, .Net, REST API

 

Command Line Producer 유틸리티도 존재

 

 

 

 

 

 

 

 

Producer의 Partition 관리방법

 

하나의 Topic은 다수의 Partition으로 구성되며 이는 Producer가 결정

 

Partition은 두 가지 용도로 사용됨

○ Load Balancing
○ Semantic Partitioning (특정 키를 가지고 레코드를 나누는 경우)

 

Producer가 사용 가능한 Partition 선택 방법

○ 기본 Partition 선택: hash(key) % Partition의 수
○ 라운드 로빈: 돌아가면서 하나씩 사용
○ 커스텀 Partition 로직을 구현할 수도 있음

 

 

 

 

 

 

 

 

 

 

Consumer 기본

 

Topic을 기반으로 Message를 읽어들임 (Subscription이란 개념 존재)

 

Offset를 가지고 마지막 읽어들인 Message 위치정보 유지

 

Command Line Consumer 유틸리티 존재

 

Consumer Group라는 개념으로 Scaling 구현

○ Backpressure 문제 해결을 위한 방법

 

Consumer는 다시 Kafka에 새로운 토픽을 만들기도 함

○ 아주 흔히 사용되는 방법으로 하나의 프로세스가 Consumer이자 Producer 역할 수행

 

 

 

 

 

 

'Kafka와 Spark Streaming' 카테고리의 다른 글

Kafka 설치  (0) 2024.01.24
Kafka 기타 기능 살펴보기  (0) 2024.01.24
Kafka 아키텍처  (0) 2024.01.24
Kafka 역사와 소개  (0) 2024.01.24
1장 퀴즈 리뷰  (0) 2024.01.23