2017-04-16 6 views
1

2 개의 JobManagers와 3 개의 TaskManagers로 Flink 1.2 독립 실행 형 클러스터를 설정했고 JMeter를 사용하여 처리 된 Kafka 메시지/이벤트를 생성하여 JMeter를로드 테스트했습니다. 처리 작업은 TaskManager에서 실행되며 대개 15K 이벤트/초가 소요됩니다.
작업이 EXACTLY_ONCE 검사 점을 설정했으며 상태 및 검사 점을 Amazon S3에 지속합니다. 작업을 실행하는 TaskManager를 종료하면 조금 걸리고 몇 초 후에 다른 TaskManager에서 작업이 다시 시작됩니다. 작업은 주로 연속 정수 (예 : 0에서 1200000까지) 인 이벤트 ID를 기록합니다.
마지막 작업을 종료 한 TaskManager의 출력을 확인하면 예를 들어 500000입니다. 그러면 다른 TaskManager에서 다시 시작한 작업의 출력을 확인할 때 ~ 400000으로 시작합니다. 이는 ~ 100,000 개의 중복 이벤트를 의미합니다. 이 숫자는 테스트의 속도에 따라 달라질 수 있습니다.
뭔가 빠졌는지 확실하지 않지만 다른 TaskManager에서 다시 시작한 후 작업에 다음 연속 번호 (예 : 500001)가 표시 될 것으로 예상됩니다.
왜 이런 일이 발생했는지/추가 설정은 정확히 한 번 구성해야합니까?정확히 한 번만 메시지 처리 Flickink

답변

7

정확히 한 번만 예상되는 동작이 표시됩니다. Flink는 실패의 경우 검사 점과 재생의 조합을 통해 내결함성을 구현합니다. 보장은 각 이벤트가 파이프 라인으로 정확히 한 번 전송되는 것이 아니라 각 이벤트가 파이프 라인의 상태에 정확히 한 번 영향을 미치게된다는 것입니다.

검사 점 지정은 전체 클러스터에서 일관된 스냅 샷을 만듭니다. 복구 중에 운영자 상태가 복원되고 소스가 최신 검사 점에서 재생됩니다.

자세한 내용은이 데이터 장인 High-throughput, low-latency, and exactly-once stream processing with Apache Flink™ 또는 the Flink docs을 참조하십시오.