카프카 스트림즈(Kafka Streams)란?
카프카 스트림즈는 토픽(Topic)에 적재된 데이터를 상태기반(Stateful) 또는 비상태기반(Stateless)으로 실시간 변환하여 다른 토픽에 적재하는 라이브러리입니다.
스트림즈는 카프카에서 공식적으로 지원하고 카프카 버전이 오를 때마다 스트림즈 자바 라이브러리도 같이 릴리즈 되기 때문에 자바 기반 스트림즈 애플리케이션은 카프카 클러스터(Cluster)와 완벽하게 호환되어 편리한 기능을 제공합니다.
스트림즈는 장애가 발생하더라도 정확히 한 번만 데이터가 처리될 수 있도록 장애 허용 시스템을 가지고 있어서 안정성이 뛰어나고 자바 라이브러리로 구현하는 스트림즈 애플리케이션은 JVM 위에서 하나의 프로세스로 진행되기 때문에 분산 시스템이나 스케줄링 프로그램은 필요하지 않습니다.
카프카 스트림즈를 사용하는 이유
컨슈머(Consumer)와 프로듀서(Producer)를 조합하여 스트림즈가 제공하는 기능을 비슷하게 구현할 수 있지만 단 한 번의 데이터 처리, 장애 허용 시스템 등의 특징들은 완벽하게 구현하기는 어렵습니다.
다만, 스트림즈가 제공하지 못하는 기능을 구현할 때는 컨슈머와 프로듀서를 조합하여 구현하면 좋습니다.
(카프카 클러스터가 서로 다른 경우 스트림즈는 지원되지 않습니다.)
또한 스트림즈는 필요하다면 프로세서 API를 사용하여 기능을 확장할 수 있습니다.
카프카 스트림즈의 구조
스트림즈 애플리케이션은 내부적으로 스레드를 1개 이상 생성할 수 있으며, 스레드는 데이터 처리 최소 단위인 태스크(Task)를 1개 이상 가지게 됩니다.
만약 3개의 파티션으로 이루어진 토픽을 처리하는 스트림즈 애플리케이션을 실행하면 내부에 3개의 태스크가 생기게 되는데 이는 컨슈머의 병렬처리를 위해 컨슈머 그룹으로 이루어진 컨슈머 스레드를 여러 개 실행하는 것과 비슷하다고 볼 수 있습니다.
또한 컨슈머와 마찬가지로 파티션과 스트림즈 스레드 개수를 늘림으로써 데이터 처리량을 늘릴 수 있습니다.
실제 운영 환경에서는 2개 이상의 서버로 운영하여 장애가 발생하더라도 안정적으로 스트림 처리를 할 수 있습니다.
토폴로지(Topology)
카프카 스트림즈의 구조와 사용 방법을 알기 위해서는 우선 포톨로지(Topology)와 관련된 개념을 익혀야 합니다.
포톨로지란 2개 이상의 노드들과 선으로 이루어진 집합을 뜻합니다.
종류로는 링형(ring), 트리형(tree), 성형(start) 등이 존재하는데 스트림즈에서 사용하는 토폴로지는 트리 형태와 유사합니다.
카프카 스트림즈에서는 포톨로지를 이루는 노드를 하나의 프로세서(Processor)라고 부르고 노드와 노드를 이은 선을 스트림(Stream)이라고 부르는데 이 스트림은 토픽의 레코드와 동일합니다.
프로세서에는 소스 프로세서, 스트림 프로세서, 싱크 프로세서가 존재합니다.
- 소스 프로세서: 데이터를 처리하기 위해 최초로 선언해야 하는 노드로, 하나 이상의 토픽에서 데이터를 가져오는 역할
- 스트림 프로세서: 다른 프로세서가 반환한 데이터를 처리하는 역할
- 싱크 프로세서: 데이터를 특정 카프카 토픽으로 저장하는 역할, 스트림즈로 처리된 데이터의 최종 종착지
카프카 스트림즈를 개발할 때는 스트림즈 DSL(Domain Specific Language)과 프로세서 API 2가지 방법으로 개발이 가능합니다.
스트림즈 DSL은 스트림 프로세싱에 쓰일 만한 다양한 기능들은 자체 API로 만들어 놓았기 때문에 대부분의 변환 로직을 쉽게 개발할 수 있지만 만약 제공하지 않는 일부 기능들은 프로세서 API를 사용해서 구현할 수 있습니다.
만약 스트림즈 DSL에서 제공하지 않는 일부 기능들의 경우 프로세서 API를 사용해서 구현할 수 있습니다.
다음글
카프카 스트림즈(Kafka Streams) - 스트림즈 DSL의 기본 개념
스트림즈DSL(Streams Domain Specific Language)이란?스트림즈DSL는 아파치 카프카(Apache Kafka)의 스트림 처리 라이브러리인 카프카 스트림즈(Kafka Streams)에서 제공하는 고수준 API입니다.스트림 데이터를 손
devbksheen.tistory.com
'Apache Kafka' 카테고리의 다른 글
카프카 스트림즈(Kafka Streams) - 스트림즈DSL의 주요 옵션 (0) | 2025.02.07 |
---|---|
카프카 스트림즈(Kafka Streams) - 스트림즈DSL의 기본 개념 (0) | 2025.02.07 |
카프카 클라이언트(Kafka Client) - 어드민(Admin) API (0) | 2025.01.30 |
카프카 클라이언트(Kafka Client) - 컨슈머(Consumer) API (2/2) (1) | 2025.01.30 |
카프카 클라이언트(Kafka Client) - 컨슈머(Consumer) API (1/2) (0) | 2025.01.29 |