Apache Flink란 무엇인가요?
Apache Flink는 제한되지 않은(스트림) 데이터 세트와 제한된(배치) 데이터 세트에 대한 상태 저장 처리를 위한 오픈 소스 분산 엔진입니다. 스트림 처리 애플리케이션은 가동 중단 시간을 최소화하면서 지속적으로 실행되고, 수집되는 데이터를 처리하도록 설계되었습니다. Apache Flink는 대기 시간이 짧은 처리, 인 메모리 계산 수행, 고가용성, 단일 장애 지점 제거 및 수평 확장을 위해 설계되었습니다.
Apache Flink의 기능에는 정확하게 한 번만 일관성을 보장하는 고급 상태 관리, 정교한 비정상 및 지연 데이터 처리 기능을 갖춘 이벤트 시간 처리 시맨틱스가 포함됩니다. Apache Flink는 스트리밍 우선으로 개발되었으며 스트림 및 배치 처리를 위한 통합 프로그래밍 인터페이스를 제공합니다.
Apache Fink를 사용하는 이유는 무엇인가요?
Apache Flink는 다양한 기능으로 인해 다양한 유형의 스트리밍 및 배치 애플리케이션을 구축하는 데 사용됩니다.
Apache Flink로 구동되는 일반적인 유형의 애플리케이션은 다음과 같습니다.
- 이벤트 기반 애플리케이션, 하나 이상의 이벤트 스트림에서 이벤트를 수집하고 계산, 상태 업데이트 또는 외부 작업을 실행합니다. 상태 저장 처리를 통해 결과가 수집된 이벤트 기록에 따라 달라지는 단일 메시지 변환 이상의 논리를 구현할 수 있습니다.
- 데이터 분석 애플리케이션, 데이터에서 정보와 인사이트를 추출합니다. 기존에는 유한한 데이터 세트를 쿼리하고 쿼리를 다시 실행하거나 결과를 수정하여 새 데이터를 통합하는 방식으로 실행되었습니다. Apache Flink를 사용하면 지속적인 업데이트, 쿼리 스트리밍 또는 수집된 이벤트를 실시간으로 처리하고 결과를 지속적으로 내보내고 업데이트하여 분석을 실행할 수 있습니다.
- 데이터 파이프라인 애플리케이션, 한 데이터 스토리지에서 다른 데이터 스토리지로 이동할 데이터를 변환하고 강화합니다. 전통적으로 추출-변환-적재(ETL)는 주기적으로 배치로 실행됩니다. Apache Flink를 사용하면 프로세스가 지속적으로 작동하여 짧은 대기 시간으로 데이터를 대상으로 이동할 수 있습니다.
Apache Flink는 어떻게 작동하나요?
Flink는 높은 처리량, 낮은 대기 시간의 스트림 처리 엔진입니다. Flink 애플리케이션은 스트림과 변환으로 구성된 임의의 복잡한 비순환 데이터 흐름 그래프로 구성됩니다. 데이터는 하나 이상의 데이터 소스에서 수집되어 하나 이상의 대상으로 전송됩니다. 소스 및 대상 시스템은 스트림, 메시지 대기열 또는 데이터 스토어일 수 있으며 파일, 널리 사용되는 데이터베이스 및 검색 엔진을 포함합니다. 변환은 기간에 따른 집계 또는 복잡한 패턴 감지와 같이 상태 저장이 될 수 있습니다.
내결함성은 두 가지 별도 메커니즘에 의해 달성됩니다. 애플리케이션 상태의 자동 및 주기적인 체크포인트를 통해 영구 스토리지에 복사되어 오류 발생 시 자동 복구가 가능합니다. 실행 상태의 일관된 이미지를 저장하는 주문형 세이브포인트는 Flink 작업의 중지 및 재개, 업데이트 또는 분기를 허용하고 중지 및 다시 시작 시 애플리케이션 상태를 유지합니다. 체크포인트와 세이브포인트 메커니즘은 비동기식으로, 애플리케이션이 이벤트를 계속 처리하는 동안 "모든 작업을 중지"하지 않고 상태의 일관된 스냅샷을 찍습니다.
Apache Flink의 이점은 무엇인가요?
무제한(스트림) 및 제한된(배치) 데이터 세트를 모두 처리합니다.
Apache Flink는 제한되지 않은 데이터 세트와 제한된 데이터 세트(예: 스트림 및 배치 데이터)를 모두 처리할 수 있습니다. 무제한 스트림은 시작이 있지만 사실상 무한하며 결코 끝나지 않습니다. 처리는 이론적으로 절대 중단될 수 없습니다.
테이블과 마찬가지로 제한된 데이터는 유한하며 유한한 시간 내에 처음부터 끝까지 처리할 수 있습니다.
Apache Flink는 동일한 프로그래밍 인터페이스를 통해 제한된 처리와 무제한 처리를 모두 지원하는 알고리즘과 데이터 구조를 제공합니다. 제한되지 않은 데이터를 처리하는 애플리케이션은 지속적으로 실행됩니다. 제한된 데이터를 처리하는 애플리케이션은 입력 데이터 세트의 끝에 도달하면 실행을 종료합니다.
대규모로 애플리케이션 실행
Apache Flink는 거의 모든 규모에서 상태 저장 애플리케이션을 실행하도록 설계되었습니다. 처리는 수천 개의 작업에 병렬화되고 여러 시스템에 동시에 분산됩니다.
또한 상태가 분할되고 수평으로 분산되므로 여러 시스템에서 몇 테라바이트를 유지할 수 있습니다. 상태는 영구 스토리지에 점진적으로 체크포인트입니다.
인 메모리 성능
애플리케이션과 상태를 통해 흐르는 데이터는 여러 시스템에 걸쳐 분할됩니다. 따라서 종종 메모리 내 로컬 데이터에 액세스하여 계산을 완료할 수 있습니다.
정확히 한 번 상태 일관성
단일 메시지 변환 이상의 애플리케이션은 상태 저장입니다. 비즈니스 로직은 이벤트나 중간 결과를 기억해야 합니다. Apache Flink는 오류가 발생하더라도 애플리케이션이 중지되고 다시 시작되는 경우에도 내부 상태의 일관성을 보장합니다. 내부 상태에 대한 각 메시지의 효과는 애플리케이션이 복구 또는 재시작 시 데이터 소스로부터 중복 항목을 수신할 수 있는지 여부에 관계없이 항상 정확히 한 번만 적용됩니다.
다양한 커넥터
Apache Flink에는 널리 사용되는 메시징 및 스트리밍 시스템, 데이터 저장소, 검색 엔진 및 파일 시스템에 대한 입증된 여러 커넥터가 있습니다. 몇 가지 예로는 Apache Kafka, Amazon Kinesis Data Streams, Amazon SQS, Active MQ, Rabbit MQ, NiFi, OpenSearch 및 ElasticSearch, DynamoDB, HBase 및 JDBC 클라이언트를 제공하는 모든 데이터베이스가 있습니다.
다양한 수준의 추상화
Apache Flink는 프로그래밍 인터페이스에 대한 여러 수준의 추상화를 제공합니다. 더 높은 수준의 스트리밍 SQL 및 Table API에서 테이블, 조인 및 그룹화와 같은 친숙한 추상화를 사용합니다. DataStream API는 낮은 수준의 추상화를 제공하지만 스트림, 창 및 매핑의 의미를 통해 더 많은 제어 기능을 제공합니다. 마지막으로 ProcessFunction API는 각 메시지의 처리를 세밀하게 제어하고 상태를 직접 제어할 수 있습니다. 모든 프로그래밍 인터페이스는 무제한(스트림) 및 제한된(테이블) 날짜 세트 모두에서 원활하게 작동합니다. 각 문제를 해결하는 데 적합한 도구로서 동일한 애플리케이션에서 다양한 수준의 추상화를 사용할 수 있습니다.
다양한 프로그래밍 언어
Apache Flink는 고급 스트리밍 SQL부터 Python, Scala, Java까지 다양한 언어뿐만 아니라 Kotlin과 같은 기타 JVM 언어로 프로그래밍할 수 있습니다.
Apache Flink 사용 사례로는 어떤 것들이 있나요?
Apache Flink 사용 사례는 다음과 같습니다.
-
사기 탐지, 이상 탐지, 규칙 기반 경고, 실시간 UX 개인화는 이벤트 중심 애플리케이션의 사용 사례 예입니다. Flink는 시간에 따른 진화를 고려하고, 복잡한 패턴을 감지하거나, 예상 임계값과의 편차를 감지하기 위해 기간에 따른 통계를 계산하여 상태 저장 방식으로 이벤트 스트림을 처리해야 하는 모든 사용 사례에 완벽하게 적합합니다.
-
품질 모니터링, 라이브 데이터의 임시 분석, 클릭스트림 분석, 제품 실험 평가는 Flink가 효율적으로 지원할 수 있는 스트리밍 분석 사용 사례입니다. SQL 또는 Table API 프로그래밍 인터페이스의 높은 수준의 추상화를 활용하면 스트리밍 라이브 데이터와 기록 데이터 배치 모두에 대해 동일한 분석을 실행할 수 있습니다.
-
파일 시스템 모니터링 및 로그에 데이터 쓰기, 데이터베이스에 대한 이벤트 스트림 구체화, 검색 인덱스 점진적 구축 및 조정 등은 연속 ETL이 효율적으로 지원하는 사용 사례입니다. Flink는 다양한 커넥터 세트를 활용하여 여러 유형의 데이터 저장소에서 직접 읽고, 변경 이벤트 스트림을 수집하고, 변경 사항을 직접 캡처할 수도 있습니다. 변경 사항을 지속적으로 수집 및 처리하고 대상 시스템을 직접 업데이트함으로써 Flink는 데이터 동기화 지연을 몇 초 이하로 줄일 수 있습니다.
Apache Flink는 누가 사용하나요?
NortonLifeLock
NortonLifeLock은 글로벌 사이버 보안 및 인터넷 개인정보 보호 회사로, 수백만 명의 고객에게 가정 및 가족을 위한 디바이스 보안, ID 및 온라인 개인정보 보호 서비스를 제공합니다.
NortonLifeLock은 VPN 제품을 사용자에게 프리미엄 서비스로 제공합니다. 따라서 사용량이 한도를 초과할 때 프리미엄 사용자가 서비스를 사용하지 못하도록 실시간으로 사용 한도를 적용해야 합니다. NortonLifeLock의 과제는 이를 안정적이고 경제적으로 수행하는 것입니다.
NortonLifeLock은 Apache Flink를 채택하여 사용자 및 디바이스 수준 집계 구현을 단순화했습니다.
삼성 SmartThings
삼성의 독립 자회사인 SmartThings는 세계 최고의 IoT 생태계 중 하나로 누구나 스마트 홈을 만들 수 있는 가장 쉬운 방법을 제공합니다.
Samsung SmartThings는 리소스를 개별 애플리케이션에 예약하는 것과 같은 문제에 직면했습니다. 이로 인해 데이터를 처리하는 동안 지연 및 성능 저하가 발생했습니다. 결국 운영 중 워크로드를 유지 관리하는 데 비용이 많이 드는 오버헤드가 발생했습니다. 데이터 플랫폼을 다시 설계해야 했습니다.
따라서 Apache Spark에서 Apache Flink로 전환했습니다.
BT Group
BT Group은 영국의 선도적인 통신 및 네트워크 제공업체이자 글로벌 통신 서비스 및 솔루션을 이끄는 제공업체로서 180개 국가의 고객에게 서비스를 제공합니다. 영국 내 주요 활동으로 융합형 고정 및 모바일 네트워크를 통해 소비자, 비즈니스 및 공공 부문 고객에게 고정 음성, 모바일, 광대역 및 TV(스포츠 포함)와 다양한 제품 및 서비스 제공이 포함됩니다.
BT는 영국 광대역 네트워크를 통해 고화질 음성 통화를 지원하는 새로운 소비자 제품인 Digital Voice의 출시를 지원하기 위해 서비스 모니터링 애플리케이션이 필요했습니다.
BT는 서비스 데이터를 수집, 처리 및 시각화하기 위해 Apache Flink를 사용하여 이벤트 기반 분석 서비스를 구축했습니다.
Autodesk
3D 설계 및 엔지니어링 소프트웨어 분야의 선도 업체인 Autodesk는 소프트웨어 제작 및 공급뿐 아니라. 전 세계 수백만 명의 사용자에게 해당 소프트웨어를 실행하는 최적의 환경도 제공하고자 합니다.
Autodesk는 무언가를 제작하는 사람들을 위한 소프트웨어를 만듭니다. 2억 명 이상의 고객에게 서비스를 제공합니다. 고객 문제를 더 빠르게 찾아 해결하기 위해 사일로를 제거해야 했습니다. 이 업체는 비용을 증가시키거나 데이터 종속을 만들지 않고 소규모 운영 팀과 함께 지표를 수집하고 측정할 수 있는 일관된 방법을 원했습니다.
NHL
National Hockey League는 북미의 4대 프로 팀 스포츠 리그 중 두 번째로 오래된 리그입니다. 오늘날 NHL은 리그의 국제 구성을 반영하는 32개의 회원 클럽으로 구성되어 있으며, 팀 명단에는 20여 개국의 선수들이 포함되어 있습니다.
NHL은 불확실성이 큰 이벤트를 예측하기 위해 필요한 기능 및 모델링 방법을 결정하고, 스트리밍 PPT 센서 데이터를 사용하여 페이스오프가 발생하는 위치, 관련 플레이어 및 각 플레이어가 페이스오프에서 승리할 확률을 수백 밀리초 이내에 식별하는 등 여러 기술적 과제에 직면해 있었습니다.
Apache Flink를 활용하여 NHL은 대결의 승자를 예측할 수 있을 뿐만 아니라, 비슷한 여러 문제를 실시간 및 비용 효율적인 방법으로 해결할 수 있는 기반을 구축할 수 있었습니다.
Poshmark
Poshmark는 여성, 남성, 아동, 애완동물, 가정 등을 위한 새로운 스타일과 중고 스타일을 판매하는 선도적인 소셜 마켓플레이스입니다. 미국, 캐나다, 호주, 인도 전역에 걸쳐 8천만 명이 넘는 사람들로 구성된 커뮤니티는 단순하고 사회적이며 지속 가능한 쇼핑의 미래를 만들어가고 있습니다.
Poshmark는 개인화와 사용자 경험 향상을 통해 매출 성장을 달성하는 데 주력해 왔습니다. 개인화 및 보안을 위해 일괄 처리를 사용하는 초기 접근 방식은 고객 경험 개선에 대한 기대를 충족시키지 못했습니다.
Poshmark는 Apache Flink를 통한 실시간 데이터 강화를 사용하여 실시간 개인화를 설계했습니다.
AWS는 클라우드에서 Apache Flink 애플리케이션을 실행하는 데 어떻게 도움을 줄 수 있을까요?
Amazon Manages Service for Apache Flink는 Apache Flink 애플리케이션을 실행하기 위한 완전관리형 솔루션입니다. Amazon Managed Service for Apache Flink는 Apache Flink 애플리케이션을 빌드 및 관리하고 다른 AWS 서비스와 통합하는 데 따르는 복잡성을 줄여줍니다. Amazon Managed Service for Apache Flink를 사용하면 관리할 서버가 없고 최소 요금이나 설정 비용도 없습니다. 이 설정은 기본적으로 가용성이 높습니다. 애플리케이션 상태는 내결함성을 위해 완벽하게 관리되고 내구성이 뛰어난 백엔드에 저장됩니다. 애플리케이션은 간단한 API로 제어되어 애플리케이션을 중지, 시작, 구성 및 확장합니다.
Amazon Managed Service for Apache Flink Studio는 Apache Flink에 대한 대화형 노트북 인터페이스를 제공합니다. Apache Zeppelin 노트북을 사용하면 개발 및 실험, 데이터 검사 또는 시각화를 위해 Apache Flink에서 SQL, Python 및 Scala 코드를 실행할 수 있습니다.
Amazon EMR은 또한 Apache Flink를 YARN 애플리케이션으로 지원하므로 클러스터 내에서 다른 애플리케이션을 실행하면서 리소스를 관리할 수 있습니다.
Apache Flink는 기본적으로 Kubernetes를 지원합니다. Amazon Elastic Kubernetes Service(Amazon EKS)와 같은 컨테이너화된 환경에서 Apache Flink를 자체 호스팅하거나 Amazon Elastic Compute Cloud(Amazon EC2)를 사용하여 직접 완전히 관리할 수 있습니다.
지금 계정을 생성하여 AWS에서 Apache Flink를 시작하세요.