charminseok
[Kafka] 카프카 토픽 그리고 파티션 본문
Events, Streams, and Kafka Topics
카프카를 이해하기 위해선 파티션과 연관된 다음 개념들을 이해해야 한다.
Events
Event는 과거에 일어났던 사실을 말한다. 불변이며 상태가 변하면서 계속해서 다른 시스템을 옮겨다닌다.
Streams
이벤트 스트림은 동작중인 관련된 이벤트를 나타낸다.
Topics
이벤트 스트림이 카프카에 들어왔을때, 토픽으로 저장된다. 카프카에서 토픽은 구체화된 이벤트 스트림을 뜻한다. 데이터베이스의 테이블이나 파일 시스템의 폴더처럼, 토픽 그룹은 연관된 이벤트들을 모아서 저장한다.
토픽은 consumer와 producer를 나누는 중요한 개념으로 producer가 메세지를 토픽에 저장(push)하고 comsumer가 토픽에서 메세지를 받아(pull)온다.
Partitions
카프카의 토픽은 여러 파티션들로 나뉠 수 있다. 토픽은 논리적인 개념이지만, 파티션은 토픽의 가장 작은 저장단위입니다. 각각의 파티션은 append-only 방식으로 저장되는 하나의 로그 파일이다.
**append-only : 새 데이터를 스토리지에 추가 할 수 있지만 기존 데이터를 변경할 수 없는 컴퓨터 데이터 스토리지의 속성입니다.
Offset
파티션의 메세지는 Offset이라 불리는 고유한 메세지의 순서를 의미하는 식별자 정보를 가지고 있다. 하지만 순서 정보를 가진 Offset을 사용한다고 메세지 순서를 보장하는 것은 아니다.
카프카의 클러스터는 하나 이상의 브로커로 이뤄지는데, 각각의 브로커는 전체 클러스터에 속한 레코드의 서브셋을 가진다.
특정 토픽의 파티션은 여러 브로커에게 배포되는데 이것으로 얻을 수 있는 이점은 다음과 같다.
- 하나의 브로커가 한 토픽의 모든 파티션에 연결될 경우, 이 토픽은 브로커의 처리량에 의해 제한된다. 하지만 파티션들을 여러 브로커에게 나눠서 하나의 토픽은 수평적으로 확장될 수 있고 한 브로커의 처리 능력보다 더 큰 성능을 낼 수 있다.
- 한개의 토픽은 여러 consumer에게 병렬적으로 처리될 수 있다. 모든 파티션을 한 브로커가 처리하면 consumer의 개수에 제한이 있지만, 파티션들을 여러 브로커에게 나누면 더 많은 consumer가 처리할 수 있다.
- 같은 컨슈머의 많은 인스턴스가 다른 브로커의 파티션에 연결될 수 있고, 이로인해 높은 메세지 처리량을 가져올 수 있다.
파티션 메세지 전달방법
- RoundRobin
- Custom Partitioner
- Partition Key
기본적으로 카프카는 Round Robin 방식으로 파티션에 메세지를 분배하는데, customizing을 통해 특정 파티션에 넣을 수 있다.(Custom Partitioner) 또한, Partition key를 정의해 특정 파티션에 넣을 수도 있다.
파티션 키는 해싱함수를 통해 각 파티션으로 메세지를 보낼 수 있다. 이때 파티션 키는 사용자 ID나 장비의 고유 ID를 사용하면 관련된 이벤트를 동일한 파티션에 유지해 순서를 보장할 수 있다.
하지만, 특정 키가 불균형적인 트래픽을 생성한다면 하나의 파티션에서 많은 트래픽을 처리해야할 경우가 생길 수 있기때문에 잘 분산되는지 확인할 필요가 있다.
Reference
Understanding Kafka Topic Partitions | by Dunith Dhanushka | Event-driven Utopia | Medium
'all' 카테고리의 다른 글
[DVC] AI 버전 컨트롤 (0) | 2022.10.20 |
---|---|
테이터베이스 조인연산 종류 (0) | 2022.08.21 |