2017-01-13 1 views
0

대용량 스트림을 제거하기 위해 hbase을 사용하고 있습니다. 스트림 키의 각 메시지에서 고유 한 식별자를 사용하여 행 키로 사용하는 것이 효과적이라고 생각했습니다. 그러나 최종 사용자는 내가 만든 출력 스트림에서 중복 데이터를 계속보고 있습니다. 유일하게 가능한 원인은 중복 메시지가 동시에 소비된다는 것입니다.대용량 데이터가있는 hbase에 대해 중복 제거

나는 스트림에서 별도의 프로세스로 채워지는 동일한 큐를 소비하는 약 50 개의 스레드가 있습니다. 이것이 발생하지 않도록하는 방법이나 적절한 탈락을 수행하는 더 좋은 방법이 있습니까? 이 과정에는 새 레코드를 삽입하기 전에 GET을 수행해야합니다.

답변

0

몇 가지 문제가 있습니다. 50 개의 스레드로 스트림을 읽으면 HBase에 항목이 없도록하는 방법이 없습니다. 2 개의 스레드가 동일한 ID로 중복 된 메시지를 읽고, HBase를 확인하고, 항목이 누락되었다고 판단하고, 메시지를 더 전달할 가능성이 있습니다.

동시 환경에서 중복 검사는 일종의 뮤텍스에서만 작동하며 성능은 복제 빈도, 메시지 소비 속도 및 기타 요인에 따라 다릅니다.

단일 스레드 소비자로 시작하고 성능에 만족하지 않는 경우에만 동시 솔루션을 사용해보십시오. 단일 스레드의 경우 중복 제거를 위해 해시 테이블을 사용할 수 있습니다. 시간이 지남에 따라 커질 것이므로 비즈니스 로직에 따라 적절한 시간 내에 만료되는 캐시를 사용해야합니다.