2016-10-26 2 views
3

우리는 Kafka와 ZooKeeper와 함께 Storm을 사용하고 있습니다. 우리는 일부 주제를 삭제하고 다른 이름으로 다시 만들어야하는 상황이있었습니다. 우리의 카프카 스파우트는 새로운 주제 이름에서 읽은 것과는 별도로 동일하게 유지되었습니다. 그러나 이제 스파우트는 새로운 주제에서 읽으 려 할 때 이전 주제 파티션의 오프셋을 사용하고 있습니다. 그래서 내 - 주제 - 이름 파티션 0의 꼬리 위치는 500이지만 오프셋은 10000과 같을 것입니다.꼬리 위치에 맞추기 위해 카프카 오프셋을 재설정하는 방법은 무엇입니까?

토픽의 꼬리와 일치하도록 오프셋 위치를 재설정하는 방법이 있습니까?

+0

카프카 오프셋은 사육사의 z 노드에 저장됩니다. 그래서 사육사 cli를 통해 재설정 할 수 있습니다, 그들은/소비자 아래에 있어야합니다. 카프카 메타 데이터 API를 사용하여 읽을 수 있습니다. 필자는 내장 된 오프셋 메커니즘을 실제로 무시하고 HBase에 오프셋을 저장하는 프로젝트에서 작업 해 왔으며 역사적인 오프셋을 이야기하기 위해 다중 버전을 사용합니다. 기본적으로 각 소비자 그룹/주제/파티션 조합에 대한 오프셋 버전을 삭제하여 롤백 할 수있는 오프셋 트랜잭션 기록이 있습니다. – richardstartin

+0

@dsch는 0.9 이전 버전의 카프카에서만 유효합니다. 0.9 오프셋은 카프카 주제'__consumer_offsets'에 저장되어 있기 때문에 –

+0

흥미 롭습니다. Mirrormaker를 통한 오프셋 복제를 개선하려는 변화가 있었습니까? – richardstartin

답변

5

스톰의 KafkaSpout에는 시작 오프셋 정의를위한 API가 제공되지 않으므로 여러 옵션이 있습니다.

  1. 로그의 꼬리에서 소비자에게 원하는 경우 삭제해야 기존 오프셋
    • 당신에 따라 카프카 버전
      • (이전 0.9) 당신은 조금 ZK을 (조작 할 수 있습니다 까다로운 경우)
      • (0.9+) 또는 항목 __consumer_offsets에서 오프셋을 삭제하려고 시도합니다 (까다롭기 때문에 보존하려는 다른 오프셋도 삭제할 수 있음)
    • 에는 오프셋이없는 경우, 당신은 자동으로 귀하의 주둥이를 다시 시작할 수 있습니다 재설정 오프셋 정책 "최신"또는 (내가 추천 할 것입니다) 대안으로 "최대"(당신에 따라 카프카 버전)
  2. , 당신을 을 사용하여 필요한 방식으로 오프셋을 조작하는 작은 클라이언트 응용 프로그램을 작성하고 commit() 오프셋을 사용할 수 있습니다. 이 클라이언트는 KafkaSpout과 동일한 그룹 ID를 사용해야하며 동일한 주제에 가입해야합니다. 또한이 클라이언트 응용 프로그램이 단일 소비자 그룹 구성원을 실행하여 모든 파티션이 할당되도록해야합니다. 이것에 대한
    • , 당신이 중 하나를 로그의 끝으로 추구하고
    • 커밋 또는 (-1 등) 오프셋 잘못된 커밋 및 자동에 의존 오프셋 다시 구성 "최신"또는 "최대"(따라 당신의 카프카 버전) 카프카 스트림

는 헌신적 인 오프셋을 조작 할 수있는 유사한 일을 "응용 프로그램이 재설정 도구"가있다. 당신은 몇 가지 세부 사항을 얻고 싶은 경우에, 당신은이 블로그 게시물을 http://www.confluent.io/blog/data-reprocessing-with-kafka-streams-resetting-a-streams-application/

읽을 수 있습니다 : -

(면책 조항을 나는 게시물의 저자와는 카프카 스트림에 관한 그럼에도 불구하고, 기본 오프셋 조작 아이디어는 동일)
관련 문제