개발/kafka

역압(back pressure)을 처리하는 애플리케이션 (kafka/spark)

ttoance 2025. 1. 18. 22:27
반응형

카프카인액션 5장을 읽다가, 아래 글을 읽으면서 찾아본 역압 back pressure의 증가를 처리하는 애플리케이션의 뜻을 찾아봤다. 

...컨슈머를 항상 가동하고 실행할 필요가 없다. 이러한 일정한 데이터 흐름이나 볼륨으로 인한 역압 back pressure의 증가를 처리하는 애플리케이션을 개발할 수는 있지만, 컨슈머는 브로커의 리스너가 아니라 데이터를 가져온다 pulling는 점을 알아야 한다. 

 

Backpressure(배압)은 무엇인가?

파이프를 통한 유체 흐름에 반하는 저항, 힘을 말한다. 액체나 증기가 관을 통해 배출 될 때, 유체가 흐르는 방향과 반대 방향으로 작용하는 저항 압력이다. 흔히 ‘역압’ 이라고도 부른다. 배압이 생기는 이유는 마찰이나 수두압, 탱크의 내압등이 이유가 되며 이를 엔지니어들이 아래 그림과 같이 계산하여 설계한다.

ex, 화장실의 변기나 세면대, 주방의 싱크대 가끔 페트병에 쌀을 넣을 때도 넘지는 일을 마주친다. 왜 넘칠까? 바로 backpressure(배압) 때문에 넘치게 된다.

 

▶ 소프트웨어에서의 back pressure는 갑자기 처리량이 몰렸을때 프로듀서와 컨슈머의 차이가 크게 발생해 컨슈머가 뒤쳐졌을때를 생각하면 될 것 같다. 

 

 

Kafka의 배압(back pressure) 메커니즘

Apache Kafka는 배압(back pressure) 현상을 직접적으로 처리하는 메커니즘을 제공하지 않는다. 이는 Kafka의 설계 철학이 단순한 메시지 브로커로서의 역할에 중점을 두고 있기 때문이다. 따라서, 데이터의 생산자(Producer)와 소비자(Consumer) 간의 처리 속도 차이로 인해 발생하는 배압 현상을 관리하는 책임은 주로 컨슈머 애플리케이션에 있다.

 

컨슈머의 Pull 방식과 배압 관리:

- Kafka의 컨슈머는 Pull 방식으로 동작하며, 브로커로부터 데이터를 능동적으로 요청(poll)해서 가져온다. 이러한 구조는 컨슈머가 자신의 처리 능력에 맞게 데이터 수집 속도를 조절할 수 있게 해서, 배압 현상을 효과적으로 관리하는 데 유리하다. 즉, 컨슈머는 필요할 때만 데이터를 가져오므로, 항상 실행 상태를 유지할 필요는 없다.

 

배압 관리의 책임:

- 배압 현상을 효과적으로 처리하려면, 컨슈머 애플리케이션이 자신의 처리 능력과 시스템 자원에 따라 데이터를 가져오는 빈도와 양을 조절해야 한다. 이를 통해 브로커와의 데이터 흐름에서 발생할 수 있는 과부하를 방지하고 시스템의 안정성을 유지할 수 있다.

 

 

실제로 시스템 옵션에 back pressure라는 용어가 사용되는 예시로는 apache spark이 있다. 

Apache Spark의 배압(back pressure) 메커니즘

 

 

Apache Spark의 배압(back pressure) 메커니즘은 스트리밍 애플리케이션에서 데이터 수집 속도와 처리 속도의 균형을 유지하여 시스템의 안정성과 효율성을 보장하는 데 중요하다. 배압은 데이터 소스에서 수집되는 데이터의 양이 처리 시스템의 처리 능력을 초과할 때 발생하며, 이를 적절히 관리하지 않으면 시스템 과부하나 지연이 발생할 수 있다.

 

  1. 자동 배압 조절 기능:
    • Spark Streaming은 자동 배압 조절 기능을 제공하여, 입력 데이터의 수집 속도를 동적으로 조절한다. 이를 통해 시스템의 처리 능력에 맞게 데이터 수집 속도를 자동으로 최적화한다.
  2. 설정 가능한 배압 옵션:
    • spark.streaming.backpressure.enabled: 배압 조절 기능을 활성화하려면 이 옵션을 true로 설정.
    • spark.streaming.backpressure.initialRate: 배압 조절 기능이 활성화되었을 때, 초기에 초당 수집할 데이터의 최대 건수를 설정.
    • spark.streaming.receiver.maxRate: Receiver 기반 스트리밍 소스에서 초당 수집할 수 있는 최대 레코드 수를 제한.
    • spark.streaming.kafka.maxRatePerPartition: Kafka로부터 데이터를 수집할 때, 파티션당 초당 최대 레코드 수를 제한.

이러한 설정을 통해 스트리밍 애플리케이션의 데이터 수집 및 처리 속도를 효과적으로 조절하여 배압 현상을 완화하고 시스템의 안정성을 높일 수 있습니다.

 

 

 

 

 

Stream Backpressue의 이해 

https://monday9pm.com/stream-backpressure%EC%9D%98-%EC%9D%B4%ED%95%B4-de4467b00d31

 

[입개발] Spark Kafka Streaming 에서의 BackPressure 에 대한 아주 간단한 정리.

https://charsyam.wordpress.com/2021/04/24/%EC%9E%85%EA%B0%9C%EB%B0%9C-spark-kafka-streaming-%EC%97%90%EC%84%9C%EC%9D%98-backpressure-%EC%97%90-%EB%8C%80%ED%95%9C-%EC%95%84%EC%A3%BC-%EA%B0%84%EB%8B%A8%ED%95%9C-%EC%A0%95%EB%A6%AC/

 

[spark] 백프레셔(Backpressure)

https://knight76.tistory.com/entry/spark-%EB%B0%B1%ED%94%84%EB%A0%88%EC%85%94Backpressure

 

spark.apache 공식문서 

https://spark.apache.org/docs/latest/configuration.html#spark-streaming

 

Configuration - Spark 3.5.4 Documentation

Spark Configuration Spark provides three locations to configure the system: Spark properties control most application parameters and can be set by using a SparkConf object, or through Java system properties. Environment variables can be used to set per-mac

spark.apache.org

 

반응형