Apache Kafka Clients

Producer: 메시지를 생산해서 Kafka의 Topic으로 메시지를 보내는 애플리케이션

Consumer: Topic의 메시지를 가져와서 소비하는 애플리케이션

Consumer Group: Topic의 메시지를 사용하기 위해 협력하는 Consumer들의 집합

 

. 하나의 Consumer는 하나의 Consumer Group에 포함되며,
  Consumer Group 내의 Consumer들은 협력하여 Topic의 메시지를 분산 병렬 처리함

 

Producer와 Consumer의 분리(Decoupling)

. Producer와 Consumer는 서로 알지 못하며, 각각 고유의 속도로 Commit Log에 Write 및 Read를 수행

. 다른 Consumer Group에 속한 Consumer들은 서로 관련이 없으며, Commit Log에 있는 Event를 동시에 다른 위치에서 Read할 수 있음

 

Kafka Commit Log

Commit Log

. 추가만 가능하고 변경 불가능한 데이터 스트럭쳐

Offset
. Commit Log에서 Event의 위치

 

Kafka Offset: Commit Log에서 Event의 위치

Producer가 Write하는 LOG-END-OFFSET과 Consumer Group의 Consumer가 Read하고 처리한 후에 Commit한 CURRENT-OFFSET과의 차이(Consumer Lag)가 발생할 수 있음

 

Topic, Partition, Segment: Logical View

Topic: Kafka 안에서 메시지가 저장되는 장소, 논리적인 표현

Partition
. Commit Log, 하나의 Topic은 하나 이상의 Partition으로 구성
. 병렬 처리(Throughput 향상)를 위해서 다수의 Partition을 사용

Segment
. 메시지(데이터)가 저장되는 실제 물리 File

. Segment File이 지저된 크기보다 크거나 지정된 기간보다 오래되면 새 파일이 열리고 메시지는 새 파일에 추가됨

 

Topic, Partition, Segment: Physical View

Topic 생성 시 Partition 개수를 지정하고, 각 Partition은 Broker들에 분산되며 Segment File들로 구성됨
Rolling Strategy: 특정 용량이나 시간에 따라 Segment 파일을 분리 
. log.segment.bytes(default 1GB)
. log.roll.hours(default 168 hours)

파일을 Rolling하여 분리/생성

 

Active Segment: Partition당 하나의 Active Segment

Partition당 오직 하나의 Segment가 활성화(Active) 되어 있음
-> 데이터가 계속 쓰여지고 있는 중

 

Topic, Partition, Segment의 특징

Topic 생성 시 Partition 개수를 지정 - 개수 변경 가능하나 운영 시에는 변경 권장하지 않음

Partition 번호는 0부터 시작하고 오름차순

Topic 내의 Partition들은 서로 독립적임

Event(Message)의 위치를 나타내는 Offset 이 존재

Offset은 하나의 Partition에서만 의미를 가짐 - Partition 0 의 offset 1은 Partition 1의 offset 1과 연관 없음

Offset값은 계속 증가하고 0으로 돌아가지 않음

Event(Message)의 순서는 하나의 Partition 내에서만 보장

Partition에 저장된 데이터(Message)는 변경이 불가능(Immutable)

Partition에 Write되는 데이터는 맨 끝에 추가되어 저장됨

Partition은 Segment File들로 구성됨 - Rolling 정책: log.segment.bytes, log.roll.hours

'~2022 > Apache Kafka' 카테고리의 다른 글

[Kafka] Producer  (0) 2022.04.07
[Kafka] Broker, Zookeeper  (0) 2022.04.07
[Kafka] server.properties  (0) 2022.04.06
[Kafka] 기본 개념  (0) 2022.03.16
[Apache Kafka] 10. 프로듀서와 컨슈머의 트랜잭션  (0) 2021.11.11

+ Recent posts