Học Nền Tảng Apache Flink

Video tham khảo: https://www.bilibili.com/video/BV1qy4y1q728?p=14&spm_id_from=333.33.header_right.history_list.click

Nguồn tài liệu gốc: https://ashiamd.github.io/docsify-notes/#/study/BigData/Flink/%E5%B0%9A%E7%A1%85%E8%B0%B7Flink%E5%85%A5%E9%97%A8%E5%88%B0%E5%AE%9E%E6%88%98-%E5%AD%A6%E4%B9%A0%E7%AC%94%E8%AE%B0?id=_11-flink-vs-spark-streaming

Apache Flink là gì? Tại sao cần sử dụng? Sự khác biệt với Spark-streaming?

Kiến trúc Flink

Ứng dụng thực tế: Theo dõi hiệu quả quảng cáo cho nhà quảng cáo, hệ thống gợi ý sản phẩm hot trên thương mại điện tử và đề xuất sản phẩm dựa trên hồ sơ người dùng.

Triển khai ở chế độ Standalone

Qu trình gửi Job từ client: Có hai phương thức, gửi qua web UI và gửi từ client.

Gửi qua Web UI:

Sau khi khởi động Flink, có thể gửi gói jar (đã được biên dịch và package từ IDEA) qua Submit New Job trên Web UI, sau đó chỉ định tham số Job.

  • Lớp Entry

Điểm vào của chương trình, chỉ định tên lớp đầy đủ

  • Tham số Program

Tham số khởi động chương trình, ví dụ --host localhost --port 7777

  • Song song (Parallelism)

Đặt mức độ song song cho Job.

Lưu ý: Thứ tự ưu tiên mức độ song song (từ trên xuống dưới giảm dần)

  • Trong code: setParallelism() của toán tử
  • ExecutionEnvironment env.setMaxParallelism()
  • Mức độ song song được đặt thủ công trên UI khi gửi job
  • Cấu hình trong file conf của cluster: parallelism.default

Lưu ý: Các thao tác IO đặc biệt như socket không thể xử lý song song, mức độ song song chỉ có thể là 1

  • Đường dẫn Savepoint

Savepoint là bản nhất quán được tạo cho streaming job qua cơ chế checkpoint, ví dụ offset của nguồn dữ liệu, trạng thái, etc.

(savepoint có thể hiểu là sao lưu thủ công, trong khi checkpoint là sao lưu tự động)

Lưu ý: Khi gửi job, cần kiểm tra tổng số slot có đủ sử dụng không. Nếu không đủ, job sẽ thực thi thất bại. (Nguồn lực không đủ để lập lịch)

Ở đây gửi demo project StreamWordCount, nhập chuỗi ký tự vào socket local tức nc -lk 7777, xem kết quả trong taskmanagers-->stdout

Đầu vào:

hello world, and thank you!

Đầu ra:

Có thể thấy thứ tự đầu ra không giống hoàn toàn với chuỗi đầu vào, vì được xử lý bởi nhiều luồng song song.

1> (world,,1)
2> (and,1)
1> (thank,1)
2> (you!,1)
2> (hello,1)

3.1.2 Gửi job qua dòng lệnh

  1. Xem tất cả các job đã gửi
$ bin/flink list      
Đang chờ phản hồi...
------------------ Jobs Đang Chạy/Khởi Động Lại -------------------
30.01.2021 17:09:45 : 30d9dda946a170484d55e41358973942 : Flink Streaming Job (RUNNING)
--------------------------------------------------------------
Không có job được lên lịch.
  1. Gửi job
  • -c chỉ định lớp entry
  • -p chỉ định mức độ song song của job

bin/flink run -c <lớp entry> -p <mức độ song song> <đường dẫn jar> <tham số khởi động>

$ bin/flink run -c wc.StreamWordCount -p 3 /tmp/Flink_Tutorial-1.0-SNAPSHOT.jar --host localhost --port 7777
Job đã được gửi với JobID 33a5d1f00688a362837830f0b85fd75e
  1. Hủy job

bin/flink cancel <ID Job>

$ bin/flink cancel 30d9dda946a170484d55e41358973942
Đang hủy job 30d9dda946a170484d55e41358973942.
Đã hủy job 30d9dda946a170484d55e41358973942.

Lưu ý: Tổng số Task Slots chỉ cần không nhỏ hơn giá trị Parallelism lớn nhất trong Job là đủ.

Ví dụ: Tại đây file cấu hình đặt taskmanager.numberOfTaskSlots: 4, khi Job thực tế chạy tổng Tasks hiển thị là 9, nhưng các bước cụ thể 4 nhiệm vụ lần lượt cần (1, 3, 3, 2) Tasks, 4>3, đáp ứng được Parallelism lớn nhất nên chạy thành công.

Thẻ: Apache Flink Xử lý luồng Dữ liệu lớn Hệ thống phân tán

Đăng vào ngày 24 tháng 5 lúc 15:03