강의

멘토링

로드맵

Inflearn Community Q&A

tommy0419's profile image
tommy0419

asked

[Apache Kafka Application Programming] From concepts to consumers, producers, connects, and streams!

Partitioner

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

Written on

·

16

0

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

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

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

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

 

kafka데이터-엔지니어링

Answer 2

0

dvwy님의 프로필 이미지
dvwy
Instructor

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

 

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는 특정 파티션의 데이터를 독립적으로 처리하게 됩니다.

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

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

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

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

tommy0419's profile image
tommy0419

asked

Ask a question