Gidhub BE Developer

Kafka Producer Option

2019-12-14
goodGid

이 글의 코드 및 정보들은 을 바탕으로 작성하였습니다.

프로듀서 주요 옵션

bootstrap.servers

  • 카프카 클러스터는

  • 클러스터 마스터라는 개념이 없기 때문에

  • 클러스터 내 모든 서버가

  • 클라이언트의 요청을 받을 수 있다.


  • bootstrap.servers 옵션은

  • 카프카 클러스터에 처음 연결을 하기 위한

  • 호스트포트 정보 로 구성된 리스트 정보를 나타낸다.


  • 정의된 포맷은 다음과 같다.

  • 호스트 이름:포트, 호스트 이름:포트, 호스트 이름:포트


주의 사항

  • 전체 카프카 리스트가 아닌

  • 호스트 하나만 입력해 사용할 수 있지만

  • 추천하지 않는다.


  • 카프카 클러스터는 살아있는 상태지만

  • 입력한 하나의 호스트에

  • 장애가 발생할 경우 접속이 불가하기 때문이다.


  • 만약 리스트 전체를 입력하였다면

  • 주어진 리스트의 서버 중 하나가 장애가 발생하더라도

  • 클라이언트는 자동으로

  • 다른 서버로 재접속을 시도하기 때문에

  • 사용자 프로그램에서는 문제 없이 사용이 가능해진다.


acks


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이다.


Reference


Comments

Index