카프카 프로듀서의 acks 옵션 0
,1
,-1(all)
로 나눌 수 있음
ack 옵션 | 설명 |
---|---|
0 | 프로 듀서가 리더 파티션으로 데이터를 전달했을 때 데이터가 전송됐는지 확인하지 않음. 프로듀서는 데이터 전송이 실패 했을 때 재시도 할 수 있는 retires 옵션을 설정할 수 있는데, 0일 경우는 재전송하지 않음 대신 그만큼 속도가 빠르다 |
1 | 프로듀서가 데이터 전송 확인을 리더 파티션에 한해 받겠다는 것 다만 리더 파티션에 적재되더라도 데이터가 유실될 수 있음 리더파티션과 팔로워 파티션과의 데이터 복제 시간차가 발생할 수도 있기 때문 |
All or -1 | 리더 파티션과 팔로워 파티션이 모두 정상 적재 됐는지 확인 당연히 속도가 느리다, 그러나 모든 리더 팔로워 파티션을 확인하는 것은 아님 min.insync.replicas 값에 따라 확인하는 것 |
여러 번 연산을 수행하더라도 동일한 결과를 내는 것
멱등성 프로듀서는 동일한 데이터를 여러번 전송하더라도 카프카 클러스터에 단 한번만 저장됨을 의미
기본 프로듀서의 동작방식은 적어도 한 번(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
를 설정하면 프로듀서와 컨슈머는 트랜잭션으로 처리완료된 데이터만 쓰고 읽게됨
트랜잭션은 파티션 레코드 구분