Kafka Streams 애플리케이션에서 파티션은 논리적 단위인 Task에 할당된다는 점은 기본적으로 알고 있지만, Task는 애플리케이션의 성능과 데이터 처리 효율성에 중요한 영향을 미치기 때문에, Task에 파티션이 할당되는 과정을 더 자세히 이해할 필요가 있다.
우선적으로 StreamsPartitionAssignor에 대해 알 필요가 있다.
StreamsPartitionAssignor란?
|
StreamsPartitionAssignor 간략 동작 과정
간략 동작 과정 1. Topic Partitioin 을 기반으로 Task 생성
2. Task에 Topic Partition 들 을 할당
3. Task를 StreamThread에 분배
|
결론
파티션 개수가 다른 여러 토픽을 컨슈밍하는 KafkaStreams 애플리케이션은 Task들에 균등한 개수의 Partition 할당이 되지 않는다.
하지만 아래와 같은 파훼법(?)은 있을수 있다.
topology 다양화
taskID 의 이름 구성요소는 subtopology (aka topicGroupId)와 parititon을 의미합니다.
즉, 0_0은 subtopology 0번과 0번 파티션 0_1은 subtopology 0번과 1번 파티션 이다. → Topology는 데이터 처리 로직을 정의하는 구조이며, Task는 이 Topology를 실행하여 데이터를 처리하는 단위
위에서 언급되었던 Task들에 균등한 개수의 Partition 할당이 되지 않는 문제 는 단일 토폴로지였기 때문에 발생하는 것이다. → task 0_0이 모든 토픽의 0번 partition을 구독함. 즉 task를 다양화 하면 각각 구독하는 토픽이 다양화되어 partition이 분할됨
요약하자면
- 태스크와 서브-토폴로지의 관계: 카프카 스트림에서 각 태스크는 하나의 서브-토폴로지를 처리합니다. 즉, 애플리케이션의 전체 데이터 처리 흐름을 여러 개의 서브-토폴로지로 분리하여 병렬 처리가 가능하도록 설계됨.
- 병렬 처리의 확장: 이 접근 방식은 계산 작업을 여러 태스크로 확장시켜, 시스템의 처리 성능과 확장성을 크게 향상시킬 수 있음. 각 태스크는 독립적으로 동작할 수 있기 때문에, 전체 데이터 처리량이 증가하더라도 작업이 적절히 분산되어 고성능 처리가 가능.
> Each task may instantiate only one such sub-topology for processing. This further scales out the computational workload to multiple tasks.
------------------------------------------------------------------------------------------------------------------------------
추가 내용
TaskAssignor 란?
설명
Kafka Streams에서 스트림 처리 Task를 클라이언트 인스턴스(StreamThread) 에 할당하는 데 사용되는 인터페이스
즉, Task를 StreamThread에 분배 하는 역할
(custom task assignor를 Apache Kafka® 3.8 부터 지원)
'게으른개발자 > 공부' 카테고리의 다른 글
DB three-valued logic (NULL의 의미) (0) | 2023.03.26 |
---|---|
DB(PostgreSQL) 인덱스와 활용방법 (컴포지트 인덱스, 커버링 인덱스) (0) | 2023.03.13 |
gRPC 간단 정리와 예제 (0) | 2023.02.25 |
OSI 7Layer와 L1, L2, L3, L4, L7 스위치 (0) | 2022.10.30 |
REST vs. RESTful (0) | 2022.09.13 |