면책 조항 : 저는 Apache Flink 커미터 및 PMC 회원이며 내부가 아닌 Storm의 고급 디자인에만 익숙합니다.
Apache Flink는 통합 스트림 및 일괄 처리를위한 프레임 워크입니다. Flink의 런타임은 파이프 라인 셔플을 포함하는 병렬 작업간에 파이프 라인 데이터 전송으로 인해 기본적으로 두 도메인을 모두 지원합니다. 레코드는 생산 작업에서 수신 작업으로 즉시 배송됩니다 (네트워크 전송을 위해 버퍼에 수집 된 후). 블로킹 데이터 전송을 사용하여 배치 작업을 선택적으로 실행할 수 있습니다.
Apache Spark는 배치 및 스트림 처리도 지원하는 프레임 워크입니다. Flink의 배치 API는 매우 유사 해 보이고 Spark와 유사한 사용 사례를 다루지 만 내부에서는 다릅니다. 스트리밍의 경우 두 시스템 모두 매우 다른 접근 방식 (미니 배치와 스트리밍)을 따르므로 다양한 종류의 응용 프로그램에 적합합니다. Spark와 Flink를 비교하는 것이 유효하고 유용하지만 Spark는 Flink와 가장 유사한 스트림 처리 엔진이 아닙니다.
원래 질문에 따르면 Apache Storm은 배치 기능이없는 데이터 스트림 프로세서입니다. 실제로 Flink의 파이프 라인 엔진은 내부적으로 Storm과 약간 비슷해 보입니다. 즉, Flink의 병렬 작업 인터페이스는 Storm의 볼트와 유사합니다. Storm과 Flink는 공통적으로 파이프 라인 데이터 전송에 의한 낮은 대기 시간 스트림 처리를 목표로합니다. 그러나 Flink는 Storm에 비해 더 높은 수준의 API를 제공합니다. Flink의 DataStream API는 하나 이상의 리더 및 수집기로 볼트 기능을 구현하는 대신 Map, GroupBy, Window 및 Join과 같은 기능을 제공합니다. 이 기능은 Storm을 사용할 때 수동으로 구현해야합니다. 또 다른 차이점은 처리 의미론입니다. Storm은 최소 1 회 처리를 보장하고 Flink는 정확히 1 회 처리를 제공합니다. 이러한 처리 보증을 제공하는 구현은 약간 다릅니다. Storm은 레코드 수준 승인을 사용하지만 Flink는 Chandy-Lamport 알고리즘의 변형을 사용합니다. 간단히 말해서, 데이터 소스는 주기적으로 마커를 데이터 스트림에 주입합니다. 운영자가 이러한 마커를 수신 할 때마다 내부 상태를 체크 포인트합니다. 모든 데이터 싱크가 마커를 수신하면 마커 (및 이전에 처리 된 모든 레코드)가 커밋됩니다. 실패한 경우 모든 소스 운영자는 마지막 커미트 된 마커를보고 처리가 계속 될 때 상태로 재설정됩니다. 이 마커 체크 포인트 방식은 Storm의 레코드 수준 승인보다 더 가볍습니다. 이 데이터 소스는 주기적으로 마커를 데이터 스트림에 주입합니다. 운영자가 이러한 마커를 수신 할 때마다 내부 상태를 체크 포인트합니다. 모든 데이터 싱크가 마커를 수신하면 마커 (및 이전에 처리 된 모든 레코드)가 커밋됩니다. 실패한 경우 모든 소스 운영자는 마지막 커미트 된 마커를보고 처리가 계속 될 때 상태로 재설정됩니다. 이 마커 체크 포인트 방식은 Storm의 레코드 수준 승인보다 더 가볍습니다. 이 데이터 소스는 주기적으로 마커를 데이터 스트림에 주입합니다. 운영자가 이러한 마커를 수신 할 때마다 내부 상태를 체크 포인트합니다. 모든 데이터 싱크가 마커를 수신하면 마커 (및 이전에 처리 된 모든 레코드)가 커밋됩니다. 실패한 경우 모든 소스 운영자는 마지막 커미트 된 마커를보고 처리가 계속 될 때 상태로 재설정됩니다. 이 마커 체크 포인트 방식은 Storm의 레코드 수준 승인보다 더 가볍습니다. 이 모든 소스 운영자는 마지막 커미트 된 마커를보고 처리가 계속 될 때 상태로 재설정됩니다. 이 마커 체크 포인트 방식은 Storm의 레코드 수준 승인보다 더 가볍습니다. 이 모든 소스 운영자는 마지막 커미트 된 마커를보고 처리가 계속 될 때 상태로 재설정됩니다. 이 마커 체크 포인트 방식은 Storm의 레코드 수준 승인보다 더 가볍습니다. 이슬라이드 세트 및 해당 토크 는 내결함성, 검사 점 및 상태 처리를 포함한 Flink의 스트리밍 처리 방식에 대해 설명합니다.
Storm은 또한 Trident라고하는 정확히 한 번 높은 수준의 API를 제공합니다. 그러나 Trident는 미니 배치를 기반으로하므로 Flink보다 Spark와 더 유사합니다.
Flink의 조정 가능한 대기 시간은 Flink가 한 작업에서 다른 작업으로 레코드를 보내는 방식을 나타냅니다. 이전에 Flink는 파이프 라인 데이터 전송을 사용하고 레코드가 생성 되 자마자 전달합니다. 효율성을 위해 이러한 레코드는 버퍼가 가득 차거나 버퍼가 가득 차거나 특정 시간 임계 값이 충족되면 네트워크를 통해 전송됩니다. 이 임계 값은 레코드가 다음 작업으로 전송되지 않고 버퍼에 머무를 최대 시간을 지정하므로 레코드 대기 시간을 제어합니다. 그러나 작업 내 처리 시간 및 네트워크 전송 수에 따라 달라지기 때문에 레코드가 프로그램을 시작하는 데 걸리는 시간에 대해 확실한 보증을 제공하는 데 사용할 수 없습니다.