기본 콘텐츠로 건너뛰기

카프카 컨슈머 설정

컨슈머 설정은 config/consumer.properties에서

컨슈머 기본세팅


group.id

단일 그룹으로 컨슈머 그룹을 구분하는 문자열값. 같은 ID를 지정하면 동일한 그룹으로 마킹 할 수 있다.

zookeeper.connect

브로커 설정 참고

consumer.id

컨슈머 ID가 지정되지 않으면 자동 생성된다.

스레드와 성능설정


socket.receive.buffer.bytes

네트워크 요청에 대한 받기 버퍼의 크기. 기본 1024000.

fetch.message.max.bytes

요청이 있을 때 마다 토픽의 파티션에서 패치 할 바이트 수. 프로듀서가 설정값 보다 큰 값을 보내는 경우는 메시지를 받을 수 없기 때문에, 프로듀서가 보내는 최대 메시지 만큼 값이 커야 한다. 또한, 컨슈머가 패치한 메시지를 메모리에 유지하기 때문에 사용하는 만큼 메모리 설정도 해야 한다. 이 값은 주의 깊게 설정되어야 하는 값이다. 기본 1024 * 1024

num.consumer.fetchers

카프크에서 데이터를 패치할 때 사용될 스레드 개수. 기본 1

queued.max.message.chunks

소비되기 전에 버퍼될 수 있는 최대 청크수. 청크는 최대 fetch.message.max.bytes 만큼 크기가 될 수 있다. 기본 2

fetch.min.bytes

서버에서 패치될 최소 바이트 수. 요청을 응답하기 전에 더 많은 데이터가 패치 될 때 까지 기다린다.

consumer.timeout.ms

만약 메시지를 소비할 상황이 되지 못한다면 예외를 던지는데, 예외를 던지기전 컨슈머 스레드가 기다릴 시간. 기본 -1


로그 세팅


auto.commit.enable

true 일경우, 컨슈머는 실패할 경우에 복구하기 위해 메시지 오프셋을 저장한다.

rebalance.max.retries

컨슈머 그룹에서 파티션 수가 동일하게 분산된다. 만약 새로운 컨슈머가 조인하면,  파티션 할당을 재조정 한다. 파티션 수를 재조정 하는 동안 그룹에 변경이 생기면, 새 컨슈머에 파티션을 할당하는 작업은 실패하고 재시도 하게 된다. 이 세팅은 컨슈머가 실패하더라도 몇번 재시도 할지 횟수를 정한다. 기본값은 4

rebalance.backoff.ms

재균형 동안(재균형동안 balance가 실패해서) 재시도 하는 시간 주기. 명시적으로 지정되지 않으면 zookeeper.sync.time.ms가 사용된다. 기본값은 2000

refresh.leader.backoff.ms

컨슈머가 리더를 잃어 버렸을 때, 파티션에 대한 새 리더를 찾는 시도를 하기 전에 기다리는 시간 지정. 기본 200

auto.offset.reset

카프카에 초기값이 없거나 또는 현재 오프셋이 더이상 서버에 존재 하지 않는다면 (데이터가 삭제 되거나 해서..)  어떻게 해야 하는가에 대한 설정. 기본값 latest

earliest: 오프셋을 초기값으로 자동 리셋
largest: 오프셋 값을 최대값으로 자동 리셋
none: 컨슈머 그룹에서 이전 오프셋을 찾지 못한다면, 컨슈머에 에러를 던짐
anything else: 컨슈머에 에러를 던짐

partition.assignment.strategy

파티션 할당 전략을 담당하는 클래스 이름. 클라이언트는 그룹으로 관리가 되고 있을때 컨슈머 인스턴스간 파티션 오너쉽을 분산하기 위해 사용한다. 기본 org.apache.kafka.client.consumer.RangeAssignor

 RangeAssignor 가용한 파티션을 숫자 순서로 놓고 컨슈머는 사전순으로 놓는다. 그런 후 각 컨슈머에 할당할 파티션의 숫자를 결정하기 위해 파티션의 숫자를 전체 컨슈머 숫자로 나눈다. 만약 짝수로 나눠지지 않는다면, 첫번째 몇 컨슈머가 여분의 파티션을 가진다.  예를들어, 두개의 컨슈머 C0, C1이 있고, 두개의 토픽 t0, t1이 있다. 그리고 각 토픽은 3개의 파티션을 가진다면, 결과는 t0p0, t0p1, t0p2, t1p0, t1p1, and t1p2 이된다.  할당 결과는 :
C0: [t0p0, t0p1, t1p0, t1p1]
C1: [t0p2, t1p2]

RoundRobinAssignor ...  
C0: [t0p0, t0p2, t1p1]
C1: [t0p1, t1p0, t1p2]

주키퍼 세팅


zookeeper.session.timeout.ms

만약 지정된 시간동안 주키퍼로 부터 컨슈머가 하트빗 메세지를 보내지 않는다면, 죽은 노드로 간주되고 컨슈머 재조정(rebalance)이 생긴다.

zookeeper.connection.timeout.ms

클라이언트가 주키퍼에 커넥션을 맺을 때 기다릴 시간.



댓글