본문 바로가기
Back-End/kafka

[Kafka streams] 아키텍쳐

by hongdor 2023. 2. 27.
728x90

참고 : 공식홈페이지 Apache Kafka - architecture

 

Apache Kafka

Apache Kafka: A Distributed Streaming Platform.

kafka.apache.org

 

Kafka Streams는 Kafka 생산자 및 소비자 라이브러리를 기반으로 구축하고 데이터 병렬 처리, 분산 조정, 내결함성, 운영 간소화를 제공하는 Kafka의 기본 기능을 활용하여 애플리케이션 개발을 간소화한니다.

 

1. Stream Partitions and Tasks

  • Partition이 데이터 로컬리티, 탄력성, 확장성, 고성능 및 내결함성을 구현하는 것의 핵심이다.
  • task는 kafka topic partition을 베이스로한 병렬처리 모델의 논리적인 단위이다.
  • processor topology는 task들로 쪼갬으로써 확장된다. task는 partition 개수만큼 인스턴스가 생성된다. 그리고 병렬적으로 처리된다.
  • 최대 병렬 처리속도는 task 수에 제한된다. 예를들어, 5개의 partition이 있으면 최대 5개 application 인스턴스를 실행할 수 있다. 5개를 초과하면, 나머지 인스턴스는 휴식상태가 되고 인스턴스가 다운될경우 작업을 대체된다
  • kafka streams는 리소스 관리자가 아니라, 실행되는 라이브러리이다. task들은 자동적으로 application 인스턴스들에 분배된다.
  • 인스턴스에 장애가 발생하면 해당 인스턴스에 할당된 모든 tasks가 다른 인스턴스에서 자동으로 다시 시작되고 해당 tasks들은 계속해서 이전과 같은 stream partition을 처리한다.
  • 참고, topic partition은 task에 할당된다. task들은 모든 instances(applications)의 모든 스레드에 할당된다. kafka streams는 StreamsPartitionAssignor 클래스를 사용하여 로드 밸런싱과 상태 저장 작업의 고착성을 절충하기 노력한다.
    (내가 이해한 바로 5개의 task가 있을 때, 5개 스레드를 가진 1개의 application 또는 1개의 스레드를 가진 5개 application은 동일하게 5개의 task를 병렬로 처리한다)

 

2. Threading Model

  • application 인스턴스 안에서 병렬처리를 위해 사용할 threads의 개수를 설정할 수 있다. 각 thread는 topology들의 task들을 독립적으로 처리할 수 있다.
  • kafka topic partition 수만큼 스레드를 설정할 수 있다. 이렇게 되면 각 thread는 최소 1개 이상의 파티션을 처리하게 된다.

 

- 내가 이해한 것

  • 1개의 application의 15개 thread와 1개 thread를 가진 application 15개를 실행하는 것은 비슷하다.
  • thread를 늘리는 것과 application을 늘리는 것의 차이점은 application 인스턴스를 늘리는 것은 application을 종료하지 않고 가능하다. (< 내 생각이고 추가로 리소스 차이도 있다)
  • 내가 찾아본 바로 default thread 수는 1개이다.

 

3. Local State Stores

  • 각각의 task는 작업에 필요한 local state store들이 포함될 수 있다.
  • Kafka streams는 local state store에 대해 내결함성 및 자동 복구 기능 등을 제공한다.

 

4. Fault Tolerance(내결함성)

  • kafka streams 의 task 도 kafka consumer client의 내결함성을 활용해 장애를 처리한다 task 실행이 실패할 경우 다른 application 인스턴스 중 하나에서 자동으로 다시 시작한다
  • local state store도 마찬가지로 내결함성을 지원한다. 각 state store는 상태 업데이트를 추적하는 changelog kafka topic들을 가진다. changelog도 파티션화 되어 각 local state store마다 changelog topic partition을 가지고 있다. log compaction이 활성화 되어 있어서 오래된 데이터를 안전하게 제거 후 저장하여 change log topic이 무한적 커지는 것을 방지할 수 있다. task가 재실행 되는 경우 kafka streams 는 changelog topics을 재생하여 state store들을 복구한다.
  • task 재시작에서 state 복원에 걸리는 시간이 크다. state 복원 시간을 최소화 하려면 state의 standby replicas를 가지도록 application에 설정할 수 있다. (num.standby.replicas 설정) 2.6부터 state의 완전한 복사 본이 있는 application 인스턴스가 있다면, 그 인스턴스에 task가 할당되도록 보장한다.
  • rack awareness 설정을 함께 설정하면, kafka stream이 예비 task를 다른 rack에분배하기 위해서노력하므로, rack에 장애가 발생했을 때 복구 시간이 더 빨라진다 (rack.aware.assignment.tags 설정)

 

728x90

'Back-End > kafka' 카테고리의 다른 글

[Kafka streams] 컨셉  (0) 2023.02.26
[Kafka streams] Tutorial  (0) 2023.02.23
[Kafka streams] 데모 App 실행  (0) 2023.02.23
[Kafka streams] Kafka streams 소개  (0) 2023.02.23
[Kafka] 빠른 시작 예제  (0) 2023.02.15

댓글