Kafka 기반 워크로드 스케일링을위한 모범 사례

Kafka 기반 워크로드 스케일링을위한 모범 사례

Apache Kafka는 대량의 이벤트를 실시간으로 처리 할 수있는 능력으로 유명합니다. 그러나 수백만 건의 이벤트를 처리하려면 Kafka 프로듀서 서비스와 소비자 서비스를 모두 구현하면서 특정 모범 사례를 따라야합니다.

시작하기 전에 Kafka 사용 프로젝트에서 Kafka를 언제 사용 해야하는지 이해합시다.

  • 대량 이벤트 스트림. 애플리케이션/서비스가 사용자 활동 이벤트, 웹 사이트 클릭 이벤트, 센서 데이터 이벤트, 로깅 이벤트 또는 주식 시장 업데이트와 같은 이벤트가 지속적으로 생성되면 Kafka의 대기 시간이 낮은 대량을 처리 할 수있는 능력은 매우 유용합니다.
  • 실시간 분석. 카프카는 특히입니다 데이터가 도착하자마자 처리 해야하는 실시간 데이터 처리 파이프 라인을 구축하는 데 정말 도움이됩니다. 즉각적인 분석/통찰력 및 스트림 또는 배치 처리를 위해 Kafka Streams, Apache Spark 또는 Flink와 같은 분석 엔진으로 데이터를 스트리밍 할 수 있습니다.
  • 애플리케이션 분리. 중앙 메시지 허브 역할을하는 동안 응용 프로그램의 다른 부분을 분리하여 독립적 인 개발 및 서비스 스케일링을 가능하게하고 책임있는 분리 원칙을 장려 할 수 있습니다.
  • 시스템 간 데이터 통합. 분산 시스템을 통합 할 때 Kafka는 팀/프로젝트에 걸쳐 다른 응용 프로그램간에 데이터를 효율적으로 전송하여 신뢰할 수있는 데이터 브로커 역할을 할 수 있습니다.

다른 대기열 시스템과의 주요 차이점

다음은 ActiveMQ, Zeromq 및 Vernemq와 같은 시스템의 Apache Kafka의 차이점입니다.

지속적인 스토리지

Kafka는 분산 로그로 이벤트를 저장하여 시스템/노드 고장의 경우에도 데이터를 재생할 수 있으며, 기존의 메시지 대기열과 달리 Redis와 같은 메모리 내 스토리지에 의존 할 수 있습니다.

분할

데이터는 브로커/주제에 걸쳐 분할되어 큰 데이터 스트림과 높은 처리량의 병렬 처리를 가능하게합니다. 이를 통해 소비자 스레드는 개별 파티셔닝에 연결하여 수평 확장 성을 촉진하는 데 도움이됩니다.

소비자 그룹

여러 소비자가 동일한 주제를 구독하고 파티션 내의 다른 오프셋을 읽을 수있어 다른 팀이 다른 목적으로 동일한 데이터를 소비하고 처리 할 수있는 중복 소비 패턴이 가능합니다. 몇 가지 예는 다음과 같습니다.

  • 의심스러운 활동을 감지하기 위해 ML 팀이 소비 한 사용자 활동
  • 추천 팀을 구축 할 권장 팀
  • ADS 팀은 관련 광고를 생성합니다

Kafka 프로듀서 모범 사례

배치 크기와 링거 시간

구성하여 batch.size 그리고 linger.msKafka 프로듀서의 처리량을 늘릴 수 있습니다. batch.size 바이트의 배치의 최대 크기입니다. Kafka는 생산자에게 보내기 전에 배치를 시도 할 것입니다.

Linger.ms 생산자가 처리를 위해 배치에 추가 메시지가 추가 될 때까지 기다릴 수있는 밀리 초의 최대 시간을 결정합니다.

구성 batch size 그리고 linger.ms 설정은 처리 시스템으로 보내기 전에 축적 된 데이터의 수를 제어하여 시스템의 성능을 크게 돕고 많은 양의 데이터를 처리 할 때 더 나은 처리량과 대기 시간을 줄일 수 있습니다. 또한 선택한 값에 따라 약간의 지연이 발생할 수 있습니다. 특히 올바른 배치 크기 linger.ms 데이터 전송 효율성을 최적화 할 수 있습니다.

압축

처리량을 높이는 또 다른 방법은 compression.type 구성. 생산자는 데이터를 압축 할 수 있습니다 gzip,,, snappy또는 lz4 브로커에게 보내기 전에. 큰 데이터 볼륨의 경우이 구성은 네트워크 효율로 압축 오버 헤드에 도움이됩니다. 또한 대역폭을 절약하고 시스템의 처리량을 증가시킵니다. 또한 적절한 시리얼 라이저 및 키 시리얼 라이저를 설정함으로써 데이터가 소비자와 호환되는 형식으로 직렬화되도록 할 수 있습니다.

회수 및 Idempotency

Kafka Producer의 신뢰성을 보장하려면 회수 및 Idempotency를 활성화해야합니다. 구성하여 retries생산자는 얻지 못하는 모든 데이터 배치를 자동으로 재현 할 수 있습니다. ack 지정된 수의 시도 내에서 중개인에 의해.

감사의 말

이 구성은 성공적으로 전송 된 메시지를 고려하기 전에 브로커가 요구하는 승인 수준을 제어합니다. 권리를 선택함으로써 acks 레벨, 응용 프로그램의 신뢰성을 제어 할 수 있습니다. 아래는이 구성에 대한 허용 값입니다.

  • 0 – 가장 빠르지 만 메시지 전달을 보장하지 않습니다.
  • 1 – 메시지가 리더 브로커에게 기록되면 기본 신뢰성을 제공하면 메시지가 인정됩니다.
  • 에이ll – 메시지는 모든 복제본을 인정 한 경우에만 전달되어 내구성이 높은 것으로 간주됩니다.

작업 부하를 기반으로 구성 조정

성능 병목 현상을 식별하기 위해 메시지 전송 속도, 배치 크기 및 오류율과 같은 메트릭을 추적해야합니다. 기능/데이터 수정 또는 업데이트에 따라 생산자 설정을 정기적으로 확인하고 조정하십시오.

카프카 소비자 모범 사례

소비자 그룹

모든 Kafka 소비자는 소비자 그룹에 속해야합니다. 소비자 그룹에는 하나 이상의 소비자가 포함될 수 있습니다. 그룹에 더 많은 소비자를 만들면 모든 파티션에서 읽을 수 있도록 확장하여 엄청난 양의 데이터를 처리 할 수 ​​있습니다. 그만큼 group.id 구성이 도움이됩니다소비자가 속한 소비자 그룹을 치열하여 동일한 주제에서 소비하는 여러 소비자에 대한로드 밸런싱을 허용합니다. 모범 사례 당신에게 있습니다SE 의미있는 그룹 ID는 응용 프로그램 내에서 소비자 그룹을 쉽게 식별 할 수 있습니다.

오프셋 커밋

응용 프로그램이 오프셋을 오프셋 할 때 제어 할 수있어 데이터 손실을 피할 수 있습니다. 오프셋을 커밋하는 방법에는 자동 및 매뉴얼이 있습니다. 처리량이 많은 응용 프로그램의 경우 더 나은 제어를 위해 수동 커밋을 고려해야합니다.

  • auto.offset.다시 놓기 – 소비자가 헌신적 인 오프셋없이 주제를 소비하기 시작할 때 (예 : 새로운 주제 또는 그룹에 처음으로 가입) 주제를 소비하기 시작하면해야 할 일을 정의합니다. 옵션이 포함됩니다 earliest (처음부터 읽음), latest (끝에서 읽으십시오), 또는 none (오류를 던져). 새 소비자가 그룹에 합류 할 때 누락 된 데이터를 피하려면 대부분의 사용 사례에 대해 “최초”를 선택하십시오. 소비자가 데이터를 소비하기 시작하는 방법을 제어하여 소비자가 그룹에 다시 시작하거나 추가 될 때 적절한 행동을 보장합니다.
  • enable.auto.commit 구성에 도움이됩니다 주기적으로 오프셋을 자동으로 커밋합니다. G에너지로, 우리는 가치를 설정합니다 false 높은 신뢰성이 필요하지 않고 응용 프로그램 논리 내에서 수동으로 오프셋을 커밋하여 정확한 처리 시나리오의 경우 정확한 처리 시나리오. 오프셋 커밋을 관리하기위한 제어를 제공하여 데이터 처리를 더 많이 제어 할 수 있습니다.
  • auto.commit.interval.ms 오프셋이 자동으로 커밋되는 밀리 초의 NTERVAL enable.auto.commit 설정되었습니다 true. 수정하다 예상치 못한 실패로 인한 데이터 손실을 피하기 위해 응용 프로그램의 처리 시간을 기준으로합니다.

페치 크기 및 최대 설문 조사 기록

이 구성은 각 요청에서 검색된 레코드 수를 제어하는 ​​데 도움이됩니다. fetch.min.bytes 그리고 max.poll.records. 이 값을 높이면 응용 프로그램의 처리량을 향상시키는 동시에 CPU 사용량을 줄이고 중개인에 대한 통화 수를 줄일 수 있습니다.

  • fetch.min.bytes – 그들을단일 설문 조사 요청에서 브로커로부터 가져 오기 위해 바이트 수는 내부입니다. 불필요한 네트워크 통화를 피하기 위해 작은 가치를 설정하지만 과도한 폴링을 피하기에는 너무 작지는 않습니다. 최적화에 도움이됩니다 작고 빈번한 요청을 방지하여 네트워크 효율성.
  • fetch.max.bytes 최대 값 단일 폴링 요청에서 브로커에서 가져올 바이트 수. 가용 메모리에 따라 조정하여 소비자 근로자의 과부하를 중지하십시오. 이것은 감소합니다 메모리 문제를 피하면서 단일 설문 조사에서 검색된 데이터의 양.
  • max.poll.interval.ms – 시점이 시작되기 전에 설문 조사 요청이 데이터를 반환 할 때까지 기다리는 최대 시간. 데이터를 사용할 수없는 경우 소비자 교수형/지연을 피하기 위해 좋은 시간 초과를 설정하십시오. 그것은 예방에 도움이됩니다 소비자는 너무 오랫동안 메시지를 기다리는 것을 막는 것입니다. (때로는 Livendes 프로브에 영향을 미치면 K8S 포드가 다시 시작될 수 있습니다).

파티션 할당

이것은 파티션을 할당하는 데 사용되는 전략입니다 (partition.assignment.strategy) 그룹 내 소비자에게 (예 : range,,, roundrobin). 사용 range 대부분의 시나리오에서는 소비자에 파티션을 고르게 배포합니다. 이것은 가능합니다 그룹의 소비자들 사이의 균형화 된 부하 분포.

Kafka를 사용하기 전에 몇 가지 중요한 고려 사항은 다음과 같습니다.

  • 복잡성. Kafka를 구현하려면 고급 기능 및 구성으로 인해 분할 및 오프셋 관리와 같은 분산 시스템 개념에 대한 더 깊은 이해가 필요합니다.
  • 모니터링 및 관리. 고 가용성과 성능을 보장하려면 모니터링 및 Kafka 클러스터 관리를 구현하는 것이 중요합니다.
  • 보안. Kafka 주제를 통해 흐르는 민감한 데이터를 보호하기 위해 강력한 보안 관행을 구현하는 것도 중요합니다.

이러한 모범 사례를 구현하면 Kafka 기반 애플리케이션을 확장하여 수백만/수십억의 이벤트를 처리하는 데 도움이됩니다. 그러나 최적의 구성은 응용 프로그램의 특정 요구 사항에 따라 다를 수 있음을 기억하는 것이 중요합니다.

출처 참조

Post Comment

당신은 놓쳤을 수도 있습니다