1

나는 카프카를 사용하여 카산드라에서 카프카 (Kafka) 주제로 업데이트를 연결하려고 생각하고 있습니다. StreamReactor의 기존 커넥터는 마지막 폴링 이후에 새로운 변경 사항을 추출하기 위해 타임 스탬프 또는 uuidtimestamp를 사용하는 것으로 보입니다. 타임 스탬프의 값은 insert 문에서 now()를 사용하여 삽입됩니다. 커넥터는 마지막으로 수신 된 최대 시간을 저장합니다.cassandra kafka 소스와 궁극적 인 일관성 연결

카산드라는 궁극적으로 일관성이 있으므로 새로운 변경 사항을 얻기 위해 시간 범위를 사용하여 반복 쿼리를 수행 할 때 실제로 어떤 일이 발생하는지 궁금합니다. Cassandra에 삽입 된 행을 놓칠 위험이 없나요? 왜냐하면 "늦게 도착했습니다"라는 이유 때문에 생성 된 노드를 쿼리 할 때> maxTimeFoundSoFar를 생성했기 때문입니까?

답변

1

예 일관성 레벨 1을 읽고 쓰는 데 사용하는 경우 처리를 계속할 때 "커서"앞에 새로운 데이터가있는 경우가 발생할 수 있지만 더 높은 일관성을 사용하더라도 "설정"에 따라 "문제". 기본적으로 잘못 될 수있는 많은 것들이 있습니다.

당신은 오래된 카산드라 공식 NUM_NODES_RESPONDING_TO_READ + NUM_NODES_RESPONDING_TO_WRITE > REPLICATION_FACTOR를 사용하여이 작업을 수행하지의 가능성을 증가시킬 수 있지만 카산드라에서 now()를 사용하고 있기 때문에 당신은 높은 주파수 데이터가있을 경우에도 데이터를 놓칠 수 있도록 노드 시계는 그들 사이의 밀리 세컨드 단위의 오프셋 (offset)가있을 수 있습니다. 나는 사람들이 실제로 라스베가스 파이를 gps 모듈과 함께 사용하여 시계 찌그기를 정말로 빡빡하게 유지하고 있음을 안다.

유스 케이스에 대해 더 많이 제공해야하지만 실제로는 삽입물을 건너 뛸 수있다. "조심"하지는 않지만 100 % 보장이 없다면 새로운 데이터가 들어 와서 정착하기에 충분한 오프셋으로 데이터를 처리해야합니다.

기본적으로 과거의 움직이는 시간 창을 유지 한 다음 마지막으로 말한 것보다 더 새로운 것을 고려하지 않도록 추가해야합니다. 그렇게하면 데이터가 "안정화"되고 있는지 확인할 수 있습니다.

여러 날의 지연으로 인해 발생하는 감각 데이터를 처리 한 사례가있었습니다. 일부 프로젝트에서는 월별 데이터를보고하기 위해 일부 데이터를 무시하기 만 했으므로 이전 데이터를 항상 처리하여보고 데이터베이스에 추가했습니다. 즉 우리는 3 일간의 역사 창을 유지했다.

사용 사례에 따라 다릅니다.

+1

답장을 보내 주셔서 감사합니다. 그래서 나는 내 가정에서 완전히 틀린 것은 아니었다. 카산드라에서 카프카로 데이터를 퍼블리싱하여 다른 소비자에게 "실시간"으로 전달할 생각이었습니다. 내 접근 방식이 이상적이지 않을 수도 있으므로 데이터를 잃고 싶지 않습니다. – KTrum

관련 문제