이 글의 코드 및 정보들은 책을 바탕으로 작성하였습니다.
프로듀서 주요 옵션
bootstrap.servers
-
카프카 클러스터는
-
클러스터 마스터라는 개념이 없기 때문에
-
클러스터 내 모든 서버가
-
클라이언트의 요청을 받을 수 있다.
-
bootstrap.servers 옵션은
-
카프카 클러스터에 처음 연결을 하기 위한
-
호스트 와 포트 정보 로 구성된 리스트 정보를 나타낸다.
-
정의된 포맷은 다음과 같다.
-
호스트 이름:포트, 호스트 이름:포트, 호스트 이름:포트
주의 사항
-
전체 카프카 리스트가 아닌
-
호스트 하나만 입력해 사용할 수 있지만
-
추천하지 않는다.
-
카프카 클러스터는 살아있는 상태지만
-
입력한 하나의 호스트에
-
장애가 발생할 경우 접속이 불가하기 때문이다.
-
만약 리스트 전체를 입력하였다면
-
주어진 리스트의 서버 중 하나가 장애가 발생하더라도
-
클라이언트는 자동으로
-
다른 서버로 재접속을 시도하기 때문에
-
사용자 프로그램에서는 문제 없이 사용이 가능해진다.
acks
-
프로듀서가 카프카 토픽의 리더에게 메시지를 전송한 후
-
요청을 완료하였다고 판단하기 위해 사용되는 옵션이다.
-
acks 옵션과 관련해서
-
다음 2가지 글을 반드시 읽어보길 추천한다.
Case 1. acks = 0
-
프로듀서가 서버로부터 어떠한 ack도 기다리지 않겠다는 뜻이다.
-
이 경우 서버가 데이터를 받았는지에 대한 보장도 없고
-
클라이언트는 전송 실패에 대한 결과를 알지 못하기 때문에
-
재요청도 하지 않게 된다.
-
즉 메시지가 손실되었을 가능성도 높다.
-
하지만 서버로부터 ack에 대한 응답을 기다리지 않기 때문에
-
매우 빠르게 메시지를 전송할 수 있으며
-
높은 처리량을 얻을 수 있다.
Case 2. acks = 1
-
리더는 데이터를 기록하지만
-
모든 팔로워에 데이터가 정상적으로 복제되었는지
-
체크하지 않는다.
-
이 경우에도 일부 데이터 손실이 발생할 수 있다.
Case 3. acks = all or acks = -1
-
acks의 값을 all or -1로 설정하면
-
리더는 ISR의 모든 팔로워로부터
-
데이터에 대한 ack를 기다린다.
-
그렇기 때문에 데이터의 정합성이 높아지며
-
데이터 무손실에 대해 가장 강력하게 보장한다.
Acks :: Summary
옵션의 수 : ↑ | 옵션의 수 : ↓ | |
---|---|---|
성능 | ↓ | ↑ |
메시지 손실 가능성 | ↓ | ↑ |
-
옵션 수가 많아지면
-
체크를 많이 해야하니까 성능은 떨어지지만
-
그만큼 체크를 많이 하였기 때문에
-
메시지 손실 가능성 또한 낮아진다.
buffer.memory
-
프로듀서가 카프카 서버로 데이터를 보내기 위해
-
잠시 대기(배치 전송 or Delay 등등)할 수 있는 전체 메모리 바이트이다.
compression.type
-
프로듀서가 데이터를 압축해서 보낼 경우
-
어떤 타입으로 압축할 것인지를 명시하는 옵션
-
ex) none, gzip, snappy, lz4 등등
retries
-
일시적인 오류로 인해
-
전송에 실패한 데이터를 다시 보내는 횟수
batch.size
-
프로듀서는 여러 데이터를 함께 배치로 보낼 수 있다.
-
이러한 동작은 클라이언트 / 서버 양쪽 성능에 있어 도움이 된다.
-
이 옵션으로 배치 크기 바이트(Batch Size Byte) 단위를 정할 수 있다.
-
정의된 크기보다 큰 데이터는 배치를 시도하지 않게 된다.
-
배치를 보내기 전
-
클라이언트 장애가 발생하면
-
배치 내에 있던 메시지는 전달되지 않는다.
-
만약 고가용성이 필요한 메시지의 경우라면
-
배치 사이즈를 주지 않는 것도 방법일 수 있다.
linger.ms
-
배치 형태의 메시지를 보내기 전에
-
추가적인 메시지들을 위해 기다리는 시간을 조정한다.
-
카프카 프로듀서는 지정된 배치 사이즈에 도달하면
-
이 옵션과 관계없이 즉시 메시지를 전송하고
-
배치 사이즈에 도달하지 못한 상황에서
-
linger.ms 제한 시간에 도달할 경우
-
메시지들을 전송한다.
-
0이 기본값(지연 없음)이며
-
0보다 큰 값을 설정하면
-
지연 시간은 조금 발생하지만
-
처리량이 좋아진다.
max.request.size
-
프로듀서가 보낼 수 있는 최대 메시지 바이트이다.
-
기본값은 1MB이다.