의 승인을 얻는 방법. 어리석은 소리일지도 모르지만, ack가 수신 된 메시지의 시작과 끝 오프셋을 알 수있는 방법이 있습니까?메시지가 소비 또는 처리되면 내가 정확히 카프카에서 승인을받는 방법 카프카
답변
나는 그들이
이kafka.api.OffsetRequest.EarliestTime()가있는 데이터의 시작을 발견 있습니다 .. 읽기 offset로부터 선택할 수있는 다음과 같은 방법을 도입했습니다 지금까지 0.8에서 발견 무엇 kafka.api.OffsetRequest.LatestTime()은 새로운 메시지 만 스트리밍합니다.
예제 코드 아직 https://cwiki.apache.org/confluence/display/KAFKA/0.8.0+SimpleConsumer+Example
카프카 정말이 작업을 수행 할 수 있도록 구성되지 않은 승인 부분에 대해 확실하지. 이유를 이해하려면 디자인 설명서 here을 검토하십시오.
정확히 한 번 확인을 제공하려면 응용 프로그램에 대한 외부 추적 시스템을 만들어야합니다. 여기서는 승인을 명시 적으로 작성하고 트랜잭션 ID를 통해 잠금을 구현하여 상황이 한 번만 처리되도록합니다. 시스템 등의 구현의 계산 비용이 매우 높고, 대규모 트랜잭션 시스템은 비교적 이국적인 하드웨어를 필요로하며 카프카 등의 시스템보다 틀림없이 낮은 확장 성을 가지고 주요 이유 중 하나입니다. 당신은 강한 내구성의 의미를 필요로하지 않는 경우
, 당신은 마지막 메시지를 읽을 때의 거친 추적 할 그룹의 API를 사용할 수 있습니다. 이렇게하면 모든 메시지를 적어도 한 번 읽습니다. 참고 그룹의 API는 당신에게 명시 적으로 응용 프로그램이 실제 처리 보장이 시나리오에서 매우 약한 것을, 로직을 처리하는 자신의 추적 할 수있는 기능을 제공하지 않기 때문에. 멱등 원 (idempotent) 처리에 의존하는 체계는이 환경에서 일반적입니다.
또는, 당신은 (그것을 사용하는 꽤 복잡합니다)이 가난이라는 SimpleConsumer API를 사용할 수있는 당신이 명시 적으로 응용 프로그램 내에서 타임 스탬프를 추적 할 수 있습니다. 이것은 응용 프로그램 큐에서 읽은 데이터의 자신의 처리를 추적 할 수 있기 때문에 기본 카프카 API를 통해 달성 될 수 처리 보장의 가장 높은 수준이다.