2015-07-09 39 views
5

Tôi đang cố gắng triển khai Kiến trúc Lambda bằng các công cụ sau: Apache Kafka để nhận tất cả các điểm dữ liệu, Spark cho xử lý hàng loạt (Big Data), Spark Streaming cho thời gian thực (Fast Data) và Cassandra để lưu trữ kết quả.Cấu trúc Lambda với Apache Spark

Ngoài ra, tất cả các datapoints tôi nhận được có liên quan đến phiên người dùng, và do đó, đối với việc xử lý hàng loạt, tôi chỉ quan tâm xử lý các điểm dữ liệu sau khi phiên kết thúc. Vì vậy, vì tôi đang sử dụng Kafka, cách duy nhất để giải quyết vấn đề này (giả sử rằng tất cả các điểm dữ liệu được lưu trữ trong cùng một chủ đề) là cho lô tải tất cả các thư trong chủ đề và sau đó bỏ qua các thông báo tương ứng với các phiên chưa hoàn thành.

Vì vậy, những gì tôi muốn hỏi là:

  • Đây có phải là một cách tiếp cận tốt để thực hiện các kiến ​​trúc Lambda? Hoặc nên sử dụng Haddop và Storm thay thế? (Tôi không thể tìm thấy thông tin về những người sử dụng Kafka và Apache Spark để xử lý theo lô, Bản đồ Giảm)
  • Có cách nào tốt hơn để giải quyết vấn đề phiên người dùng không?

Cảm ơn.

Trả lời

4

Đây là một cách tiếp cận tốt. Sử dụng Spark cho cả hai lớp tốc độ cho phép bạn viết logic một lần và sử dụng nó trong cả hai ngữ cảnh.

Về vấn đề phiên, vì bạn đang làm điều đó trong chế độ hàng loạt, tại sao không chỉ nhập dữ liệu từ Kafka vào HDFS hoặc Cassandra và sau đó viết truy vấn cho phiên đầy đủ ở đó? Bạn có thể sử dụng "kết nối trực tiếp" của Spark Streaming cho Kafka để làm điều này.

0

Tôi hiện đang làm việc trên cùng một triển khai. Tôi sử dụng Kafka, HBase, Spark và Spark Streaming.

Có rất nhiều điều cần cân nhắc khi sử dụng các công nghệ này và có thể không có câu trả lời đơn giản nào.

Điểm chính để phát trực tuyến Spark là bạn nhận được độ trễ tối thiểu 100 ms cho dữ liệu luồng cũng như một điểm nhấn lớn khác cho tôi, sự lộn xộn của thứ tự dữ liệu do công việc phát trực tuyến tiêu thụ. Điều đó với sự kết hợp của các stragglers tiềm năng dẫn đến một sự thiếu tự tin hoàn toàn rằng tôi đang xử lý dữ liệu theo thứ tự ít nhất một phần (theo kiến ​​thức của tôi, ít nhất). Bão được cho là giải quyết những vấn đề này, nhưng tôi không thể đảm bảo nó vì tôi đã không sử dụng nó.

Về mặt lô, Spark chắc chắn tốt hơn MapReduce vì nó nhanh hơn và linh hoạt hơn.

Sau đó, phát hành sự cố đồng bộ hóa giữa Lô và Tốc độ về mặt dữ liệu của công việc theo lô dừng tốc độ tiếp tục. Tôi giải quyết vấn đề đó bằng cách có lớp tốc độ của tôi cũng là lớp đưa dữ liệu vào HBase trước khi thực hiện xử lý nó trên đó.

Đây chỉ là một loạt các điểm ngẫu nhiên, tôi hy vọng một số người trong số họ giúp đỡ.

0

Tôi sẽ nhắc lại lưu ý của Dean Wampler rằng đây là một cách tiếp cận tốt, đặc biệt nếu bạn không có yêu cầu cụ thể để tránh xa Spark như công cụ lựa chọn cho cả hai lớp Tốc độ và Tốc độ.Để thêm:

Bạn không phải sử dụng lại tất cả dữ liệu cho một phiên từ một chủ đề trước khi bạn có thể xử lý dữ liệu đó giả sử những gì bạn đang làm với nó (giảm của bạn) là một hoạt động liên kết . Ngay cả khi nó không phải là kết hợp (như Người dùng duy nhất), bạn vẫn có thể được OK với một ước tính chính xác cao có thể được tính toán lặp lại như Nhật ký nhật ký siêu. Bạn có thể sẽ sử dụng một số loại tập hợp Stateful. Trong Spark bạn có thể làm điều đó bằng cách sử dụng updateStateByKey, hoặc tốt hơn là, các hàm mapWithState.

Nếu bạn đang tìm kiếm những ví dụ cụ thể về đặc biệt là công nghệ và các trường hợp sử dụng bạn đề cập đến, tôi sẽ chỉ cho bạn đến Pluralsight nhiên nơi bạn có thể tìm hiểu tất cả về nó và thực hành nó Applying the Lambda Architecture with Spark, Kafka, and Cassandra

tôi cũng sẽ lưu ý rằng nếu những gì bạn đang làm là khá thẳng về phía trước, và bởi vì bạn đã sử dụng Kafka, bạn có thể muốn xem xét Kafka Connect cho sự kiên trì HDFS và luồng Kafka để phát trực tiếp. Bạn thậm chí có thể sử dụng Kafka Streams để truyền dữ liệu ngay về Kafka và sử dụng Kafka Connect để đưa nó ra nhiều điểm đến như Cassandra và ElasticSearch. Tôi đề cập đến luồng Kafka bởi vì nó cũng mang khả năng giữ một số trạng thái trong bộ nhớ và thực hiện các hoạt động truyền trực tuyến đơn giản.

Chúc may mắn!

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