4

StreamScope와 같은 일부 시스템에서는 함수가 결정적이어야하며 (처리되는 순서와 마찬가지로) 함수가 스트림에있을 때 각 메시지의 시퀀스 번호가 있기 때문입니다. 실패의 경우,이 시퀀스 번호는 이벤트가 다시 계산되어야하는지 (스트림에 의해 지속 되었기 때문에) 재전송 노드가 동일한 이벤트를 두 번 계산하지 않도록 결정하는 데 사용됩니다.스트림 처리의 비 결정적 함수

Flink, Spark Streaming, Kafka-Streams 및 Storm도 기능이 결정적이어야합니까?

답변

3

예 아니요. 의존적입니다.)

프레임 워크는 결정적인 기능을 제공하지 않습니다.

오류가 발생하면 입력 데이터의 일부가 다시 계산됩니다. 중간 결과는 무시됩니다. 따라서 결정적이지 않은 함수를 사용하면 새로 생성 된 중간 결과가 이전 결과와 다를 수 있습니다 (실패 전). 그러나 이것을 신경 쓰지 않는다면 비 결정론을 사용하는 것이 좋습니다.

또한 사용중인 의미에 따라 다릅니다.

FLINK/스톰 (트라이던트)/스파크 (정확히 한 번만 처리) :

  • FLINK는 특정 소스에 exaclty-번 offeres 및 이에 대한
  • 싱크, 일부 출력을 삭제하고 재 계산됩니다 오류 발생
    • 예를 들어 Flink는 파일을자를 수 있습니다. 따라서, 당신은
  • 스파크/스톰 마이크로 배치가 자동으로 비 최선을 다하고 출력을 읽을 다운 스트림 소비자를 방지 (... 또는 당신이 걱정하지 않을 수 있습니다) 나중에 반전받을 수 있는지에없는 소비자의 출력을 할 수 있습니다 자동으로 (좀 싱크를 들어, FLINK가 동일하지 생각)

FLINK/스톰/카프카 - 스트림 (AT-최소 한 번 처리) :

  • 당신의-최소 한 번을 실행하는 경우 실패의 경우 처리 의미론, 당신은 출력에 몇 가지 중복을 얻을 것이다. 따라서 비 결정적 함수를 사용하는 경우 해당 "중복"은 실제로 다른 값을 가질 수 있습니다 (비 결정 성 때문에).
관련 문제