프로그래밍(Web)/공부일기
[바미] 실전 아파치 카프카 - 카프카의 구성요소
Bami
2023. 9. 25. 15:30
728x90
반응형
카프카의 구성요소
- 프로듀서 : 데이터 생산자이며 브로커에 메시지를 보내는 애플리케이션
- 메시지 : 카프카에서 데이터를 다루는 최소 단위
- 브로커 : 데이터 수신 및 전달하는 서비스
- 컨슈머 : 브로커에게 메시지를 전달받는 애플리케이션
- 토픽 : 메시지를 종류별로 관리하는 스토리지. 브로커에 배치되어 관리된다.
프로듀서와 컨슈머는 특정 토픽을 지정하여 메시지를 송수신한다.
프로듀서 -> 브로커 -> 컨슈머의 흐름에서, 프로듀서 -> 브로커는 PUSH형 / 브로커 -> 컨슈머는 PULL형으로 이루어집니다.
PULL형의 장점은 컨슈머 고장 시 브로커에 미치는 영향이 적으며, 컨슈머의 증감에 효율적으로 대응할 수 있게 되죠.
카프카의 브로커에서 분산 처리를 위한 관리 도구로 주키퍼가 필요합니다.
주키퍼는 카프카에서 분산 메시징의 메타 데이터를 관리하기 위한 구성 요소로 기능합니다.
주키퍼 클러스터(주키퍼 앙상블)의 구조상 3, 5, 7... 등의 홀수로 구성해야 합니다.
아래는 분산 메시징 관련으로 좀 더 깊이 알기 위한 이미지입니다.
- 파티션 : 토픽에 대한 대량의 메시지 입출력을 위해, 브로커에서 데이터를 읽고 쓰는 것은 파티션이라는 단위로 분할됩니다.
- 컨슈머 그룹 : 컨슈머에서 분산 스트림 처리를 고려해 설계된 것이다. 단일 애플리케이션 안에서 여러 컨슈머가 단일 토픽이나,
여러 파티션에서 메시지를 취득하는 방법으로 컨슈머 그룹이라는 개념이 있습니다. - 오프셋 : 각 파티션에서 수신한 메시지에 일련번호가 부여되어 파티션 단위로 메시지 위치를 나타내는 오프셋이라는 정보를
이용해 컨슈머가 취득하는 메시지의 범위 및 재시도를 제어하게 되는데 제어에 사용되는 오프셋은 아래 3가지가 있습니다.
- Long-End_offset : 파티션 데이터의 끝을 나타냅니다.
- Current Offset : 컨슈머가 어디까지 메시지를 읽었는가를 나타냅니다.
- Commit Offset : 컨슈머가 어디까지 커밋했는지를 나타냅니다.
메시지 송신 시 어떻게 파티션에 보내는지 결정하는 기능이 있습니다.
- Key의 해시 값을 이용한 송신 : Key에 따라 송신처 파티션을 결정하는 로직이 있습니다.
동일한 Key는 동일한 파티션에 송신되죠. - 라운드 로빈에 의한 송신 : 메시지 Key를 지정하지 않고 Null로 한 경우 라운드 로빈 방식으로 실행됩니다.
브로커의 데이터 보관 기간은 스토리지 용량 제한으로 무제한 저장할 수 없기에 아래 정책들로 데이터 삭제를 설정할 수 있습니다.
- 오래된 메시지 삭제.
- 압축 : 최신 Key의 데이터를 남겨두고 중복되는 Key의 오래된 메시지가 삭제됩니다.
동일한 Key에 대해 최신의 Value만 얻을 수 있으면 되는 상황에서 사용하게 됩니다.
카프카는 또한 메시지를 잃지 않기 위해 복제(Replication) 구조(Leader - Follower)를 가지고 있습니다.
파티션은 단일 또는 여러 개의 레플리카로 구성되어 토픽 단위로 레플리카 수를 지정할 수 있습니다.
레플리카 중 하나는 Leader, 나머지는 Follower로 불린다. 복사하는 방법은 아래와 같이 진행됩니다.
카프카의 전체 구조를 정리하자면 아래와 같아집니다.
참고 도서
실전 아파치 카프카, 한빛 미디어
728x90
반응형