IT박스

Kafka 소비자 오프셋은 어떻게 결정됩니까?

itboxs 2020. 6. 15. 21:59
반응형

Kafka 소비자 오프셋은 어떻게 결정됩니까?


저는 Kafka를 처음 접합니다. 나는 그것에 대해 약간의 실험을했지만 소비자 오프셋과 관련하여 몇 가지 분명하지 않습니다. 지금까지 내가 이해 한 바에 따르면, 소비자가 시작할 때 소비자가 읽을 시작 오프셋은 구성 설정에 따라 결정됩니다 auto.offset.reset(잘못된 경우 수정).

예를 들어 주제에 10 개의 메시지 (오프셋 0 ~ 9)가 있고 소비자가 다운되기 전 (또는 소비자를 죽이기 전에) 5 개를 소비했다고 가정 해보십시오. 그런 다음 해당 소비자 프로세스를 다시 시작한다고 가정하십시오. 내 질문은 :

  1. 이로 auto.offset.reset설정 되면 smallest항상 오프셋 0부터 소비되기 시작합니까?

  2. 가로 auto.offset.reset설정 되면 largest오프셋 5부터 소비되기 시작합니까?

  3. 이런 종류의 시나리오에 관한 행동은 항상 결정적인가?

내 질문에 분명하지 않은 내용이 있으면 언제든지 주저하지 마십시오. 미리 감사드립니다.


설명했던 것보다 조금 더 복잡합니다. auto.offset.reset당신의 소비자 그룹이 유효한 오프셋 최선을 다하고 곳이없는 경우에만에서 설정 차기 (2 개 지원 오프셋 창고는 이제 카프카와 사육사 있습니다). 또한 사용하는 소비자의 종류에 따라 다릅니다.

고급 Java 소비자를 사용하는 경우 다음 시나리오를 상상하십시오.

  1. 소비자 그룹 group1에 5 개의 메시지를 소비하고 사망 한 소비자 가 있습니다. 다음에이 소비자를 시작하면 해당 auto.offset.reset구성을 사용하지 않으며 오프셋 저장소 (위에서 언급 한 Kafka 또는 ZK)에서 저장된 오프셋을 가져 오기 때문에 사망 한 곳에서 계속됩니다.

  2. 설명 된대로 주제에 메시지가 있고 새 소비자 그룹에서 소비자를 시작합니다 group2. 아무 어디에도 저장 상쇄되지 않고 이번에는 auto.offset.reset설정은 주제 (의 처음부터 시작할지 여부를 결정합니다 smallest() 또는 주제의 끝에서 largest)

오프셋 값에 해당 smallest하고 largest구성에 영향을주는 또 다른 사항 은 로그 보존 정책입니다. 보존이 1 시간으로 구성된 주제가 있다고 가정하십시오. 5 개의 메시지를 생성 한 다음 1 시간 후에 5 개의 메시지를 더 게시합니다. largest여전히 앞의 예에서와 동일하게 유지됩니다 오프셋하지만 smallest하나가 될 수 없습니다 0카프카는 이미 수 오프셋이 메시지 때문에 사용할 수있는 가장 작은을 제거하기 때문 5.

위에서 언급 한 모든 것은 관련이 없으며 SimpleConsumer실행할 때마다 auto.offset.reset구성 사용을 시작할 위치를 결정합니다 .


Kafka 0.9 이상부터 Kafka는 새로운 Java 버전 소비자를 사용하고 있으며 auto.offset.reset 매개 변수 이름이 변경되었습니다. 매뉴얼에서 :

Kafka에 초기 오프셋이 없거나 현재 오프셋이 서버에 더 이상 존재하지 않는 경우 수행 할 작업 (예 : 해당 데이터가 삭제 되었기 때문에) :

가장 이른 : 오프셋을 가장 빠른 오프셋으로 자동 재설정

latest : 오프셋을 최신 오프셋으로 자동 재설정

none : 소비자 그룹에 대한 이전 오프셋이 없으면 소비자에게 예외를 던집니다.

다른 것 : 소비자에게 예외를 던지십시오.

허용 된 답변을 확인한 후 이것을 찾기 위해 시간을 보냈으므로 커뮤니티가 게시하는 것이 도움이 될 것이라고 생각했습니다.


또한 offsets.retention.minutes가 더 있습니다. 지난 이후 시간이 커밋 인 경우> offsets.retention.minutes다음 auto.offset.reset도 발 차기

참고 URL : https://stackoverflow.com/questions/32390265/what-determines-kafka-consumer-offset

반응형