제퍼넷 로고

Kafka 기초: Kafka 소비자 그룹 소개 및 사용 방법

시간

아파치 카프카란?

이미지 크레딧 : Unsplash

Apache Kafka는 실시간 데이터 입력 및 처리를 위해 설계된 분산 데이터 저장소입니다. 스트리밍 데이터는 일반적으로 동시에 데이터 레코드를 보내는 수백 개의 데이터 원본에 의해 지속적으로 생성되는 데이터입니다. 스트리밍 플랫폼은 끊임없이 유입되는 데이터에 대처할 수 있어야 하며, 이를 순차적이고 점진적으로 처리할 수 있어야 합니다.

사용자는 세 가지 다른 목적으로 Kafka를 사용할 수 있습니다.

레코드 스트림이 게시되고 구독됩니다.
레코드 스트림은 생성된 순서대로 저장해야 합니다.
데이터 스트림의 실시간 처리
Kafka는 데이터 스트림에 적응하는 실시간 스트리밍 데이터 파이프라인 및 애플리케이션을 만드는 데 가장 일반적으로 사용됩니다. 통신, 저장 및 스트림 처리를 혼합하여 기록 및 실시간 데이터 저장 및 분석을 제공합니다.

소비자 그룹

A 카프카 소비자 그룹은 특정 주제에 대한 정보를 소비하기 위해 함께 일하는 사람들의 그룹입니다. 그룹의 소비자는 각 테마에 대한 파티션으로 나뉩니다. 새 구성원이 그룹에 가입하고 이전 구성원이 떠나면 파티션이 재할당되어 각 구성원이 파티션의 비례 몫을 얻습니다. 그룹의 균형을 재조정하는 것을 그룹이라고 합니다.

이전 "고수준" 소비자와 새 소비자의 근본적인 차이점은 전자는 그룹 관리를 위해 ZooKeeper에 의존하는 반면 후자는 Kafka가 구축한 그룹 프로토콜에 의존한다는 것입니다. 브로커 중 한 명이 이 프로토콜에서 그룹의 조정자로 지정되며 그룹 구성원과 파티션 할당 관리를 담당합니다.

각 그룹의 코디네이터는 커밋된 오프셋을 저장하는 내부 오프셋 주제 __consumer offsets의 리더 중에서 선택됩니다. 본질적으로 그룹의 ID는 주제의 파티션 중 하나로 해시되고 해당 파티션의 리더가 조정자로 선택됩니다. 결과적으로 소비자 그룹 관리는 클러스터의 모든 브로커에 균등하게 분산되어 브로커 수가 증가함에 따라 그룹 수도 증가할 수 있습니다.

Kafka 소비자 구성

이미지 크레딧 : unsplash

가장 중요한 몇 가지 구성 설정이 소비자 행동에 미치는 영향과 함께 아래에 설명되어 있습니다.

기본 설정

유일한 필수 설정은 bootstrap.servers이지만 요청을 만든 클라이언트 인스턴스에 쉽게 연결할 수 있도록 client.id도 설정해야 합니다. 클라이언트 할당량을 적용하기 위해 지정된 그룹의 모든 소비자는 일반적으로 동일한 클라이언트 ID를 갖습니다.

그룹 설정

단순 할당 API를 사용 중이고 Kafka에서 오프셋을 유지할 필요가 없다면 항상 group.id를 구성해야 합니다. session.timeout.ms 값을 재정의하여 세션 시간 초과를 조정할 수 있습니다.
session.timeout.ms 값을 재정의하여 세션 시간 초과를 조정할 수 있습니다. C/C++ 및 Java 클라이언트에서 기본 시간 제한은 10초이지만 예를 들어 잘못된 네트워크 연결 또는 긴 GC 일시 중지로 인한 과도한 재조정을 피하기 위해 시간 초과를 연장할 수 있습니다.

더 긴 세션 시간 제한을 채택할 때의 가장 큰 단점은 조정자가 소비자 인스턴스가 실패한 시기를 식별하는 데 더 오래 걸린다는 것입니다. 즉, 그룹의 다른 소비자가 파티션을 가져오는 데 더 오래 걸립니다. 반면에 일반 종료는 소비자가 조정자에게 그룹을 종료하라는 명시적 요청을 보내 즉각적인 재조정을 유발함으로써 트리거됩니다.

max.poll.interval.ms는 과도한 재조정에 영향을 줄 수 있는 또 다른 속성입니다. 이 매개변수는 소비자 프로세스가 실패한 것으로 판단되기 전에 폴 메서드 호출 사이의 최대 시간을 설정합니다. 프로그램에서 메시지를 처리하는 데 기본값인 300초보다 더 많은 시간이 필요한 경우 안전하게 늘릴 수 있습니다.

오프셋 관리

오프셋 재설정 정책과 자동 커밋 활성화 여부는 오프셋 관리에 영향을 미치는 가장 중요한 두 가지 옵션입니다. 먼저 enable.auto.commit이 true(기본값)로 설정된 경우 소비자는 auto.commit.interval.ms에 정의된 간격으로 오프셋을 커밋합니다. 시간 제한은 기본적으로 5초로 설정됩니다.
자동 커밋 오프셋은 기본적으로 소비자에서 활성화됩니다. 자동 커밋을 사용하여 "최소 한 번" 배달을 얻습니다. Kafka는 메시지가 손실되지 않도록 보장하지만 중복이 발생할 수 있습니다. auto.commit.interval.ms 구성 속성은 사용자가 선택한 기간이 있는 cron 역할을 합니다. 소비자가 충돌하면 충돌한 소비자가 보유한 모든 파티션의 위치는 다시 시작 또는 재조정 후에 커밋된 마지막 오프셋으로 재설정됩니다. 이 경우 마지막 커밋 위치는 자동 커밋 간격만큼 오래되었을 수 있습니다. 이전 커밋 이후에 수신된 모든 메시지는 새로 읽어야 합니다.

Kafka 소비자 그룹 명령 도구

이미지 크레딧 : Unsplash

소비자 그룹의 상태는 Kafka 관리 유틸리티를 사용하여 볼 수 있습니다.

알파벳 순서의 그룹

Kafka 배포에 포함된 kafka-consumer-groups 기능을 사용하여 클러스터의 활성 그룹 목록을 얻을 수 있습니다. 각 브로커를 검사하여 목록을 수집하기 때문에 대규모 클러스터에서는 시간이 오래 걸릴 수 있습니다.
bin/kafka-consumer-groups –bootstrap-server 호스트:9092 –list

그룹 설명

kafka-consumer-groups 기능을 사용하여 특정 그룹에 대한 데이터를 수집할 수도 있습니다. 예를 들어, foo 그룹에 대한 현재 할당을 보려면 다음 명령을 실행하십시오.
bin/kafka-consumer-groups –bootstrap-server 호스트:9092 –describe –group foo

결론

위의 설명에서 Kafka 소비자 그룹과 프로세스 전반에 걸쳐 사용되는 방법에 대해 볼 수 있습니다.

출처 : Plato Data Intelligence : PlatoData.io

spot_img

최신 인텔리전스

spot_img

우리와 함께 채팅

안녕하세요! 어떻게 도와 드릴까요?