2015-11-24 48 views

Trả lời

5

Nếu Flink thực hiện chương trình lặp lại, biểu đồ dữ liệu không phải là DAG nhưng cho phép chu kỳ. Tuy nhiên, chu trình này không tùy ý và phải tuân theo một mẫu nhất định để cho phép Flink kiểm soát luồng tuần hoàn này để mở rộng.

Thường không có lý do kỹ thuật nghiêm ngặt trong các hệ thống khác không hỗ trợ chu kỳ. Việc cho phép các chu trình theo cách tổng quát thường bị cấm bởi vì nó có thể dẫn đến một vòng lặp vô hạn (tức là, một tuple quay vòng chu kỳ mãi mãi và chương trình không hạn chế).

Flink theo dõi chu trình bằng cách đếm số lần lặp lại. Bằng cách này, Flink có thể theo dõi bộ dữ liệu nào thuộc về sự lặp lại nào và ví dụ có thể tránh các bộ dữ liệu đó từ các bộ dữ liệu "tiếp nhận" lặp mới từ cũ hơn một lần. Hơn nữa, nó cho phép Flink phát hiện nếu kết quả của việc lặp lại nn+1 bằng nhau hay không. Một kết quả bằng nhau cho thấy một phép tính đã hoàn thành cho phép Flink phá vỡ vòng lặp vô hạn và kết thúc (điều này giữ cho các lần lặp lại được gọi là sửa lỗi).

Đối với một cái nhìn chi tiết đọc tại bài nghiên cứu này: https://dl.acm.org/citation.cfm?id=2350245

Việc sử dụng lặp đi lặp lại trong chương trình của bạn được mô tả ở đây: https://ci.apache.org/projects/flink/flink-docs-release-0.10/apis/programming_guide.html#iteration-operators

+1

Về mặt kỹ thuật, Flink không gán một quầy lặp cho mỗi tuple. Thay vào đó, nó thực thi mỗi lần lặp và sau đó đợi cho đến khi tất cả các phần tử đã được xử lý cho lần lặp này. Chỉ khi đó, lần lặp tiếp theo được khởi động. –

+1

Đã cập nhật câu trả lời của tôi. Downvote là khá khó khăn ... :) –

Các vấn đề liên quan