inflearn logo
강의

Course

Instructor

Introduction to Kafka for Immediate Real-World Use

[Hands-on] Processing messages in parallel with a single consumer in Spring Boot

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

74

writer0713

16 asked

0

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

 

 

 

이런 경우, 같은 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 옵션을 사용하는지 궁금합니다.

kafka EDA msa devops infrastructure

Answer 2

0

jscode

안녕하세요 ! 질문 잘해주셨어요 ~

질문해 주신 내용에 대해 답변드려볼게요 !

 

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

-> 네 맞아요 !

같은 groupId를 가진 Consumer A, B가 각각 concurrency=3으로 설정되어 있고,

토픽에 5개의 파티션이 있다면, 총 6개의 쓰레드 중 1개는 파티션을 할당받지 못하고 놀게 돼요 !

카프카는 같은 Consumer Group 내에서

하나의 파티션은 오직 하나의 컨슈머 쓰레드만 처리할 수 있다는 원칙이 있기 때문에,

파티션 수(5개)보다 컨슈머 쓰레드 수(6개)가 많으면 남는 쓰레드는 메시지를 받지 못하게 돼요 !

 

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

-> 실무에서 자주 사용돼요 !

concurrency 옵션을 사용하면 하나의 Spring Boot 애플리케이션 내에서

여러 개의 컨슈머 쓰레드를 띄울 수 있어서,

메시지 처리량(Throughput)을 높이는 데 효과적이기 때문이죠 :)

 

추가로 궁금하신 점 있으시면 언제든 질문 남겨주세요~~

0

communityai8509

안녕하세요, 인프런 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 옵션은 쉽게 스레드를 늘려 병렬 처리 성능을 증대시킬 수 있어 유용하지만, 늘어난 스레드 수 만큼의 적절한 파티션 수와 시스템 리소스가 뒷받침 되어야 합니다.

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

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

2. Kafka 설치 파일 다운받기 404 Not Found 오류 관련

0

59

2

UserSignedUpEventConsumer 에서 로그 DB 저장 문의

0

51

2

리더 파티션 선출 규칙에 관한 질문

0

69

2

kafka 실패 후 재시도 DLT 소비 무한으로 하는 현상이 발생합니다

1

141

2

질문드립니다.

0

53

2

잘못된 이메일 주소로 인해 발송 실패 코드

0

107

3

카프카 서버 관련 질문입니다.

0

89

2

선생님 질문이 있습니다. 왜 바로 aws 설치 하시는지 궁금합니다.

0

98

2

Kafka 음성메세지 브로커로도 적합한가요?

0

78

2

재시도조차 실패한 메시지 사후 처리하기

1

110

2

retry 시 동작과정 질문

0

119

2

JsonSerializer & JsonDeserializer

0

73

2

auto.create.topics.enable=false 설정

0

100

2

email 발송 로직 관련

0

69

2

concurrency 동작 안됨

0

72

3

컨슈머 서버 점진적 배포 시나리오

0

63

2

Connection -1

0

58

2

적정 파티션 개수 계산하는 방법 질문드립니다

0

126

2

섹션5 33 질문드립니다

0

47

1

aws아닌 도커로는 안되나요?

0

102

2

파티션 증가 질문드립니다

0

76

2

섹션7 51 컨슈머서버 무한 리로드?

0

141

4

섹션6 43 질문드립니다

0

57

3

kafka [37강의]

0

64

2