[java] Kafka Streams와 자동 스케일링 방법

Kafka Streams는 분산 스트리밍 애플리케이션을 구축하기 위한 라이브러리입니다. 이를 통해 실시간 데이터 처리와 처리된 결과의 상태 유지를 쉽게 구현할 수 있습니다. 하지만 대량의 데이터 처리나 높은 처리량을 필요로 할 때는 수동으로 스케일링 작업을 수행해야 할 수도 있습니다. 이 문제를 해결하기 위해 카프카 스트림즈에서는 자동 스케일링을 제공하고 있습니다.

카프카 스트림즈의 자동 스케일링

카프카 스트림즈는 애플리케이션의 처리량을 모니터링하고, 필요에 따라 자동으로 인스턴스를 증가 또는 감소시킵니다. 이를 위해 다음과 같은 방법을 사용합니다.

  1. 리파이닝 (Repartitioning) : 카프카 스트림즈는 입력 토픽과 출력 토픽 간의 파티션을 조절하여 처리량을 조절할 수 있습니다. 처리량이 증가하면 파티션 수를 늘리고, 처리량이 감소하면 파티션 수를 줄입니다. 이를 통해 자동적으로 스케일 아웃 및 다수의 인스턴스에 작업을 분산시킬 수 있습니다.
  2. 간접적인 스케일링 : 카프카 스트림즈는 토폴로지의 메모리 사용량, CPU 사용량, 처리량 등을 모니터링합니다. 이 정보를 통해 처리량에 따라 인스턴스 수를 자동으로 조절할 수 있습니다. 이러한 스케일링 방법은 대부분의 경우 우수한 성능을 제공합니다.

카프카 스트림즈에서의 자동 스케일링 활성화

카프카 스트림즈에서 자동 스케일링을 활성화하려면 애플리케이션의 설정 파일에 다음과 같은 속성을 추가해야 합니다.

processing.guarantee=exactly_once
num.stream.threads=auto
  1. processing.guarantee=exactly_once : 카프카 스트림즈는 한 번의 메시지 전달을 보장하기 위해 이 설정을 지원합니다. 이 옵션을 활성화하면 자동 스케일링이 가능해집니다.
  2. num.stream.threads=auto : 카프카 스트림즈는 이 설정을 통해 사용 가능한 스레드 수를 기준으로 자동 스케일링을 수행합니다. auto 값을 사용하면 자동으로 적절한 스레드 수를 계산하여 인스턴스의 수를 조절합니다.

자동 스케일링 효과적인 사용 방법

자동 스케일링을 효과적으로 사용하기 위해 다음 사항을 고려해야 합니다.

  1. 토폴로지 최적화 : 카프카 스트림즈는 토폴로지의 복잡도에 따라 자동 스케일링 효율이 달라집니다. 따라서 가능하면 간단하고 단순한 토폴로지를 구성하는 것이 좋습니다.
  2. 인스턴스 크기 조정 : 처리량이 증가할 수록 필요한 리소스도 증가합니다. 인스턴스 크기를 적절하게 조정하여 자원의 효율적인 할당을 해야합니다.
  3. 모니터링 : 카프카 스트림즈의 자동 스케일링은 모니터링 정보를 기반으로 수행됩니다. 따라서 시스템의 성능을 실시간으로 모니터링하고 스케일링 작업을 수행해야합니다.

참고 자료