thảo luận Nên chọn message queue nào

  • Người tạo chủ đề Người tạo chủ đề chetdoi89
  • Ngày bắt đầu Ngày bắt đầu
Bác phải đưa yêu cầu cụ thể vào. Thiết kế hệ thống như thế nào, công nghệ các node đang dùng là gì, team dev quen thuộc với ngôn ngữ nào, chi phí khả dụng là bao nhiêu, ước tính băng thông,...
Chứ chỉ nói khơi khơi như thế chả ai giúp gì được cả

via theNEXTvoz for iPhone
 
Chắc câu hỏi của mấy chú Junior mới tìm hiểu về Micro services rồi :mad: Tuỳ vào từng trường hợp chứ chả có thằng nào tốt hơn thằng nào cả.
Mỗi 1 thằng có 1 ưu điểm riêng.
  • Redis thì nhanh gọn nhẹ, nhưng dễ mất dữ liệu nên hệ thống nào ko cần đảm bảo 100% messages đều cần được xử lý thì dùng.
  • RabbitMQ có mô hình pub/sub đơn giản và phù hợp với các tác vụ xử lý lâu hoặc background jobs.
  • Kafka phức tạp hơn, to hơn phù hợp trong trường hợp cần xử lý high-throughput data streams.



Đấy là tôi nói phét thế thôi chứ tôi cũng chả dùng hết cái lũ này nên chả hiểu cái mẹ gì đâu.
 
Chắc câu hỏi của mấy chú Junior mới tìm hiểu về Micro services rồi :mad: Tuỳ vào từng trường hợp chứ chả có thằng nào tốt hơn thằng nào cả.
Mỗi 1 thằng có 1 ưu điểm riêng.
  • Redis thì nhanh gọn nhẹ, nhưng dễ mất dữ liệu nên hệ thống nào ko cần đảm bảo 100% messages đều cần được xử lý thì dùng.
  • RabbitMQ có mô hình pub/sub đơn giản và phù hợp với các tác vụ xử lý lâu hoặc background jobs.
  • Kafka phức tạp hơn, to hơn phù hợp trong trường hợp cần xử lý high-throughput data streams.



Đấy là tôi nói phét thế thôi chứ tôi cũng chả dùng hết cái lũ này nên chả hiểu cái mẹ gì đâu.
thím có thể nói rõ hơn về thằng kafka dc ko ạ? e ngồi học hỏi :D có case study để so sánh với thằng rmq thì tuyệt

via theNEXTvoz for iPhone
 
thím có thể nói rõ hơn về thằng kafka dc ko ạ? e ngồi học hỏi :D có case study để so sánh với thằng rmq thì tuyệt

via theNEXTvoz for iPhone
Use-case thì bạn có thể đọc engineering blog của các công ty event-drive như Grab, Gojek, User, Lift, AirBnB, Netflix ... hoặc nhảy thẳng vào kafka-summit mà xem nha :D
Vài ví dụ:
....
Book thì có thể bắt đầu với cuốn Kafka: The Definitive Guide của Confluent, mình thấy khá dễ hiểu và gần gũi với thực tế.

Edit: Ở VN thì mình biết có mấy bên cũng chơi hệ thống có Kafka ở core, tiếc là mấy cái slide trong mấy cái conference không thấy share :(
 
Sửa lần cuối:
Chắc câu hỏi của mấy chú Junior mới tìm hiểu về Micro services rồi :mad: Tuỳ vào từng trường hợp chứ chả có thằng nào tốt hơn thằng nào cả.
Mỗi 1 thằng có 1 ưu điểm riêng.
  • Redis thì nhanh gọn nhẹ, nhưng dễ mất dữ liệu nên hệ thống nào ko cần đảm bảo 100% messages đều cần được xử lý thì dùng.
  • RabbitMQ có mô hình pub/sub đơn giản và phù hợp với các tác vụ xử lý lâu hoặc background jobs.
  • Kafka phức tạp hơn, to hơn phù hợp trong trường hợp cần xử lý high-throughput data streams.



Đấy là tôi nói phét thế thôi chứ tôi cũng chả dùng hết cái lũ này nên chả hiểu cái mẹ gì đâu.
High throughput là sao bác, cho em ví dụ với
 
Use-case thì bạn có thể đọc engineering blog của các công ty event-drive như Grab, Gojek, User, Lift, AirBnB, Netflix ... hoặc nhảy thẳng vào kafka-summit mà xem nha :D
Vài ví dụ:
....
Book thì có thể bắt đầu với cuốn Kafka: The Definitive Guide của Confluent, mình thấy khá dễ hiểu và gần gũi với thực tế.

Edit: Ở VN thì mình biết có mấy bên cũng chơi hệ thống có Kafka ở core, tiếc là mấy cái slide trong mấy cái conference không thấy share :(
thanks thím nhiều. e sẽ tham khảo ạ

via theNEXTvoz for iPhone
 
High throughput là sao bác, cho em ví dụ với
Có 2 khái niệm thím cần hiểu là Latency Throughput.
Latency:
độ trễ - như kiểu thời gian xử lý 1 request của BE vậy.
Throughput: Thông lượng - lượng request mà BE xử lý được trong 1 khoảng thời gian. (các khái niệm này rộng hơn chút nhưng mình lấy VD vậy cho dễ hiểu)
thím có thể nói rõ hơn về thằng kafka dc ko ạ? e ngồi học hỏi :D có case study để so sánh với thằng rmq thì tuyệt

via theNEXTvoz for iPhone
VD như có 1 số công việc: render PDF files, thanh toán, Stream Processing.
  • Việc render file hay thanh toán thì xong xuôi mới cần có response, nếu lượng request không phải quá lớn (vài chục nghìn rq/s+) thì RabbitMQ đáp ứng thoải mái. Thì cứ xài nó vì dễ dùng, dễ hiểu hơn Kafka nhiều - dĩ nhiên team có nhiều kinh nghiệm với kafka thì cũng ko cần thiết dùng rabbitmq.
  • Việc stream đòi hỏi phản hồi liên tục, hay đối với các hệ thống cần xử lý quá nhiều request thì Kafka là lựa chọn tốt hơn.

Mô hình Kafka với RabbitMQ khác nhau lớn nhất có lẽ là 1 thằng pull và 1 thằng push.

  • push (RabbitMQ): Provider push message vào queue cho Consumer -> nếu consumer ko xử lý kịp thì có thể tràn queue.
  • pull(Kafka): Kafka dùng topic chứ không phải queue. Các messages trong topic được lưu trữ dạng log và được xoá đi sau 1 thời gian (nếu nhớ ko nhầm default là 7 ngày). Trong khi đó các consumer theo dõi 1 offset trong log này để lấy dữ liệu. Ưu điểm là bạn có thể tua lại thời điểm xảy ra lỗi: VD hệ thống payment xử lý lỗi trong 24h bạn chỉ cần dịch chuyển offset về trước đó 24h. Trong khi đó với RabbitMQ bạn chỉ có cách republish lại các request, vì các message đã được lấy ra khỏi queue -> Khả năng xử lý lỗi của Kafka tốt hơn.
(RabbitMQ có cơ chế đẩy lại message vào queue nếu error xảy ra nhưng trong trường hợp bạn xử lý sai (bug) chứ ko phải error thì bạn không thể biết được)
 
kafka sinh ra để stream, vì nó đảm bảo được thứ tự của các message, dựa vào key trong mỗi partition. Không ai dùng kafka để làm queue chạy background job cả, vì khi số consumer > số partion, thì việc scale là vô nghĩa.

rabbitmq sinh ra để làm queue chạy background job, rabbitmq không mạnh trong việc đảm bảo thứ tự của msg, có thể cố đấm ăn xôi bằng cách set header priority, nhưng không linh hoạt được.

kafka persistance data tốt hơn, có thể cấu hình thời gian msg có thể được lưu lại disk. Có thể đọc lại bất kỳ msg cũ từ cách khai báo offset. Nên consumer có thể "đọc lại" msg bất cứ khi nào muốn.

Rabbitmq không làm được điều này, từ version 3.8 có hỗ trợ Quorum Queue để HA message, còn các queue khác, thì khi msg đã được subscriber báo ACK đọc msg rồi, thì nó sẽ bị xóa khỏi queue.

...
còn nhiều nữa lắm, mà lười gõ quá
 
Apache Pulsar nhé, hiện tại thua Kafka mỗi mặt ecosystem do ra đời sau thôi chứ còn lại ăn tất
 
kafka sinh ra để stream, vì nó đảm bảo được thứ tự của các message, dựa vào key trong mỗi partition. Không ai dùng kafka để làm queue chạy background job cả, vì khi số consumer > số partion, thì việc scale là vô nghĩa.

rabbitmq sinh ra để làm queue chạy background job, rabbitmq không mạnh trong việc đảm bảo thứ tự của msg, có thể cố đấm ăn xôi bằng cách set header priority, nhưng không linh hoạt được.

kafka persistance data tốt hơn, có thể cấu hình thời gian msg có thể được lưu lại disk. Có thể đọc lại bất kỳ msg cũ từ cách khai báo offset. Nên consumer có thể "đọc lại" msg bất cứ khi nào muốn.

Rabbitmq không làm được điều này, từ version 3.8 có hỗ trợ Quorum Queue để HA message, còn các queue khác, thì khi msg đã được subscriber báo ACK đọc msg rồi, thì nó sẽ bị xóa khỏi queue.

...
còn nhiều nữa lắm, mà lười gõ quá
hay thiệt sự. hóng bác gõ tiếp

via theNEXTvoz for iPhone
 
Apache Pulsar nhé, hiện tại thua Kafka mỗi mặt ecosystem do ra đời sau thôi chứ còn lại ăn tất
Thực sự thì vẫn prefer Kafka hơn do kiến trúc của nó đơn giản hơn nhiều chứ Pulsar nhiều thành phần triển khai phức tạp quá. Kafka sắp tới bỏ ZooKeeper tự dùng Raft luôn lại càng đơn giản.
 
Có ae nào dùng Nats chưa nhỉ, so với Kafka thì có hơn gì ko?

Sent from Soupie using vozFApp
 
Có ae nào dùng Nats chưa nhỉ, so với Kafka thì có hơn gì ko?

Sent from Soupie using vozFApp
Nats không so sánh với Kafka hay Pulsar được, nó như là một phiên bản RabbitMQ rút gọn thôi. Được cái nhanh và lightweight, nếu không quá quan trọng reliability thì dùng ok.
 

Thống kê chủ đề

Ngày tạo
chetdoi89,
Người trả lời cuối
the_ruler,
Trả lời
69
Lượt xem
23.828
Quay lại
Lên đầu trang