kafka producer

yoon__0_0·2024년 7월 4일
0

이어드림 수업

목록 보기
87/103

동작 방식

1) send()함수 호출
2) 전송할 데이터 변환 및 압축 ( Serializer)
3) Record Accumulator

  • Topic > partition 단위로 batch 데이터 저장

4) Thread에 연결된 broker가 소유한 partition 데이터를 가져옴
5) 각 지정된 partition or Broker에 데이터 전송
6) 데이터 받았다고 producer 에게 응답

전송방식

Acks

1) Acks(0)

  • broker의 응답을 기다리지 않고 바로 전송
  • 데이터 유실 가능성 높음
  • 빠르게 전송 가능 (async 방식)
  • At most once

2) Acks(1)

  • 기본값
  • 원본 (Leader)에 잘 저장되면 저장되었다고 응답보냄
  • Follower에 데이터가 복제되었는지 까지는 확인하지 않음
  • At most once

3) Acks(All or -1)

  • 복제본까지 모두 저장되었는지 확인한 이후 응답
  • 중복이 생길 수 있음 (응답시 네트워크 장애가 생기면 또 보내게 됨)
  • 유실은 안됨
  • at least once
  • 가장 많이 사용됨.

전송 실패시 재전송 방식

config설명default Value
retries재전송하는 회수2147483647
Retry.backoff.ms재전송 하기 전 대기시간100(0.1초)
Request.timeout.mssender thread가 데이터 전송 후 응답 기다리는 시간30,000(30초)
Delivery.timeout.ms요청에 대한 응답 대기--
  • 어느 구간에서 성능이 떨어지는지 확인해야함.

Batch 전송과 전송 순서 유지 설정

Batch 전송

  • Linger.ms : 짧게 하는 순간 더 많이 출발

  • Batch.size : 1로 하면 그냥 바로 가버림

  • buffer.memory(accumulator ): 크게 하면 좋음

  • sender thread 갯수 지정 : 여러개면 더 순서 유지가 안될 수 있음.

  • enable.idempotence

    • 동시에 데이터를 전송하다보면 일부 데이터는 에러로 인하여 전송 실패가 발생하여 전송 순서가 바뀔 수 있음.
    • True 옵션을 주면 3번 전송시 장애가 있고 4번을 보내려고 하면 OurOfOrderSequence 에러를 발생시켜버림
profile
신윤재입니다

0개의 댓글