카프카 프로듀서 옵션

600g (Kim Dong Geun)·2021년 7월 14일
0

카프카 프로듀서

Acks 옵션

카프카 프로듀서의 acks 옵션 0,1,-1(all) 로 나눌 수 있음

ack 옵션설명
0프로 듀서가 리더 파티션으로 데이터를 전달했을 때 데이터가 전송됐는지 확인하지 않음.
프로듀서는 데이터 전송이 실패 했을 때 재시도 할 수 있는 retires 옵션을 설정할 수 있는데, 0일 경우는 재전송하지 않음
대신 그만큼 속도가 빠르다
1프로듀서가 데이터 전송 확인을 리더 파티션에 한해 받겠다는 것
다만 리더 파티션에 적재되더라도 데이터가 유실될 수 있음
리더파티션과 팔로워 파티션과의 데이터 복제 시간차가 발생할 수도 있기 때문
All or -1리더 파티션과 팔로워 파티션이 모두 정상 적재 됐는지 확인
당연히 속도가 느리다, 그러나 모든 리더 팔로워 파티션을 확인하는 것은 아님
min.insync.replicas 값에 따라 확인하는 것
  • 일반적으로 브로커가 동시에 유실되는 경우가 매우 적기 때문에 ISR 중 하나만 확인해도 거의 데이터의 안전성을 보장

멱등성 프로듀서

멱등성

여러 번 연산을 수행하더라도 동일한 결과를 내는 것

멱등성 프로듀서는 동일한 데이터를 여러번 전송하더라도 카프카 클러스터에 단 한번만 저장됨을 의미

기본 프로듀서의 동작방식은 적어도 한 번(At least one delivery)를 지원

적어도 한번 전달은 데이터의 중복적재가 발생할 수 있다. -> 대신 데이터의 적재는 보장

정확히 한번 전달(exactly once delivery) 를 지원

enable.idempotence 옵션을 true로 사용, 다만 동일 PID에서만 exactly once delivery가 작동

따라서 PID가 달라지면 정확히 한 번 전달을 보장할 수 없음

트랜잭션 프로듀서

트랜잭션 프로듀서는 다수의 파티션에 데이터를 전달할 경우 모든 데이터에 대해 동일한 원자성 을 만족시키기 위해 사용

다수의 데이터를 동일 트랜잭션으로 묶음으로써 전체를 처리하거나 처리하지 않거나를 결정하기 위해 존재

트랜잭션 프로듀서를 사용하려면 enable.idempotence를 true로 설정하고, transaction.id를 임의의 string으로 설정함으로써 사용가능

컨슈머의 isonlation.level 을 설정하면 read.comitted 를 설정하면 프로듀서와 컨슈머는 트랜잭션으로 처리완료된 데이터만 쓰고 읽게됨

트랜잭션은 파티션 레코드 구분

profile
수동적인 과신과 행운이 아닌, 능동적인 노력과 치열함

0개의 댓글