2013-05-16 24 views
5

Trong cấu trúc liên kết Storm của tôi, trong khi xử lý luồng, tôi muốn trì hoãn việc xử lý một số tin nhắn cho đến một số thời điểm trong tương lai. Một số lựa chọn hợp lý để thực hiện điều này là gì?Hàng đợi bị trì hoãn/xử lý tin nhắn trong Storm

Cho đến nay, tôi đã nghĩ về những điều sau đây:

  • Sử dụng Java Thread.sleep. (Tuy nhiên, dựa trên một số thảo luận, đây không phải là một cách khuyến khích sử dụng có hiệu quả nguồn lực của Storm.)
  • Sử dụng một hàng đợi bị trì hoãn ...
  • Storm có một số API để trì hoãn thư mà tôi đã bỏ qua không?
  • ZeroMQ có cung cấp API nhắn tin bị trì hoãn mà Storm (nếu được sửa đổi) có thể tận dụng được không?
+0

bạn có thể cho biết một số lý do tại sao bạn muốn làm điều này? nếu bạn chưa sẵn sàng để xử lý công cụ này, tại sao bạn lại chuyển nó tới cấu trúc liên kết bão của bạn để bắt đầu? –

+2

Phản hồi đầu tiên của tôi: Tại sao hỏi tại sao? Điều quan trọng là phải hiểu hoặc trả lời câu hỏi? Có rất nhiều lý do tại sao trì hoãn (hoặc đổi lịch) một tuple là hữu ích. Xử lý tuple của tôi không phải là tất cả về biến đổi hoàn toàn chức năng của dữ liệu. Trong trường hợp của tôi, xử lý một tuple liên quan đến việc nắm bắt trạng thái của một cái gì đó bên ngoài hệ thống và tích hợp với các luồng khác. Vì nó thay đổi theo thời gian, tôi muốn nắm bắt trạng thái đó trong khoảng thời gian được kiểm soát. Một yêu cầu như vậy không phải là để tiêu thụ một tài nguyên bên ngoài quá thường xuyên. –

Trả lời

2

Sử dụng hàng đợi tin nhắn bên ngoài để triển khai hàng đợi thời gian trễ.

Kể từ Storm là fault-tolerant và phân phối theo chiều ngang, nó sẽ làm cho tinh thần để chọn một hàng đợi thông điệp phù hợp với phong cách đó, chẳng hạn như:

  • Kafka
  • Amazon SQS
  • RabbitMQ
5

Chúng tôi đang sử dụng các bộ đánh dấu tô pô để xử lý hàng loạt các bộ đang chờ xử lý. Về cơ bản, nó chỉ lưu trữ chúng trong bộ nhớ trên mỗi bộ bình thường và khi nó nhận được một tuple đánh dấu nó xử lý chúng thành lưu trữ/lập chỉ mục bằng cách sử dụng xử lý hàng loạt/pipelined. Chúng tôi cũng sử dụng redis trong trường hợp chúng tôi tăng đột biến về khối lượng, nếu khối lượng tăng đột biến phát hiện tất cả các bộ chuyển hướng đến bộ nhớ redis cục bộ trên mỗi máy chủ và sau đó được đẩy trở lại xử lý cấu trúc liên kết sau khi giảm âm lượng. Tình huống của chúng tôi có thể không áp dụng cho bạn, chỉ là 2c của tôi.

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