2015-06-07 50 views
83

Flink là compared to Spark, như tôi thấy, là so sánh sai bởi vì nó so sánh hệ thống xử lý sự kiện có cửa sổ chống vi phân; Tương tự, nó không có ý nghĩa gì với tôi khi so sánh Flink với Samza. Trong cả hai trường hợp, nó so sánh chiến lược xử lý sự kiện theo thời gian thực so với chiến lược xử lý sự kiện theo đợt, ngay cả khi ở quy mô nhỏ hơn trong trường hợp của Samza. Nhưng tôi muốn biết Flink so sánh với Storm như thế nào, dường như khái niệm này gần giống với nó hơn.Sự khác nhau chính giữa Flink và Storm là gì?

Tôi đã tìm thấy this (Trang trình bày số 4) ghi lại sự khác biệt chính là "độ trễ có thể điều chỉnh" cho Flink. Một gợi ý khác có vẻ là một bài báo của Slicon Angle gợi ý rằng Flink tích hợp tốt hơn vào thế giới Spark hoặc HadoopMR, nhưng không có chi tiết thực tế nào được đề cập hoặc tham chiếu. Cuối cùng, Fabian Hueske tự ghi chú in an interview rằng "So với Apache Storm, chức năng phân tích luồng của Flink cung cấp API cấp cao và sử dụng chiến lược khoan dung lượng lỗi nhẹ hơn để cung cấp đảm bảo xử lý chính xác một lần".

Tất cả điều đó hơi thưa thớt đối với tôi và tôi không hoàn toàn hiểu điểm. Ai đó có thể giải thích vấn đề (s?) Với xử lý luồng trong Storm là (được?) Được giải quyết chính xác bởi Flink? Hueske đề cập đến vấn đề gì về API và "chiến lược chống chịu lỗi trọng lượng nhẹ" của họ?

+0

Lưu ý rằng Apache * Spark * (trọng tâm của câu hỏi được liên kết) không giống với Apache * Storm * (câu hỏi này) - vì vậy, không, điều này không có nghĩa là trùng lặp. – fnl

Trả lời

122

Tuyên bố từ chối trách nhiệm: Tôi là người khởi xướng Flink Apache và thành viên PMC và chỉ quen thuộc với thiết kế cấp cao của Storm chứ không phải nội bộ của Storm.

Apache Flink là một khuôn khổ cho quy trình xử lý luồng và hợp nhất. Flink của thời gian chạy natively hỗ trợ cả hai tên miền do truyền dữ liệu pipelined giữa các nhiệm vụ song song bao gồm shuffles pipelined. Hồ sơ được chuyển ngay lập tức từ các nhiệm vụ sản xuất để nhận nhiệm vụ (sau khi được thu thập một bộ đệm để chuyển mạng). Công việc hàng loạt có thể được thực thi tùy chọn bằng cách sử dụng truyền dữ liệu chặn.

Apache Spark là một khuôn khổ cũng hỗ trợ xử lý hàng loạt và luồng. API hàng loạt của Flink trông khá giống nhau và đề cập đến các trường hợp sử dụng tương tự như Spark nhưng khác nhau ở bên trong. Để phát trực tuyến, cả hai hệ thống đều tuân theo các cách tiếp cận rất khác nhau (các lô nhỏ so với phát trực tuyến), điều này giúp chúng phù hợp với các loại ứng dụng khác nhau. Tôi có thể nói so sánh Spark và Flink là hợp lệ và hữu ích, tuy nhiên Spark không phải là công cụ xử lý luồng tương tự nhất cho Flink.

Đến với câu hỏi ban đầu, Apache Storm là bộ xử lý luồng dữ liệu không có khả năng theo lô. Trong thực tế, động cơ pipelined của Flink trông hơi giống Storm, tức là các giao diện của các tác vụ song song của Flink tương tự như các bu lông của Storm. Storm và Flink có điểm chung là chúng nhằm mục đích xử lý luồng trễ thấp bằng cách truyền dữ liệu pipelined. Tuy nhiên, Flink cung cấp API cấp cao hơn so với Storm. Thay vì thực hiện chức năng của một bu lông với một hoặc nhiều người đọc và người thu thập, API DataStream của Flink cung cấp các chức năng như Bản đồ, GroupBy, Cửa sổ và Tham gia. Rất nhiều chức năng này phải được thực hiện thủ công khi sử dụng Storm. Một khác biệt khác là xử lý ngữ nghĩa. Storm đảm bảo xử lý ít nhất một lần trong khi Flink cung cấp chính xác một lần. Các triển khai cung cấp cho các đảm bảo xử lý khác nhau khá một chút. Trong khi Storm sử dụng các xác nhận mức kỷ lục, Flink sử dụng một biến thể của thuật toán Chandy-Lamport. Tóm lại, các nguồn dữ liệu định kỳ tiêm các dấu mốc vào luồng dữ liệu. Bất cứ khi nào một nhà điều hành nhận được một điểm đánh dấu như vậy, nó sẽ kiểm tra trạng thái bên trong của nó. Khi một điểm đánh dấu được nhận bởi tất cả các bồn chứa dữ liệu, điểm đánh dấu (và tất cả các bản ghi đã được xử lý trước đó) được cam kết. Trong trường hợp thất bại, tất cả các nhà khai thác nguồn sẽ được đặt lại về trạng thái của họ khi họ thấy điểm đánh dấu đã cam kết cuối cùng và quá trình xử lý được tiếp tục. Cách tiếp cận điểm đánh dấu này là nhẹ hơn sự thừa nhận mức kỷ lục của Storm. Điều này slide set và tương ứng talk thảo luận về phương pháp xử lý luồng của Flink bao gồm khả năng chịu lỗi, kiểm tra điểm và xử lý trạng thái.

Bão cũng cung cấp API chính xác một lần, được gọi là Trident. Tuy nhiên, Trident được dựa trên các lô nhỏ và do đó tương tự như Spark hơn Flink.

Độ trễ có thể điều chỉnh của Flink đề cập đến cách Flink gửi bản ghi từ một tác vụ sang tác vụ khác. Tôi đã nói trước đó, Flink sử dụng truyền dữ liệu pipelined và chuyển tiếp các bản ghi ngay khi chúng được tạo ra. Để có hiệu quả, các bản ghi này được thu thập trong bộ đệm được gửi qua mạng khi đã đầy hoặc một ngưỡng thời gian nhất định được đáp ứng. Ngưỡng này kiểm soát độ trễ của các bản ghi vì nó chỉ định khoảng thời gian tối đa mà một bản ghi sẽ ở trong bộ đệm mà không được gửi đến tác vụ tiếp theo. Tuy nhiên, nó không thể được sử dụng để bảo đảm chắc chắn về thời gian cần thiết cho một bản ghi từ khi rời khỏi chương trình vì điều này cũng phụ thuộc vào thời gian xử lý trong các nhiệm vụ và số lượng chuyển mạng trong số những thứ khác.

+1

Cảm ơn bạn rất nhiều! Một điểm mở có thể, nếu tôi có thể làm phiền bạn một lần nữa: vấn đề "độ trễ có thể điều chỉnh" này là gì? Điều này có vẻ như nó có thể khá liên quan cho rằng các miền ứng dụng khác nhau sẽ có các yêu cầu khác nhau về mặt này. Bạn có thể giải thích điều này ngụ ý, ít nhất là về Flink? – fnl

+4

Chắc chắn, tôi đã mở rộng câu trả lời của mình và thảo luận về độ trễ có thể điều chỉnh. Hãy cho tôi biết nếu bạn có thêm câu hỏi. –

30

Thêm vào câu trả lời của Fabian Hueske:

Flink cải thiện về bão bổ sung cũng theo những cách sau:

  • Backpressure: runtime trực tuyến Flink giếng được cư xử khi các nhà khai thác khác nhau chạy ở tốc độ khác nhau, bởi vì các nhà khai thác hạ lưu áp dụng các toán tử ngược dòng rất tốt mặc dù các tầng đệm của tầng mạng quản lý.

  • Trạng thái do người dùng xác định: Flink cho phép các chương trình duy trì trạng thái tùy chỉnh trong các toán tử của bạn. Trạng thái đó thực sự có thể tham gia vào các điểm kiểm tra cho khả năng chịu lỗi, cung cấp bảo đảm chính xác một lần cho trạng thái do người dùng định nghĩa tùy chỉnh. Xem this example của máy trạng thái do người dùng xác định bên trong một toán tử, được kiểm tra liên tục cùng với luồng dữ liệu.

  • Phát trực tuyến Windows: Cửa sổ dòng và tổng hợp cửa sổ là khối xây dựng quan trọng để phân tích luồng dữ liệu. Flink đi kèm với một hệ thống cửa sổ khá mạnh mẽ hỗ trợ nhiều loại cửa sổ.

+0

Về điểm đầu tiên của bạn, Storm hoạt động tốt dưới áp suất ngược 1.0 (phát hành tháng 4 năm 2016) –

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