강의

멘토링

로드맵

인프런 커뮤니티 질문&답변

writer0713님의 프로필 이미지
writer0713

작성한 질문수

실전에서 바로 써먹는 Kafka 입문

[실습] Spring Boot에서 하나의 컨슈머로 메시지 병렬적으로 처리하기

concurrency 설정 + 같은 groupId 내에 consumer 여러개

작성

·

8

0

concurrency 관련하여 궁금한점이 있습니다.

 

  • 하나의 topic (ex. email.send) 에 5개의 파티션이 있다고 가정.

 

  • 같은 groupId 로 지정된 consumer 2 (A, B)개가 있고 각각 concurrency=3 으로 설정이 되어 있다고 가정

 

이런 경우, 같은 groupId 내의 컨슈머는 같은 partition 을 consume 할 수 없으니 1개의 thread 는 동작하지 않게 된다고 보면 될까요?

A-1 thread ===> partition 1

A-2 thread ===> partition 2

A-3 thread ===> partition 3

B-1 thread ===> partition 4

B-2 thread ===> partition 5

B-3 thread (동작안함) ====> x


추가로 실무에서는 일반적으로 concurrency 옵션을 사용하는지 궁금합니다.

답변 1

0

안녕하세요, 인프런 AI 인턴입니다. writer0713님.

Kafka에서 컨슈머 그룹과 파티션의 관계는 데이터의 병렬 처리와 관련된 중요한 요소입니다. 질문하신 내용에 대해 간략히 설명 드리겠습니다.

Kafka의 컨슈머 그룹과 파티션:

컨슈머 그룹 내의 컨슈머들은 각기 다른 파티션을 할당받아 데이터를 처리하게 됩니다. 같은 그룹 내의 컨슈머들은 같은 파티션을 동시에 처리할 수 없으므로, 주어진 파티션 수보다 많은 스레드(concurrency)를 설정하면 일부 스레드가 사용되지 않을 수 있습니다.

주어진 예시의 해석:

  • 5개의 파티션과 두 개의 컨슈머 그룹, A와 B가 있으며, 각 컨슈머가 concurrency=3 를 설정했습니다.
  • 결과적으로 파티션의 수는 5개인데, 컨슈머가 사용 가능한 스레드는 6개(3 스레드 * 2 컨슈머)이기에 질문하신 예시에 설명하신 것처럼 하나의 스레드는 동작하지 않게 됩니다.
  • 이 경우, 실제 동작은 이렇게 됩니다:
    
    A-1 ===> partition 1
    A-2 ===> partition 2
    A-3 ===> partition 3
    B-1 ===> partition 4
    B-2 ===> partition 5
    B-3 ===> (idle - 할당 없음)
    

실무에서 concurrency 옵션 사용:

  • 실무에서는 컨슈머 당 적절한 스레드 수를 설정하여 최대 병렬 처리 성능을 도출합니다.
  • 파티션 수가 중요하며, 보통 파티션 수와 컨슈머 수를 유사한 수로 맞추려는 노력을 합니다.
  • concurrency 옵션은 쉽게 스레드를 늘려 병렬 처리 성능을 증대시킬 수 있어 유용하지만, 늘어난 스레드 수 만큼의 적절한 파티션 수와 시스템 리소스가 뒷받침 되어야 합니다.

관련된 추가 정보는 아래 유사한 질문 링크를 참고하시면 도움이 될 것입니다:

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

writer0713님의 프로필 이미지
writer0713

작성한 질문수

질문하기