kafkaListener 의 concurrency 설정

업데이트:

KafkaListener의 동작 원리와 스레드 관리

기본적으로 @KafkaListener는 하나의 스레드로 작동합니다. 즉, 한 번에 한 메시지만 처리하기 때문에, 처리 속도가 느리거나 메시지가 많을 경우 병목이 발생할 수 있습니다. 이를 해결하기 위해 concurrency 속성을 사용하여 스레드 수를 늘릴 수 있습니다.


concurrency 속성

concurrency는 리스너가 동시에 사용할 스레드의 개수를 지정합니다. concurrency 값을 설정하면, 리스너가 설정된 개수만큼의 스레드를 생성하여 여러 메시지를 동시에 병렬로 처리할 수 있게 됩니다.

그렇다면 concurrency가 높으면 무조건 좋을까?

concurrency값을 높이면 동시에 처리할 수 있는 스레드가 많아지기 때문에, 메시지를 더 빠르게 처리할 수 있을 것처럼 보입니다.

📌  하지만 다음과 같은 점들을 고려해야합니다.


1.  서버 자원 제한

스레드를 많이 생성하면 CPU와 메모리 사용량이 증가합니다. 서버의 자원이 충분하지 않다면, 과도한 스레드 수로 인해 오히려 서버 성능이 저하되고 병목이 발생할 수 있습니다.


2. 메시지 순서 보장

만약 메시지의 순서가 중요하다면, 스레드를 너무 많이 생성할 경우 순서가 보장되지 않을 수 있습니다. 병렬 처리 시 여러 스레드가 동시에 메시지를 처리하면 순서가 뒤섞일 수 있습니다.


3. Kafka 파티션 개수와의 관계 ⭐️ concurrency값을 높인다고 해도 Kafka의 파티션 수가 적다면 스레드가 모두 활용되지 않습니다. 예를 들어, concurrency값을 10으로 설정했지만, Kafka의 파티션 수가 5개라면, 5개의 스레드만 활용됩니다. 따라서 파티션 수와 concurrency값을 적절히 설정해야합니다.


적절한 concurrency값 설정하는 팁

  • 서버의 CPU 및 메모리 사용량을 모니터링하면서 적절한 값을 설정합니다.
  • Kafka의 파티션 수와 concurrency를 맞추어 효율적으로 스레드를 사용합니다.
  • 메시지의 순서가 중요한 경우, concurrency값을 너무 높게 설정하지 않습니다.


결론

요약하자면, concurrency는 Kafka 메시지 처리를 병렬로 할 수 있게 도와주는 중요한 속성이지만, 서버 자원과 Kafka 파티션 개수를 고려해 적절하게 설정하는 것이 중요합니다. concurrency 값을 높이면 무조건 처리 속도가 빨라지는 것이 아니라, 상황에 맞게 조정하는 것이 관건입니다.

참고사이트

댓글남기기