본문 바로가기
Framework/Kafka

[Kafka] 아파치 카프카 기본 개념 :: 카프카 스트림즈

by 미미믹 2024. 10. 8.

아파치 카프카 애플리케이션 프로그래밍 with 자바 책 공부 내용 정리

카프카 스트림즈는 토픽에 적재된 데이터를 실시간으로 변환하여 다른 토픽에 적재하는 라이브러리다.
카프카 스트림 데이터 처리를 위해 다양한 오픈소스 애플리케이션이 존재하지만, 스트림즈는 카프카에서 공식적으로 지원하는 라이브러리다. 자바 기반 스트림즈 애플리케이션은 카프카 클러스타와 완벽하게 호환되면서 스트림 처리에 필요한 편리한 기능들(신규 토픽 생성, 상태 저장, 데이터 조인 등)을 제공한다.

보통의 빅데이터 처리에 필수적이라고 판단되었던 분산 시스템이나 스케줄링 프로그램들은 스트림즈를 운영하는 데에 불필요하다. 자바 라이브러리로 구현하는 스트림즈 애플리케이션은 JVM 위에서 하나의 프로세스로 실행되기 때문이다.


스트림즈 애플리케이션은 내부적으로 스레드를 1개 이상 생성할 수 있으며, 스레드는 1개 이상의 태스크를 가진다.
스트림즈의 '태스크(task)'는 스트림즈 애플리케이션을 실행하면 생기는 데이터 처리 최소 단위이다.
만약 3개의 파티션으로 이루어진 토픽을 처리하는 스트림즈 애플리케이션을 실행하면 내부에 3개의 태스크가 생긴다.


카프카 스트림즈의 구조는 트리형 토폴로지(topology)의 형태와 유사하다.
카프카 스트림즈에서는 토폴로지를 이루는 노드를 하나의 '프로세서(processor)'라고 부르고 노드와 노드를 이은 선을 '스트림(stream)'이라고 부른다.
스트림은 토픽의 데이터를 뜻하는데 프로듀서와 컨슈머에서 활용했던 레코드와 동일하다.
프로세서에는 소스 프로세서, 스트림 프로세서, 싱크 프로세서 3가지가 있다.
 - 소스 프로세서는 데이터를 처리하기 위해 최초로 선언해야 하는 노드로, 하나 이상의 토픽에서 데이터를 가져오는 역할을 한다.
 - 스트림 프로세서는 다른 프로세서가 반환한 데이터를 처리하는 역할을 한다. 변환, 분기처리와 같은 로직이 데이터 처리의 일종이라고 볼 수 있다.
 - 싱크 프로세서는 데이터를 특정 카프카 토픽으로 저장하는 역할을 하며 스트림즈로 처리된 데이터의 최종 종착지다.


스트림즈 DSL(Domain Specific Language)와 프로세서 API 2가지 방법으로 개발 가능하다.

  • 스트림즈DSL로 구현하는 데이터 처리 예시
    • 메세지 값을 기반으로 토픽 분기 처리
    • 지난 10분간 들어온 데이터의 개수 집계
    • 토픽과 다른 토픽의 결합으로 새로운 데이터 생성
  • 프로세서 API로 구현하는 데이터 처리 예시
    • 메세지 값의 종류에 따라 토픽을 가변적으로 전송
    • 일정한 시간 간격으로 데이터 처리

✨ 참고도서정보 :: 아파치 카프카 애플리케이션 프로그래밍 with 자바 (최원영)