Cấu hình tài nguyên cho kiến trúc Standalone
Chỉnh sửa flink-conf.yaml
Trong chế độ Standalone, chúng ta cần khai báo rõ ràng số lượng TaskManager và tài nguyên RAM mà chúng có thể sử dụng để tránh xung đột với hệ điều hành Ubuntu 24.04.
Tai sao: Mặc định, Flink có thể khởi động với cấu hình quá thấp hoặc không tối ưu cho máy chủ hiện có, gây ra lỗi OOM (Out Of Memory) hoặc phân bổ tài nguyên kém hiệu quả khi chạy job.
Việc chỉnh sửa file flink-conf.yaml sẽ xác định số lượng slot (thành phần xử lý song song) và giới hạn bộ nhớ cho mỗi TaskManager.
Đường dẫn file cấu hình: /opt/flink/conf/flink-conf.yaml
Nội dung hoàn chỉnh cần thêm vào cuối file (hoặc chỉnh sửa các dòng hiện có):
jobmanager.memory.process.size: 1024m
taskmanager.numberOfTaskSlots: 2
taskmanager.memory.process.size: 2048m
taskmanager.memory.managed.fraction: 0.5
Kết quả mong đợi: Khi khởi động, JobManager sẽ sử dụng 1GB RAM và TaskManager sẽ sử dụng 2GB RAM với 2 slots mỗi instance, cho phép chạy tối đa 2 job song song trên 1 TaskManager.
Verify kết quả: Chạy lệnh cat /opt/flink/conf/flink-conf.yaml | grep -E "(jobmanager|taskmanager)" để xác nhận các giá trị đã được ghi đè chính xác.
Khởi động cụm Flink Standalone
Chạy JobManager và TaskManager
Chúng ta sẽ khởi động cụm Flink bằng script shell có sẵn trong thư mục bin. Trong môi trường Standalone, một máy sẽ đóng vai trò là cả JobManager (quản lý) và TaskManager (thực thi).
Tại sao: Script start-cluster.sh sẽ tự động đọc file cấu hình vừa chỉnh sửa để khởi tạo các tiến trình Java cần thiết cho cả hai thành phần trên cùng một host.
Để đảm bảo không bị lỗi do cổng bị chiếm dụng, hãy chạy lệnh dưới quyền user đã cài đặt Flink (thường là root hoặc user chuyên dụng).
cd /opt/flink/bin
./start-cluster.sh
Kết quả mong đợi: Terminal sẽ hiển thị thông báo "Starting JobManager" và "Starting TaskManager", sau đó dừng lại khi các tiến trình đã chạy nền (daemon).
Verify kết quả: Kiểm tra tiến trình bằng lệnh ps -ef | grep flink. Bạn phải thấy ít nhất 2 tiến trình: một là JobManager và một là TaskManager.
Thêm bước kiểm tra: Truy cập trình duyệt trên máy chủ hoặc máy khách với địa chỉ http://:8081 để thấy trang Web UI của Flink.
Tạo và triển khai Job SQL đầu tiên
Chuẩn bị dữ liệu mẫu và file SQL
Để minh họa luồng xử lý đơn giản, chúng ta sẽ tạo một file text chứa dữ liệu dòng và một file SQL để đọc file đó, chuyển đổi nội dung, và in ra console.
Tại sao: Flink SQL hỗ trợ connector "FileSystem" để đọc file text như một stream, đây là cách tốt nhất để test cú pháp SQL mà không cần Kafka hay Database phức tạp.
Đầu tiên, tạo file dữ liệu mẫu tại đường dẫn /opt/flink/data/input.txt:
mkdir -p /opt/flink/data
echo -e "1, Alice\n2, Bob\n3, Charlie" > /opt/flink/data/input.txt
Kết quả mong đợi: File input.txt được tạo với 3 dòng dữ liệu, mỗi dòng có định dạng "ID, Ten".
Tiếp theo, tạo file kịch bản SQL tại /opt/flink/sql/stream-test.sql:
CREATE TABLE input_table (
id INT,
name STRING
) WITH (
'connector' = 'filesystem',
'path' = '/opt/flink/data/input.txt',
'format' = 'csv'
);
CREATE TABLE console_table (
id INT,
name STRING
) WITH (
'connector' = 'print'
);
INSERT INTO console_table
SELECT id, name
FROM input_table
WHERE id > 1;
Kết quả mong đợi: File SQL được lưu trữ, chứa định nghĩa bảng nguồn (input_table) đọc từ file, bảng đích (console_table) in ra console, và câu lệnh INSERT để lọc dữ liệu (id > 1).
Chạy Job và Giám sát trạng thái
Thực thi Job qua CLI và kiểm tra Web UI
Sau khi có file SQL, chúng ta sẽ sử dụng CLI của Flink để submit job này vào cụm Standalone đang chạy.
Tại sao: Lệnh sql-client.sh cho phép chúng ta chạy các câu lệnh SQL tương tác hoặc từ file script, giúp kiểm tra tính khả thi của logic xử lý ngay lập tức.
Chạy lệnh sau để mở giao diện SQL Client và thực thi file SQL:
cd /opt/flink/bin
./sql-client.sh -f /opt/flink/sql/stream-test.sql
Kết quả mong đợi: CLI sẽ hiển thị thông báo "Job submitted successfully" và in ra kết quả của dòng dữ liệu thỏa mãn điều kiện (Bob và Charlie) trực tiếp trên terminal. Job sẽ chạy xong và thoát (mode batch) vì file input đã hết dữ liệu.
Để kiểm tra trạng thái job đã chạy trên cụm, hãy mở trình duyệt truy cập http://localhost:8081.
Verify kết quả trên Web UI:
- Trang chủ sẽ hiển thị danh sách các Job đã chạy (Job Name: stream-test).
- Click vào Job Name, chọn tab "Job Details" để xem trạng thái là "FINISHED".
- Tại tab "Execution Graph", bạn sẽ thấy pipeline gồm 2 bước: Source (Read file) -> Sink (Print).
Để xem log chi tiết nếu có lỗi, click vào tab "Logs" trong trang chi tiết Job, tìm file log của TaskManager.
Điều hướng series:
Mục lục: Series: Triển khai Database Stream Processing với Apache Flink SQL và Ubuntu 24.04
« Phần 1: Chuẩn bị môi trường Ubuntu 24.04 và cài đặt Java cho Flink
Phần 3: Thiết lập kết nối với PostgreSQL và Kafka trong Flink SQL »