Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

kafka producer detail #115

Open
yeomko22 opened this issue Sep 19, 2021 · 2 comments
Open

kafka producer detail #115

yeomko22 opened this issue Sep 19, 2021 · 2 comments

Comments

@yeomko22
Copy link
Owner

acks 옵션

  • 0, 1, -1 값을 가질 수 있음
  • 0: 프로듀서가 리더 파티션으로 데이터를 전송했을 때, 리더 파티션으로 데이터가 저장되었는지 확인하지 않는다는 뜻, 이 떄느 오프셋 정보도 확인이 불가. 따라서 retries 옵션도 무의미, 1이나 -1로 설정했을 때보다 성능 상의 우위가 있으나, 데이터 유실 위험이 있다.
  • 1: 리더 파티션에만 정상적으로 적재되었는지 확인, 실패시 리더 파티션에 적재 성공할 때까지 retry 수행. 그러나 이는 팔로워 파티션에 적재 되었는지 여부는 체크 안함. 여전히 유실의 위험이 있다.
  • -1: 리더, 팔로워 파티션에 모두 적재도이었는지 여부를 확인, 가장 느리다. 그럼에도 일부 브로커 장애 발생 상황에서도 안전하게 데이터를 전송하고 저장할 수 있다.
  • all 옵션 값은 min.insync.replicas 옵션을 바라본다. 저 옵션값만큼만 만족하면 된다. 따라서 min.insync.replicas 옵션값을 2로 설정했을 때부터 acks=all로 설정하는 의미가 있다.
  • 따라서 토픽의 레플리카 수는 3, min.insync.replicas=2, acks=all을 추천함
@yeomko22
Copy link
Owner Author

idempotence producer

  • 멱등성: 여러 번 연산을 수행하더라도 동일한 결과를 나타내는 것
  • 멱등성 프로듀서: 동일 데이터를 여러번 전송하더라도 카프카 클러스터에는 한번 만 저장됨을 의미
  • 0.11.0 이후 버전부터는데이터 중복 적재를 막기 위해 enable.idempotence 옵션을 지원
  • 멱등성 프로듀서는 동일 세션에서만 정확히 한 번 전달을 보장, 동일 세션이란 PID 생명주기를 의미
  • 멱등성 프로듀서를 on 할 경우 정확히 한번 적재하는 로직 성립을 위해서 일부 옵션이 강제 설정, retires=Integer.MAX_VALUE, acks=all

@yeomko22
Copy link
Owner Author

trasaction producer

  • 다수의 파티션에 데이터를 저장할 경우 모든 데이터에 대해 동일한 원자성을 만족시키기 위해 사용된다.
  • 트랜젝션은 파티션의 레코드로 구분, 전체 데이터에 대해서 처리하거나, 그렇지 않도록 한다.
  • 트랜젝션으로 묶인 데이터는 브로커에서 가져갈 때 다르게 동작하도록 설정이 가능
  • 트랜젝션 프로듀서를 사용하기 위해서는 enable.idempotence=true, trasactional.id를 임의의 string, 컨슈머의 isolation.level=read_committed로 설정하면 프로듀서와 컨슈머는 트랜젝션으로 처리 완료된 데이터만 쓰고 읽게 된다.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant