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할 수 있음
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를 가지는 메시지 저장
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에 의해서만 사용
총정리
Consumer가 자동이나 수동으로 데이터를 읽은 위치를 commit하여 다시 읽음을 방지
_ _consumer_offsets 라는 Internal Topic에서 Consumer Offset을 저장하여 관리
동일한 group.id 로 구성된 모든 Consumer들은 하나의 Consumer Group을 형성
다른 Consumer Group의 Consumer들은 분리되어 독립적으로 작동
동일한 Key를 가진 메시지는 동일한 Partition에만 전달되어 Key 레벨의 순서 보장 가능
Key 선택이 잘 못되면 작업 부하가 고르지 않을 수 있음
Consumer Group 내의 다른 Consumer가
'인강 정리 > Kafka 완전 정복' 카테고리의 다른 글
kafka 기본 개념 및 구성(4) (0) | 2024.10.31 |
---|---|
kafka 기본 개념 및 구성(2) (0) | 2024.10.21 |
kafka 기본 개념 및 구성(1) (1) | 2024.10.18 |
kafka 란? (1) | 2024.10.14 |