

Khi lượng dữ liệu từ giao dịch, ứng dụng, thiết bị IoT hay hệ thống giám sát liên tục tăng, doanh nghiệp không chỉ cần lưu trữ mà còn phải xử lý dữ liệu ngay khi chúng phát sinh. Apache Flink là một trong những công nghệ được phát triển cho nhóm bài toán này. Vậy Apache Flink là gì? Hãy cùng tìm hiểu trong bài viết dưới đây.
Apache Flink là nền tảng xử lý phân tán mã nguồn mở chuyên sâu cho dòng dữ liệu thời gian thực (stream processing), mang lại độ trễ cực thấp (chỉ vài mili-giây) cùng thông lượng xử lý cao.
Khác với mô hình gom lô (batch processing) truyền thống, triết lý cốt lõi của Flink coi mọi dữ liệu đều là một luồng (stream):
Thế mạnh vượt trội của Flink nằm ở cơ chế Native Streaming (Event-driven): xử lý từng sự kiện ngay khi phát sinh thay vì phải tích lũy thành từng khối (micro-batch) rồi mới phân tích.
Ví dụ thực tế: Với hệ thống tài chính xử lý hàng nghìn giao dịch mỗi giây, Flink có thể phân tích luồng dữ liệu tức thì để phát hiện gian lận và kích hoạt cảnh báo chỉ trong tích tắc.

Trong mô hình xử lý batch truyền thống, dữ liệu thường được thu thập trong một khoảng thời gian, sau đó mới đưa vào hệ thống phân tích.
Chẳng hạn:
Cách tiếp cận này phù hợp với nhiều workload nhưng có thể không đáp ứng các tình huống cần phản ứng nhanh.
Trong thực tế, ngày càng nhiều hệ thống cần xử lý:
Trong những trường hợp đó, dữ liệu cần được phân tích ngay khi được tạo ra. Apache Flink hướng đến mô hình continuous stream processing, trong đó dữ liệu đi qua hệ thống liên tục và kết quả cũng liên tục được cập nhật.
Một Flink application về cơ bản tiếp nhận dữ liệu từ một hoặc nhiều nguồn, thực hiện các phép biến đổi và sau đó gửi kết quả tới hệ thống đích.
Có thể hình dung quá trình gồm ba thành phần chính:
Source → Processing/Transformation → SinkSource là nơi Flink lấy dữ liệu đầu vào.
Dữ liệu có thể đến từ:
Ví dụ, Kafka có thể tiếp nhận hàng triệu event từ nhiều ứng dụng khác nhau, sau đó Flink đọc các event từ Kafka để phân tích.
Sau khi nhận dữ liệu, Flink thực hiện các thao tác xử lý như:
Ví dụ, với dữ liệu giao dịch, Flink có thể liên tục tính tổng số tiền mà một tài khoản đã giao dịch trong 10 phút gần nhất.
Sau khi xử lý, kết quả có thể được ghi vào:
Nhờ đó, Flink có thể trở thành một thành phần xử lý trung gian trong các kiến trúc dữ liệu thời gian thực.

Apache Flink là một hệ thống phân tán. Runtime của Flink chủ yếu bao gồm JobManager và một hoặc nhiều TaskManager.
JobManager chịu trách nhiệm điều phối việc thực thi Flink application.
Một số nhiệm vụ quan trọng gồm:
Có thể hiểu JobManager tương tự bộ phận điều phối trung tâm của Flink cluster.
TaskManager là các worker trực tiếp thực hiện công việc xử lý dữ liệu.
Các TaskManager:
Một Flink cluster có thể có nhiều TaskManager để phân phối workload trên nhiều tài nguyên tính toán.
Client chuẩn bị application, tạo dataflow rồi gửi job tới JobManager.
Client không phải thành phần trực tiếp thực thi workload sau khi job được triển khai. Sau khi gửi job, nó có thể ngắt kết nối hoặc tiếp tục nhận thông tin trạng thái tùy chế độ vận hành.
Sức mạnh của Flink không chỉ đến từ khả năng đọc dữ liệu liên tục mà còn nằm ở cách framework quản lý trạng thái, thời gian và lỗi của ứng dụng streaming.
Stateful processing là một trong những khả năng quan trọng nhất của Flink. State có thể hiểu là thông tin mà ứng dụng cần ghi nhớ từ các event đã xử lý trước đó.
Giả sử hệ thống cần phát hiện một tài khoản thực hiện hơn 20 giao dịch trong 5 phút.
Ứng dụng phải nhớ:
Đây chính là một bài toán stateful.
Flink cung cấp cơ chế quản lý state để ứng dụng có thể duy trì lượng trạng thái lớn trong quá trình xử lý dữ liệu.
Trong hệ thống phân tán, thời điểm dữ liệu đến hệ thống xử lý không phải lúc nào cũng giống thời điểm sự kiện thực sự xảy ra.
Ví dụ:
Một thiết bị IoT tạo event lúc 10:00:00 nhưng do mạng chậm, Flink chỉ nhận được dữ liệu lúc 10:00:05.
Nếu chỉ dựa vào thời điểm xử lý, kết quả phân tích có thể không phản ánh chính xác thứ tự thực tế của các event.
Khả năng xử lý theo event time giúp Flink phù hợp với những workload phụ thuộc nhiều vào trình tự và thời gian xảy ra dữ liệu.
Các ứng dụng streaming có thể chạy liên tục trong nhiều ngày, tháng hoặc lâu hơn. Vì vậy, khả năng phục hồi khi máy chủ hoặc tiến trình gặp sự cố rất quan trọng.
Flink sử dụng checkpoint để lưu lại trạng thái và vị trí tương ứng trong luồng dữ liệu. Khi xảy ra lỗi, ứng dụng có thể phục hồi dựa trên checkpoint thay vì phải bắt đầu lại toàn bộ quá trình.
Savepoint cũng là một snapshot của trạng thái ứng dụng nhưng hướng nhiều hơn đến mục đích vận hành.
Savepoint có thể được sử dụng khi cần:
Apache Flink mô tả savepoint là ảnh nhất quán của execution state và có thể dùng để stop-and-resume, fork hoặc update Flink job.
Đối với những workload như thanh toán hoặc tài chính, việc một event bị mất hoặc được tính hai lần có thể tạo ra kết quả sai.
Flink hỗ trợ cơ chế đảm bảo tính nhất quán của state theo mô hình exactly-once trong những cấu hình phù hợp.
Tuy nhiên, cần phân biệt giữa exactly-once của state bên trong Flink và exactly-once end-to-end. Để đạt được đảm bảo end-to-end, source, sink và cách tích hợp hệ thống bên ngoài cũng phải hỗ trợ cơ chế tương ứng.
Flink không chỉ xử lý streaming.
Framework xem dữ liệu theo hai dạng chính:
Nhờ đó, cùng một nền tảng có thể xử lý cả dữ liệu hữu hạn lẫn dữ liệu liên tục.

Apache Flink liệt kê ba nhóm ứng dụng nổi bật gồm event-driven applications, data analytics applications và data pipeline applications.
Flink có thể liên tục phân tích event ngay khi chúng xuất hiện.
Ứng dụng điển hình gồm:
Thay vì phải chạy lại toàn bộ query mỗi khi có dữ liệu mới, kết quả có thể được cập nhật liên tục.
Trong tài chính và thương mại điện tử, hệ thống có thể cần phát hiện những hành vi như:
Khả năng duy trì state kết hợp xử lý event liên tục khiến Flink phù hợp với dạng bài toán này.
Flink có thể được đặt giữa các hệ thống để:
Khác với ETL truyền thống chạy định kỳ, data pipeline streaming có thể liên tục xử lý dữ liệu mới và chuyển chúng tới đích với độ trễ thấp.
Thiết bị IoT có thể liên tục tạo:
Flink có thể xử lý các stream này để phát hiện sự cố, tổng hợp dữ liệu hoặc kích hoạt hành động gần thời gian thực.
Hàng nghìn máy chủ, container và ứng dụng có thể tạo lượng log rất lớn.
Thay vì lưu toàn bộ rồi mới phân tích, Flink có thể xử lý log ngay trên pipeline để:
Ưu điểm | Hạn chế |
| Phù hợp với stream processing | Kiến trúc tương đối phức tạp với người mới |
| Stateful processing mạnh | Cần hiểu distributed system |
| Hỗ trợ event-time processing | Quản lý state lớn cần thiết kế cẩn thận |
| Có cơ chế checkpoint và fault tolerance | Tuning checkpoint và tài nguyên có thể phức tạp |
| Hỗ trợ bounded và unbounded data | Có thể không cần thiết cho workload nhỏ |
| Có thể mở rộng trên cluster | Vận hành production cần năng lực DevOps/Data Engineering |
| Tích hợp nhiều hệ thống dữ liệu | Cần giám sát tài nguyên và độ trễ liên tục |
Flink phù hợp nhất khi doanh nghiệp thực sự có nhu cầu xử lý luồng dữ liệu liên tục. Với những job nhỏ chạy vài lần mỗi ngày, việc xây dựng cả Flink cluster có thể khiến kiến trúc trở nên phức tạp không cần thiết.
Flink và Kafka thường xuất hiện cùng nhau nên dễ bị hiểu là hai công nghệ cạnh tranh trực tiếp.
Thực tế, vai trò chính của chúng khác nhau.
Tiêu chí | Apache Flink | Apache Kafka |
| Vai trò nổi bật | Distributed data processing engine | Distributed event streaming platform |
| Stateful stream processing | Là năng lực cốt lõi | Có thể thực hiện thông qua Kafka Streams |
| Lưu trữ event | Không phải vai trò chính | Có |
| Event-time processing | Có | Kafka Streams cũng hỗ trợ |
| Complex streaming computation | Rất phù hợp | Có khả năng xử lý nhưng kiến trúc khác |
| Mối quan hệ phổ biến | Đọc và xử lý event | Lưu trữ, truyền và cung cấp event |
Apache Kafka là một event streaming platform có khả năng publish, subscribe, lưu trữ và xử lý event. Kafka cũng cung cấp Kafka Streams để xây dựng ứng dụng stream processing.
Apache Spark và Apache Flink đều có thể xử lý dữ liệu phân tán, bao gồm cả batch và streaming. Tuy nhiên, trọng tâm và mô hình sử dụng có những điểm khác biệt.
Tiêu chí | Apache Flink | Apache Spark |
| Định hướng nổi bật | Stream processing | Nền tảng xử lý và analytics dữ liệu rộng |
| Batch processing | Có | Mạnh |
| Stream processing | Là thế mạnh cốt lõi | Structured Streaming |
| Stateful stream | Mạnh | Có |
| Event-time | Có | Có |
| SQL | Flink SQL | Spark SQL |
| ML/Data analytics ecosystem | Có thể tích hợp | Hệ sinh thái rộng |
| Workload phù hợp | Event processing, realtime pipeline | ETL, analytics, ML, batch và streaming |
Trong kiến trúc dữ liệu thực tế, Flink hiếm khi hoạt động độc lập.
Nó thường được kết hợp với:
Flink cũng hỗ trợ triển khai trên Kubernetes, YARN hoặc standalone cluster.
Apache Flink đáng cân nhắc khi hệ thống có một hoặc nhiều yêu cầu sau:
Ngược lại, nếu chỉ cần chạy một vài batch job nhỏ mỗi ngày hoặc lượng dữ liệu không lớn, một hệ thống đơn giản hơn có thể đáp ứng nhu cầu với chi phí vận hành thấp hơn.
Việc lựa chọn Flink vì vậy nên dựa trên bài toán thực tế thay vì chỉ dựa vào khả năng xử lý realtime của công nghệ.
Có. Apache Flink là một dự án mã nguồn mở thuộc Apache Software Foundation. Người dùng có thể tải về, triển khai và phát triển ứng dụng dựa trên Flink.
Không. Flink là một framework và distributed processing engine, không phải hệ quản trị cơ sở dữ liệu.
Flink thường đọc dữ liệu từ các hệ thống khác, xử lý rồi ghi kết quả sang database, object storage, Kafka hoặc những hệ thống đích khác.
Không hoàn toàn.
Kafka tập trung vào nền tảng event streaming với khả năng truyền và lưu trữ event bền vững, đồng thời có Kafka Streams cho stream processing. Flink là một distributed processing engine có thế mạnh về các phép tính stateful trên data stream.
Hai công nghệ thường được sử dụng cùng nhau.
Có.
Flink có thể xử lý cả bounded và unbounded data streams. Vì vậy framework có thể áp dụng cho cả workload streaming lẫn dữ liệu hữu hạn.
Có. Apache Flink cung cấp PyFlink, cho phép xây dựng các workload batch và streaming bằng Python. PyFlink hiện hỗ trợ Table API và DataStream API.
Có. Flink hỗ trợ nhiều môi trường triển khai, trong đó có Kubernetes, YARN và standalone cluster.
Apache Flink là một framework và distributed processing engine mã nguồn mở mạnh về xử lý dữ liệu streaming có trạng thái. Với khả năng xử lý bounded và unbounded streams, quản lý state, event-time processing, checkpoint và fault tolerance, Flink phù hợp với các hệ thống cần xử lý dữ liệu liên tục ở quy mô lớn.
Đối với các hệ thống Apache Flink cần tài nguyên tính toán linh hoạt, lưu trữ và hạ tầng mạng ổn định, doanh nghiệp có thể triển khai trên nền tảng cloud để dễ dàng mở rộng tài nguyên theo quy mô workload. VNPT Cloud cung cấp các dịch vụ hạ tầng Cloud Server, Kubernetes, lưu trữ và các giải pháp cloud hỗ trợ doanh nghiệp xây dựng nền tảng dữ liệu linh hoạt, an toàn và dễ mở rộng.
