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 동작 안됨

72

writer0713

16 asked

0

하나의 consumer 에서 concurrency 옵션을 통해 멀티 쓰레드로 동작이 되는지 테스트를 해봤는데 강좌화면에서처럼 consumer 가 멀티스레드로 동작하지 않는것 같습니다.

 

 

로그 :

로그를 봐서는 roundrobin 으로 설정을 했음에도 하나의 partition 으로 메시지가 들어가는것 같습니다. 그리고, consumer 도 하나의 스레드로 message 를 consume 하는것으로 보입니다.

2025-10-15T16:01:15.466+09:00  INFO 11736 --- [kafka-practice] [ntainer#0-2-C-1] c.w.kafkapractice.service.OrderService   : Received message {"name":"Product-4","price":4000}
2025-10-15T16:01:17.473+09:00  INFO 11736 --- [kafka-practice] [ntainer#0-2-C-1] c.w.kafkapractice.service.Refresher      : Done processing order..
2025-10-15T16:01:17.474+09:00  INFO 11736 --- [kafka-practice] [ntainer#0-2-C-1] c.w.kafkapractice.service.OrderService   : Received message {"name":"Product-8","price":8000}
2025-10-15T16:01:19.480+09:00  INFO 11736 --- [kafka-practice] [ntainer#0-2-C-1] c.w.kafkapractice.service.Refresher      : Done processing order..
2025-10-15T16:01:19.481+09:00  INFO 11736 --- [kafka-practice] [ntainer#0-2-C-1] c.w.kafkapractice.service.OrderService   : Received message {"name":"Product-16","price":16000}
2025-10-15T16:01:21.485+09:00  INFO 11736 --- [kafka-practice] [ntainer#0-2-C-1] c.w.kafkapractice.service.Refresher      : Done processing order..
2025-10-15T16:01:21.486+09:00  INFO 11736 --- [kafka-practice] [ntainer#0-2-C-1] c.w.kafkapractice.service.OrderService   : Received message {"name":"Product-15","price":15000}
2025-10-15T16:01:23.491+09:00  INFO 11736 --- [kafka-practice] [ntainer#0-2-C-1] c.w.kafkapractice.service.Refresher      : Done processing order..
2025-10-15T16:01:23.491+09:00  INFO 11736 --- [kafka-practice] [ntainer#0-2-C-1] c.w.kafkapractice.service.OrderService   : Received message {"name":"Product-5","price":5000}
2025-10-15T16:01:25.494+09:00  INFO 11736 --- [kafka-practice] [ntainer#0-2-C-1] c.w.kafkapractice.service.Refresher      : Done processing order..
2025-10-15T16:01:25.495+09:00  INFO 11736 --- [kafka-practice] [ntainer#0-2-C-1] c.w.kafkapractice.service.OrderService   : Received message {"name":"Product-18","price":18000}
2025-10-15T16:01:27.499+09:00  INFO 11736 --- [kafka-practice] [ntainer#0-2-C-1] c.w.kafkapractice.service.Refresher      : Done processing order..
2025-10-15T16:01:27.501+09:00  INFO 11736 --- [kafka-practice] [ntainer#0-2-C-1] c.w.kafkapractice.service.OrderService   : Received message {"name":"Product-3","price":3000}
2025-10-15T16:01:29.510+09:00  INFO 11736 --- [kafka-practice] [ntainer#0-2-C-1] c.w.kafkapractice.service.Refresher      : Done processing order..
2025-10-15T16:01:29.510+09:00  INFO 11736 --- [kafka-practice] [ntainer#0-2-C-1] c.w.kafkapractice.service.OrderService   : Received message {"name":"Product-9","price":9000}
2025-10-15T16:01:31.514+09:00  INFO 11736 --- [kafka-practice] [ntainer#0-2-C-1] c.w.kafkapractice.service.Refresher      : Done processing order..
2025-10-15T16:01:31.515+09:00  INFO 11736 --- [kafka-practice] [ntainer#0-2-C-1] c.w.kafkapractice.service.OrderService   : Received message {"name":"Product-13","price":13000}
2025-10-15T16:01:33.522+09:00  INFO 11736 --- [kafka-practice] [ntainer#0-2-C-1] c.w.kafkapractice.service.Refresher      : Done processing order..
2025-10-15T16:01:33.522+09:00  INFO 11736 --- [kafka-practice] [ntainer#0-2-C-1] c.w.kafkapractice.service.OrderService   : Received message {"name":"Product-1","price":1000}
2025-10-15T16:01:35.527+09:00  INFO 11736 --- [kafka-practice] [ntainer#0-2-C-1] c.w.kafkapractice.service.Refresher      : Done processing order..
2025-10-15T16:01:35.529+09:00  INFO 11736 --- [kafka-practice] [ntainer#0-2-C-1] c.w.kafkapractice.service.OrderService   : Received message {"name":"Product-11","price":11000}
2025-10-15T16:01:37.532+09:00  INFO 11736 --- [kafka-practice] [ntainer#0-2-C-1] c.w.kafkapractice.service.Refresher      : Done processing order..
2025-10-15T16:01:37.532+09:00  INFO 11736 --- [kafka-practice] [ntainer#0-2-C-1] c.w.kafkapractice.service.OrderService   : Received message {"name":"Product-19","price":19000}
2025-10-15T16:01:39.538+09:00  INFO 11736 --- [kafka-practice] [ntainer#0-2-C-1] c.w.kafkapractice.service.Refresher      : Done processing order..
2025-10-15T16:01:39.538+09:00  INFO 11736 --- [kafka-practice] [ntainer#0-2-C-1] c.w.kafkapractice.service.OrderService   : Received message {"name":"Product-7","price":7000}
2025-10-15T16:01:41.539+09:00  INFO 11736 --- [kafka-practice] [ntainer#0-2-C-1] c.w.kafkapractice.service.Refresher      : Done processing order..
2025-10-15T16:01:41.539+09:00  INFO 11736 --- [kafka-practice] [ntainer#0-2-C-1] c.w.kafkapractice.service.OrderService   : Received message {"name":"Product-6","price":6000}
2025-10-15T16:01:43.543+09:00  INFO 11736 --- [kafka-practice] [ntainer#0-2-C-1] c.w.kafkapractice.service.Refresher      : Done processing order..
2025-10-15T16:01:43.544+09:00  INFO 11736 --- [kafka-practice] [ntainer#0-2-C-1] c.w.kafkapractice.service.OrderService   : Received message {"name":"Product-20","price":20000}
2025-10-15T16:01:45.554+09:00  INFO 11736 --- [kafka-practice] [ntainer#0-2-C-1] c.w.kafkapractice.service.Refresher      : Done processing order..
2025-10-15T16:01:45.555+09:00  INFO 11736 --- [kafka-practice] [ntainer#0-2-C-1] c.w.kafkapractice.service.OrderService   : Received message {"name":"Product-10","price":10000}
2025-10-15T16:01:47.560+09:00  INFO 11736 --- [kafka-practice] [ntainer#0-2-C-1] c.w.kafkapractice.service.Refresher      : Done processing order..
2025-10-15T16:01:47.560+09:00  INFO 11736 --- [kafka-practice] [ntainer#0-2-C-1] c.w.kafkapractice.service.OrderService   : Received message {"name":"Product-14","price":14000}
2025-10-15T16:01:49.566+09:00  INFO 11736 --- [kafka-practice] [ntainer#0-2-C-1] c.w.kafkapractice.service.Refresher      : Done processing order..
2025-10-15T16:01:49.566+09:00  INFO 11736 --- [kafka-practice] [ntainer#0-2-C-1] c.w.kafkapractice.service.OrderService   : Received message {"name":"Product-17","price":17000}
2025-10-15T16:01:51.568+09:00  INFO 11736 --- [kafka-practice] [ntainer#0-2-C-1] c.w.kafkapractice.service.Refresher      : Done processing order..
2025-10-15T16:01:51.568+09:00  INFO 11736 --- [kafka-practice] [ntainer#0-2-C-1] c.w.kafkapractice.service.OrderService   : Received message {"name":"Product-2","price":2000}
2025-10-15T16:01:53.575+09:00  INFO 11736 --- [kafka-practice] [ntainer#0-2-C-1] c.w.kafkapractice.service.Refresher      : Done processing order..
2025-10-15T16:01:53.577+09:00  INFO 11736 --- [kafka-practice] [ntainer#0-2-C-1] c.w.kafkapractice.service.OrderService   : Received message {"name":"Product-12","price":12000}
2025-10-15T16:01:55.581+09:00  INFO 11736 --- [kafka-practice] [ntainer#0-2-C-1] c.w.kafkapractice.service.Refresher      : Done processing order..

 

github 소스코드 : https://github.com/writer0713/kafka-practice/blob/4cee9e560b2459c4bcbb6b183f3791d70cddd3d1/src/main/kotlin/com/writer0713/kafkapractice/service/OrderService.kt#L34

kafka EDA msa devops infrastructure

Answer 3

0

jscode

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

오타로 인한 디버깅 경험..!

개발자들의 숙명이죠..ㅎㅎ

그래도 문제 파악과 수정까지 잘되서 다행이네요 !!

이후 다른 궁금하신점 생기시면 언제든 질문 남겨주세요 ~

늘 파이팅입니다 !

0

writer0713

자문자답입니다.. ^^;;

yaml 에서 partitioner 설정에 오타가 있었네요.. RoundRobinPartitional 라고 적어서 제대로 동작하지 않은것 같습니다 ㅜㅜ

 

한참 삽질하다가 kotlin code 로 설정을 다시해보니 잘 되어서 하나씩 비교해보니 partitioner 인데 partitional 로 잘못 썼었습니다.

0

communityai8509

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

Kafka Consumer에서 concurrency 옵션을 사용하여 멀티스레드로 동작하려 할 때, 설정이 기대한 대로 작동하지 않을 경우 몇 가지 확인 사항이 있습니다.

주요 체크 포인트:

  1. RoundRobin 배치 확인:
    org.apache.kafka.clients.producer.RoundRobinPartitional 설정은 프로듀서가 메시지를 각 파티션에 라운드 로빈 방식으로 분배하도록 설정합니다. 만약 모든 메시지가 특정한 파티션에만 들어간다면, 프로듀서 설정이 올바르게 적용되었는지 확인이 필요합니다. 프로듀서 측 설정이 잘못될 경우 메시지 분산이 제대로 이루어지지 않을 수 있습니다.

  2. consumer 수와 파티션의 관계:

    • 설정한 concurrency 값과 파티션 수가 같다면, 각각의 스레드가 서로 다른 파티션을 처리할 수 있도록 설정이 되어 있어야 합니다. 하지만 로그를 보면 하나의 스레드만 메시지를 받아들이고 있는 것처럼 보입니다.
  3. Group ID 설정:

    • 그룹 ID가 동일한 경우, 여러 인스턴스 또는 스레드가 동일한 파티션의 메시지를 무조건 순차적으로 처리하게 됩니다. 각 스레드는 서로 다른 파티션을 할당받게 되므로, 각 파티션으로의 메시지 전달이 명확한지 확인하세요.
  4. Kafka 설정 및 로그 확인:

    • Kafka 설정 파일과 로그를 확인하여 설정이 제대로 반영되었는지 디버깅하는 것이 중요합니다. 필요한 경우, 로그 레벨을 높여 추가 디테일을 볼 수 있습니다.
  5. 조정사항:

    • 이상 상황을 확인하려면 일단 메시지가 모두 같은 파티션으로 전송되고 있는지, 그리고 컨슈머가 제대로 스레드를 활용하고 있는지를 확인해야 합니다.
    • 만약 메시지가 한 파티션에 쏠려 있다면, 프로듀서 설정을 점검하고, 메시지 키가 잘못 설정되어 있는지도 확인해보세요.

추가 자료:

아래 유사한 질문과 답변 링크를 참고하여 추가적인 조언을 얻으실 수 있을 것입니다:

이 정보가 문제 해결에 도움되기를 바라며, 기타 궁금한 점이나 추가적인 도움이 필요하시면 질문 남겨 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

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

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 설정 + 같은 groupId 내에 consumer 여러개

0

74

2

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

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