티스토리 뷰

기타 프로그래밍

Kafka 주요 옵션

LichKing 2022. 11. 26. 15:36

# producer

property 설명 default
key.serializer key 를 직렬화할때 사용할 클래스.
org.apache.kafka.common.serialization.Serializer 를 구현해야함
 
value.serializer value 를 직렬화할때 사용할 클래스.
org.apache.kafka.common.serialization.Serializer 를 구현해야함
 
bootstrap.servers 연결할 kafka cluster 서버 정보
host:port,host:port 형태로 여러개 전달 가능
""
buffer.memory 프로듀서가 전달할 레코드들을 버퍼링할 수 있는 총 메모리. 프로듀서 애플리케이션에게 할당된 메모리보다 작아야함. 단위는 바이트 33554432
compression.type 레코드 압축형태를 지정함.
none, gzip, snappy, lz4, zstd중 선택.
압축은 전송되는 모든 레코드를 합쳐서 진행되기때문에 배치 전송과 함께 사용할 경우 더 효율적임
none(압축안함)
retries 메세지 전송이 실패했을때 재시도할 횟수
delivery.timeout.ms 에 설정된 시간이 초과하면 재시도 횟수가 남아있어도 재시도하지 않고 실패로 간주함
2147483647
batch.size 레코드를 해당 크기만큼 모아서 일괄 전송할때 사용. 크기를 작게 사용하면 레코드를 자주 전달하고, 너무 크게 설정하면 해당 배치 크기만큼 메모리를 미리 할당하므로 비효율적일 수 있음

배치 사이즈 설정만큼 레코드가 모이지 않으면 linger.ms 에 설정된시간만큼 대기 후 전달함. 참고로 linger.ms 는 기본값이 0 이므로 linger.ms 를 설정하지 않은채 배치 사이즈만 설정하면 배치 전달이활성화되지 않음

단위는 byte
16384
delivery.timeout.ms 메세지 전송의 성공실패를 판단하는 상한값
이 시간내에 응답을 받지 못하면 전송 실패로 간주함

단위는 ms
120000
linger.ms 메세지 일괄 발송까지 대기하는 시간
해당 설정 시간 전에 batch.size 에 설정된 메세지가 모이면 바로 메세지를 발송하지만 batch.size에 설정된 메세지가 모이지 않더라도 해당 설정 시간이 도달하면 메세지를 발송하게 됨

단위는 ms
0
max.request.size 전송가능한 개별 레코드의 최대 크기(압축 전 기준)

batch.size 가 이 설정보다 크게 될 경우 최대 크기의 메세지 여러개가 배치로 전송될 수 있음

단위는 byte
1048576
request.timeout.ms 메세지 발송 후 응답을 기다리는 시간
시간 내에 응답이 오지 않으면 재시도 메커니즘이 동작함

단위는 ms
30000
acks producer 가 발송 완료를 판단하기 위해 받을 응답 값

0: 메세지 발송 후 그 어떤 응답도 기다리지 않고 성공으로 간주함 실패를 확인하지 않으므로 재시도 메커니즘이 작동하지 않음

1: 리더에게만 응답을 받음 리더가메세지를 받은 후 팔로워에게 복제되기 전에 장애가 나게 되면 메세지가 유실 됨

all: 리더와 모든 팔로워들에게도 응답을 받음 복제가 완전히 되어야만 발송 성공으로 간주하기에 가장완벽하지만 대기시간도 가장 길어짐
all
enable.idempotence 해당 설정을 켜면 메세지를 한번만 발송하게 됨

해당설정이 동작하기 위해서
max.in.flight.requests.per.connection 는 5이하여야하고
retries 는 1이상, acks 는 all 이어야 함

해당 설정이 true 일때 위 조건들이 만족되지 않으면 ConfigException 발생
true
max.in.flight.requests.per.connection 메세지 응답을 받지 않은 상태에서전송할 최대 메세지 수
이 속성이 1 이상이고 retries 가 활성화되어 있는 경우 메세지 순서가 변경될 수 있음
5

# consumer

property 설명 default
key.deserializer key 를 역직렬화할때 사용할 클래스.
org.apache.kafka.common.serialization.Deserializer 를 구현해야함
 
value.deserializer value 를 역직렬화할때 사용할 클래스.
org.apache.kafka.common.serialization.Deserializer 를 구현해야함
 
bootstrap.servers 연결할 kafka cluster 서버 정보
host:port,host:port 형태로 여러개 전달 가능
 
fetch.min.bytes 한번 요청에 가져와야할 최소 메세지 크기

단위는 byte
1
group.id consumer 를 식별한 고유 id  
heartbeat.interval.ms consumer 상태를 체크하는 간격
consumer 의 새로운 인스턴스 추가, 삭제를 하는데 사용

일반적으로 session.timeout.ms 값의 1/3 이하로 사용

단위는 ms
3000
max.partition.fetch.bytes 파티션당 가져올 최대 메세지 크기

단위는 byte
1048576
session.timeout.ms consumer 는 broker 에게 주기적으로 하트비트를 보내 상태를 알림이 설정 시간 내에 추가적인 하트비트를 받지 못하면 broker 는 해당consumer 를 제외하게 됨

이 설정은 broker 의 group.min.session.timeout.ms, group.max.session.timeout.ms 설정사이에 있어야 함

단위는 ms
45000
auto.offset.reset consumer 가 처음으로 추가됐거나 다른 이유로 offset 정보가 없을때 동작할 방식

latest: 가장 마지막 offset 으로 설정
earliest: 가장 최신 offset 으로 설정
none: 예외 발생
latest
enable.auto.commit consumer 의 커밋을 자동으로 실행 true
isolation.level read_committed: 커밋된 메세지만 소비

read_uncommitted: 트랜잭션이 진행중인 메세지도 소비
read_uncommitted
partition.assignment.strategy broker 가 consumer 그룹에 파티션을 할당할때 사용할 전략

RangeAssignor: 토픽별 파티션 할당
RoundRobinAssignor: 라운드 로빈 방식으로 파티션 할당
StickyAssignor: 기존 할당을 최대한 유지하면서 할당
CooperativeStickyAssignor: 기존 할당을 최대한 유지하지만 리밸런싱이 일어날 수 있음
RangeAssignor
CooperativeStickyAssignor
request.timeout.ms 요청응답 대기 시간

단위는 ms
30000
auto.commit.interval.ms enable.auto.commit 이 활성화된 경우 그 주기를 설정

단위는 ms
5000

 

댓글
댓글쓰기 폼