0: 프로듀서가 리더 파티션으로 데이터를 전송했을 때, 리더 파티션으로 데이터가 저장되었는지 확인하지 않는다는 뜻, 이 떄느 오프셋 정보도 확인이 불가. 따라서 retries 옵션도 무의미, 1이나 -1로 설정했을 때보다 성능 상의 우위가 있으나, 데이터 유실 위험이 있다.
1: 리더 파티션에만 정상적으로 적재되었는지 확인, 실패시 리더 파티션에 적재 성공할 때까지 retry 수행. 그러나 이는 팔로워 파티션에 적재 되었는지 여부는 체크 안함. 여전히 유실의 위험이 있다.
-1: 리더, 팔로워 파티션에 모두 적재도이었는지 여부를 확인, 가장 느리다. 그럼에도 일부 브로커 장애 발생 상황에서도 안전하게 데이터를 전송하고 저장할 수 있다.
all 옵션 값은 min.insync.replicas 옵션을 바라본다. 저 옵션값만큼만 만족하면 된다. 따라서 min.insync.replicas 옵션값을 2로 설정했을 때부터 acks=all로 설정하는 의미가 있다.
따라서 토픽의 레플리카 수는 3, min.insync.replicas=2, acks=all을 추천함
다수의 파티션에 데이터를 저장할 경우 모든 데이터에 대해 동일한 원자성을 만족시키기 위해 사용된다.
트랜젝션은 파티션의 레코드로 구분, 전체 데이터에 대해서 처리하거나, 그렇지 않도록 한다.
트랜젝션으로 묶인 데이터는 브로커에서 가져갈 때 다르게 동작하도록 설정이 가능
트랜젝션 프로듀서를 사용하기 위해서는 enable.idempotence=true, trasactional.id를 임의의 string, 컨슈머의 isolation.level=read_committed로 설정하면 프로듀서와 컨슈머는 트랜젝션으로 처리 완료된 데이터만 쓰고 읽게 된다.
acks 옵션