강의

멘토링

로드맵

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

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

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

[Lập trình ứng dụng Apache Kafka] Từ ý tưởng đến người tiêu dùng, nhà sản xuất, kết nối và truyền phát!

Trình phân vùng

충분히 큰 파티션 생성시 궁금증이 존재합니다.

Viết

·

79

0

메시지 키가 있을 경우 전달되는 파티션이 변경되는 것을 방지하기 위해 충분히 큰 파티션으로 생성을 해야한다.

해당 부분에 대해 궁금한 점이 생겨 질문올립니다.

  1. 여기서의 충분히 큰 파티션은 어떻게 산정을 하면 좋을까요?

  2. Spring Application으로 Consumer를 구현한다고 했을 때, 충분히 큰 파티션 생성 시 Consumer : Kafka Topic = 1 : N
    구조로 구독을 하는 방향으로 만들면 되는 건 지 궁금합니다.

 

kafka데이터-엔지니어링

Quiz

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

카프카 프로듀서의 주요 역할은 무엇일까요?

토픽에 저장된 메시지를 읽어오는 역할

외부 데이터를 카프카 토픽으로 보내는 역할

브로커 상태를 모니터링하는 역할

토픽의 파티션 수를 관리하는 역할

Câu trả lời 2

0

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

안녕하세요. 문의사항에 답변드립니다.

 

1.충분히 큰 파티션 산정

여기서 말하는 충분히 큰 파티션이란, 우리가 활용하고 있는 해당 토픽의 프로듀서, 컨슈머의 처리량을 측정하여 산정하시면 됩니다. 예를 들어 해당 토픽으로 보내는 프로듀서의 최대 전송양이 100개/초 이고 컨슈머의 처리량이 100개/초 라면 파티션 개수를 2개로 둘 수 있죠. 이런 경우, 컨슈머를 2개로 할당하여 프로듀서가 레코드를 보내는양이 최대 2배까지 늘어나더라도 대응이 가능합니다. 그렇기 때문에 구현하고자 하는 서비스의 방향성과 미래에 늘어날 데이터양/성능 등을 종합적으로 고려하시는 것이 좋습니다.

 

2.Spring Application Consumer 구현시 어떤 구조로 구독하면 좋을지?

이것은 어떻게 운용하는지에 따라 다릅니다. Spring application에서 consumer는 concurrency를 조절하여 하나의 애플리케이션에서 여러 컨슈머 스레드로 운영할 수 있습니다. 그렇기 때문에 파티션개수 4개일 경우, concurrency=2인 컨슈머 2개로 운영하는 방법도 있고, 또는 concurrency=1인 컨슈머를 4개 운영하는 방법도 있겠습니다. 혹은 concurrency=1인 컨슈머를 2개만 운영하는 경우도 틀린 방법은 아닙니다. 그렇기 때문에 배포하시는 환경과 spring application이 하는 역할 등을 종합적으로 고려하셔야 할것 같습니다.

 

 

0

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

충분히 큰 파티션 생성과 관련된 몇 가지 중요한 사항에 대해 안내해 드리겠습니다.

  1. 충분히 큰 파티션 산정:

    • 충분히 큰 파티션이란 메시지 키가 동일한 데이터를 보장할 수 있을 만큼 적절한 개수의 파티션을 의미합니다. 이는 주로 데이터 처리량, 병렬성, 성능 요구사항, 데이터 크기 등을 기준으로 결정됩니다.
    • 예를 들어, 평균적인 메시지 처리량을 기반으로 한 분당 메시지 수와 동시에 처리해야 할 메시지 수를 파악한 후, 필요한 처리량과 성능을 산정하여 파티션 수를 결정할 수 있습니다.
    • 일반적으로 초기 설정 시에는 예측되는 최대 데이터 처리량보다 여유롭게 잡는 것이 좋습니다. 예를 들어, 예상 처리량의 두 배나 그 이상으로 설정하여 향후 증가할 수 있는 데이터를 대비할 수 있습니다.
  2. Consumer : Kafka Topic = 1 : N 구조:

    • Spring Application에서 Consumer를 구현할 때, 일반적으로 하나의 Consumer가 여러 파티션을 소비할 수 있는 구조로 설정할 수 있습니다. 여러 Consumer로 병렬 처리를 보장하는 것이 목표입니다.
    • 충분히 큰 파티션을 만들었다면, 데이터는 파티션 간에 균등하게 분산되어 처리됩니다. 파티션이 많다면 각 Consumer는 여러 개의 파티션을 처리할 수 있습니다. 이를 통해 병목현상을 최소화하고, 성능 최적화를 이룰 수 있습니다.
    • Consumer 그룹을 활용하여 각각의 Consumer에게 고르게 작업을 분배할 수 있습니다. 이 경우, 각 Consumer는 특정 파티션의 데이터를 독립적으로 처리하게 됩니다.

관련된 기존 논의들은 아래 링크에서 참고하실 수 있습니다:

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.

현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏

추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

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

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

Đặt câu hỏi