강의

멘토링

로드맵

Cộng đồng Hỏi & Đáp của Inflearn

Hình ảnh hồ sơ của writer0713
writer0713

câu hỏi đã được viết

Nhập môn Kafka áp dụng ngay vào thực tế

[Thực hành] Xử lý tin nhắn song song với một Consumer duy nhất trong Spring Boot

concurrency 동작 안됨

Viết

·

67

0

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

 

  • partition : 3개

  • concurrency : 3

  • partitional.class: org.apache.kafka.clients.producer.RoundRobinPartitional

 

로그 :

로그를 봐서는 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

kafkaEDAmsadevopsinfrastructure

Quiz

49% người trả lời sai. Hãy thử ngay!

Nguyên nhân chính khiến việc xử lý tin nhắn trong Kafka không hiệu quả là gì?

Độ trễ mạng

Nhà sản xuất 오버로드

Kafka phân vùng

Nghẽn cơ sở dữ liệu

Câu trả lời 3

0

jscode님의 프로필 이미지
jscode
Người chia sẻ kiến thức

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

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

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

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

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

늘 파이팅입니다 !

0

writer0713님의 프로필 이미지
writer0713
Người đặt câu hỏi

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

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

 

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

0

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

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

주요 체크 포인트:

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

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

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

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

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

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

추가 자료:

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

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

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

Hình ảnh hồ sơ của writer0713
writer0713

câu hỏi đã được viết

Đặt câu hỏi