728x90

1.Producer

Producer - 메시지를 생상(Produce)해서 Kafka의 Topic으로 메시지를 보내는 애플리케이션

 

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

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

 

 

 

 

1-1 메세지 구조 

Message 는 Record 혹은 Event 혹은 Data 로 불림

 

 

 

Kafka는 Record(데이터)를 Byte Array로 저장(Producer는 Serializer, Consumer는 Deserializer)

 

 

아래 이미지에서 실제로 내가 할것은 send() 호출  호출전에는 옵션 여부 ? 정보 만 하면 이후는 카프카에서 알아서 처리된다.

 

1-2 Partitioner 

메세지를 Topic의 어떤 Partition으로 보낼지 결정( 지정 가능!)

 

아래는 default Partiotiner  역할 (Key가Null이 아닐때만 성립되기 때문에 key를 꼭 보내야 한다.)

 

 

아래는 key 가 null 일때 Default Partitiner 동작 

2.4 이전은 Round Robin 형식 , 2.4 이후에는 Sticky 형식 으로 

Partitiner는 개발 및 Custom하여 개발해서 교체가 가능하다.

 

 

 

 


2.Consumer

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

 

ConsumerGroup

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

 

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

 

 

*Consumer 는 각각 고유의 속도로 Commit Log 로부터 순서대로 Read(Poll)을 수행

* 다른 Conumser Group에 속한 Consumer들은 서로 관련이 없으며, CommitLog에 있는 Event(Message)를 동시에 다른 위치에서Read할 수 있음

 

그룹별/파티션 별 consumer 동작 및 ooffset저장

 

 

 

2-1. Cousmer Group이 없는 경우 

 

2-2. Cousmer Group이 있는 경우

동일한 GroupId지정 시  Conusmer들은 하나의 Consumer Group을 형성

 

4개의 Partition이 있는 Topic을  Conme 하는 4개의 Consumer가 하나의 Consumer Group에 있다면 각 Consumer는 정확히 하나의 Partition에서 Record를 Consumer함

Partition은 항상 Consumer Group내의 하나의 Consumer에 의해서만 사용

Consumer는 주어진 Topic에서 0개 이상의 많은 Partition을 사용할 수 있다.

같은 토픽이라도 그룹을 나눠서 사용하면 같은 토픽을 사용가능

 

 

키가 지정된 메세지 의 경우  partition별로 동일한 key를 가지는 메시지 저장

key AAA 는 Topic A에 0번 파티션

 

 

Key BBB는 Topic A에 1번 파티션

 

 

2-3 Message Ordering (메세지 순서) 

Partition 2개 이상ㅇ인 경우 모든 메세지에 대한 전체 순서 보장 불가

Partition 1개로 구성하면 모든 메세지 전체 순서 보장 가능(처리량은 떨어짐)

 

 

이때 아래예시 처럼 Key 를 통해  동일 Partition의 순서를 보장하여 처리 가능

* 운영중에는 Partiton 개수를 변경하면 안된다.( 변경 시 순서 보장 불가) 

키를 통해 순서보장하여 처리

 

2-4.Cardinality(특정 데이터 집합의 유니크(Unique)한 값의 개수)

 

위 내용 처럼 파티션 전체 데이터를 배포하기위해 키를 만들어  고르게 배포하는게 중요함.

 

2-5 Consumer Failure (Consumer Rebalancing )

Consumer Group에 4개의 Consumer 가 있고  4개의 파티션이 있다면 각 Consumer 가 각각 하나의 파티션 에서 record를 consume함 

 

Conusmer는 주어진 Topic 에서 0개 이상의 많은 Partiton 사용 가능

 

Consumer Group내의 다른 Consumer가 실패한 Consumer 를 대신하여 Partition에서 데이터를 가져와서 처리 

Partition은 항상 Consumer Group내의 하나의 Consumer에 의해서만 사용

실패한 경우 0번 파티션을 읽고 있던 consumer가 3번도 읽게됨

 

 

총정리

 

Consumer가 자동이나 수동으로 데이터를 읽은 위치를 commit하여 다시 읽음을 방지

_ _consumer_offsets 라는 Internal Topic에서 Consumer Offset을 저장하여 관리

동일한 group.id 로 구성된 모든 Consumer들은 하나의 Consumer Group을 형성

다른 Consumer Group의 Consumer들은 분리되어 독립적으로 작동

동일한 Key를 가진 메시지는 동일한 Partition에만 전달되어 Key 레벨의 순서 보장 가능

Key 선택이 잘 못되면 작업 부하가 고르지 않을 수 있음

Consumer Group 내의 다른 Consumer가
728x90

'인강 정리 > Kafka 완전 정복' 카테고리의 다른 글

kafka 기본 개념 및 구성(4)  (0) 2024.10.31
kafka 기본 개념 및 구성(2)  (0) 2024.10.21
kafka 기본 개념 및 구성(1)  (1) 2024.10.18
kafka 란?  (1) 2024.10.14

+ Recent posts