มีเหตุผลใดที่จะใช้ RabbitMQ กับ Kafka?


332

ฉันถูกขอให้ประเมิน RabbitMQ แทน Kafka แต่พบว่ามันยากที่จะหาเหตุผลที่ทำให้สิ่งที่ดีกว่า Kafka มีใครรู้บ้างไหมว่ามันจะดีกว่าในเรื่องของปริมาณงานความคงทนความหน่วงหรือความง่ายในการใช้งานหรือไม่?


7
คำถามที่ดีจำนวนมากสร้างระดับความเห็นจากประสบการณ์ของผู้เชี่ยวชาญ แต่คำตอบสำหรับคำถามนี้มักจะอิงจากความคิดเห็นเกือบทั้งหมดแทนที่จะเป็นข้อเท็จจริงการอ้างอิงหรือความเชี่ยวชาญเฉพาะด้าน
VdeX

2
@ Guillaume นั่นไม่จำเป็นต้องเป็นเรื่องจริง มีลูกค้าหลายภาษาสำหรับ Kafka: cwiki.apache.org/confluence/display/KAFKA/Clientsนอกจากนี้ Confluent ยังมีลูกค้า Kafka โอเพ่นซอร์สที่มีประสิทธิภาพสูงจำนวนมากในภาษาอื่น ๆ ลองดูข้อเสนอ "Confluent Open Source": confluent.io/product/compare
Matthias J. Sax

3
@ MatthiasJ.Sax ทั้ง RabbitMQ และ kafka มีลูกค้ามากมายในหลายภาษา แต่ประเด็นของฉันคือเกี่ยวกับลูกค้าที่เป็นทางการ ในการเชื่อมโยงที่คุณให้มันถูกเขียนสีดำบนสีขาว: เรายังคงทั้งหมด แต่ลูกค้า JVM ภายนอกฐานรหัสหลัก เกี่ยวกับไหลมารวมกันฉันจริง ๆ แล้วเป็นผู้ใช้ที่ใหญ่ แต่ลูกค้าเพิ่มเติมจะผ่าน API ส่วนที่เหลือไม่เชื่อเรื่องภาษาซึ่งแม้ว่าที่น่ากลัวมากไม่ได้มีอัตราความเร็วเดียวกันกับลูกค้า Java อย่างเป็นทางการ
Guillaume

2
@Gillailla สำหรับลูกค้าโอเพ่นซอร์ส "สุ่ม" จากชุมชนฉันเห็นด้วย; ไม่ใช่ทุกอย่างที่มีประสิทธิภาพสูง (มันค่อนข้างยากที่จะเขียนไคลเอนต์ที่ดี) - นั่นเป็นเหตุผลที่ฉันใส่ "ไม่จำเป็นต้องเป็นจริง" ;) อย่างไรก็ตามไคลเอนต์ C / C ++ และ Python ที่ให้มาของ Confluent นั้นให้ปริมาณงานสูงและมีประสิทธิภาพเทียบเท่ากับไคลเอนต์ AK Java ...
Matthias J. Sax

ฉันอยากจะแนะนำให้อ่านบล็อกนี้: jack-vanlightly.com/blog/2017/12/4/…
roottraveller

คำตอบ:


467

RabbitMQ เป็นนายหน้าข้อความที่มั่นคงทั่วไปที่รองรับโปรโตคอลหลายอย่างเช่น AMQP, MQTT, STOMP และอื่น ๆ มันสามารถรองรับปริมาณงานสูง กรณีการใช้งานทั่วไปสำหรับ RabbitMQ คือการจัดการงานพื้นหลังหรืองานที่ต้องใช้เวลานานเช่นการสแกนไฟล์การปรับขนาดภาพหรือการแปลง PDF RabbitMQ ยังใช้ระหว่างไมโครไซต์ซึ่งทำหน้าที่เป็นวิธีการสื่อสารระหว่างแอปพลิเคชันหลีกเลี่ยงปัญหาคอขวดผ่านข้อความ

Kafka เป็นบัสข้อความที่ปรับให้เหมาะสมสำหรับสตรีมข้อมูลที่มีปริมาณสูงและเล่นซ้ำ ใช้คาฟคาเมื่อคุณต้องการย้ายข้อมูลจำนวนมากประมวลผลข้อมูลแบบเรียลไทม์หรือวิเคราะห์ข้อมูลในช่วงเวลาหนึ่ง กล่าวอีกนัยหนึ่งว่าจำเป็นต้องรวบรวมจัดเก็บและจัดการข้อมูลที่ไหน ตัวอย่างคือเมื่อคุณต้องการติดตามกิจกรรมของผู้ใช้บนเว็บช็อปและสร้างรายการแนะนำที่จะซื้อ อีกตัวอย่างหนึ่งคือการวิเคราะห์ข้อมูลสำหรับการติดตามการบริโภคการบันทึกหรือความปลอดภัย

คาฟคาสามารถมองเห็นได้ว่าเป็นนายหน้าข้อความที่ทนทานซึ่งแอปพลิเคชันสามารถประมวลผลและประมวลผลข้อมูลสตรีมบนดิสก์อีกครั้ง Kafka มีวิธีการกำหนดเส้นทางที่ง่ายมาก RabbitMQ มีตัวเลือกที่ดีกว่าหากคุณต้องการกำหนดเส้นทางข้อความของคุณในรูปแบบที่ซับซ้อนไปยังผู้บริโภคของคุณ ใช้คาฟคาถ้าคุณต้องการสนับสนุนผู้บริโภคแบบแบตช์ซึ่งอาจเป็นแบบออฟไลน์หรือผู้บริโภคที่ต้องการข้อความที่มีเวลาแฝงต่ำ 

เพื่อที่จะเข้าใจวิธีการอ่านข้อมูลจากคาฟคาเราต้องเข้าใจผู้บริโภคและกลุ่มผู้บริโภคก่อน พาร์ติชันช่วยให้คุณสามารถขนานหัวข้อโดยแยกข้อมูลข้ามหลายโหนด แต่ละเร็กคอร์ดในพาร์ติชันถูกกำหนดและระบุโดยออฟเซ็ตเฉพาะ ออฟเซ็ตนี้ชี้ไปที่ระเบียนในพาร์ติชัน ในเวอร์ชันล่าสุดของ Kafka Kafka ยังคงรักษาออฟเซ็ตตัวเลขสำหรับแต่ละระเบียนในพาร์ติชัน ผู้บริโภคในคาฟคาสามารถกระทำการชดเชยโดยอัตโนมัติเป็นระยะหรือสามารถเลือกที่จะควบคุมตำแหน่งที่มุ่งมั่นนี้ได้ด้วยตนเอง RabbitMQ จะแจ้งทุกรัฐเกี่ยวกับข้อความที่ถูกใช้ / ตอบรับ / ไม่ได้รับการยอมรับ ฉันพบว่าคาฟคามีความซับซ้อนมากกว่าที่จะเข้าใจมากกว่ากรณีของ RabbitMQ ซึ่งข้อความถูกลบออกจากคิวทันทีที่รับ

คิวของ RabbitMQ นั้นเร็วที่สุดเมื่อมันว่างเปล่าในขณะที่ Kafka เก็บข้อมูลจำนวนมากโดยมีค่าใช้จ่ายน้อยมาก - Kafka ถูกออกแบบมาสำหรับการถือครองและกระจายข้อความจำนวนมาก (ถ้าคุณวางแผนที่จะมีคิวที่ยาวมากใน RabbitMQ คุณสามารถดูคิวที่ขี้เกียจ )

คาฟคานั้นถูกสร้างขึ้นจากพื้นดินโดยคำนึงถึงการเพิ่มขนาดในแนวนอนโดยเพิ่มเครื่องเพิ่มเติมในขณะที่ RabbitMQ ได้รับการออกแบบมาสำหรับการปรับขนาดแนวตั้ง

RabbitMQ มีอินเทอร์เฟซที่ใช้งานง่ายในตัวซึ่งช่วยให้คุณตรวจสอบและจัดการเซิร์ฟเวอร์ RabbitMQ ของคุณจากเว็บเบราว์เซอร์ เหนือสิ่งอื่นใดคิวการเชื่อมต่อช่องทางการแลกเปลี่ยนผู้ใช้และสิทธิ์ผู้ใช้สามารถจัดการได้ - สร้างลบและแสดงรายการในเบราว์เซอร์และคุณสามารถตรวจสอบอัตราข้อความและรับ / ส่งข้อความด้วยตนเอง Kafka มีเครื่องมือโอเพนซอร์ซจำนวนหนึ่งและยังมีเครื่องมือเชิงพาณิชย์บางส่วนที่นำเสนอฟังก์ชั่นการจัดการและการตรวจสอบ ฉันจะบอกว่ามันง่ายกว่า / เร็วกว่านี้ในการทำความเข้าใจ RabbitMQ

อ่านเพิ่มเติมและข้อมูลการเปรียบเทียบสามารถดูได้ที่นี่: https://www.cloudamqp.com/blog/2019-12-12-when-to-use-rabbitmq-or-apache-kafka.html HTML

แนะนำอุตสาหกรรมกระดาษด้วย: "Kafka กับ RabbitMQ: การศึกษาเปรียบเทียบการอ้างอิงอุตสาหกรรม / การใช้งานการสมัครสมาชิกสองคน": http://dl.acm.org/citation.cfm?id=3093908

ฉันทำงานที่ บริษัท ที่ให้บริการ Apache Kafka และ RabbitMQ เป็นบริการ


31
"ทางเข้าสูง" หมายถึงอะไร
Martin Thoma

23
high-ingress = ปริมาณการรับส่งข้อมูลสูง
jbustamovej

6
ฉันถามประเด็นของคุณเกี่ยวกับ RabbitMQ "ส่วนใหญ่ออกแบบมาสำหรับการปรับขนาดแนวตั้ง" เป็นไงบ้าง ...
Ryan.Bartsch

17
การปรับสเกลแนวนอน (ปรับขนาดด้วยการเพิ่มเครื่องจักร) ไม่ให้ประสิทธิภาพที่ดีขึ้นใน RabbitMQ ประสิทธิภาพที่ดีที่สุดจะได้รับเมื่อคุณทำการปรับขนาดตามแนวตั้ง (ปรับขนาดด้วยการเพิ่มพลังงานมากขึ้น) ฉันรู้สิ่งนี้เพราะฉันทำงานกับกลุ่ม RabbitMQ หลายพันรายการเป็นเวลาหลายปีแล้ว คุณสามารถปรับขนาดแนวนอนใน Rabbit ได้ แต่นั่นหมายความว่าคุณยังตั้งค่าการทำคลัสเตอร์ระหว่างโหนดของคุณซึ่งจะทำให้การตั้งค่าของคุณช้าลง ฉันเขียนคำแนะนำเกี่ยวกับแนวทางปฏิบัติที่ดีที่สุดสำหรับประสิทธิภาพสูงเทียบกับความพร้อมใช้งานสูงใน RabbitMQ: cloudamqp.com/blog/2017-12-29-part1-rabbitmq-best-practice.html
Lovisa Johansson

4
"... ในขณะที่คาฟคาไม่ทำเช่นนั้นผู้บริโภคจะติดตามว่ามีการบริโภคอะไรบ้างและไม่ใช่" สิ่งนี้ไม่ถูกต้อง Kafka ติดตามข้อความที่ผู้บริโภคแต่ละรายบริโภค
jucardi

36

ฉันได้ยินคำถามนี้ทุกสัปดาห์ ... ในขณะที่ RabbitMQ (เช่น IBM MQ หรือ JMS หรือโซลูชั่นการส่งข้อความทั่วไป) ใช้สำหรับการส่งข้อความแบบดั้งเดิม Apache Kafka ใช้เป็นแพลตฟอร์มสตรีมมิ่ง (การส่งข้อความ + การจัดเก็บข้อมูลแบบกระจาย + การประมวลผลข้อมูล) ทั้งสองถูกสร้างขึ้นสำหรับกรณีการใช้งานที่แตกต่างกัน

คุณสามารถใช้ Kafka สำหรับ "การส่งข้อความดั้งเดิม" แต่ไม่สามารถใช้ MQ สำหรับสถานการณ์เฉพาะของ Kafka

บทความ“ Apache Kafka vs. Enterprise Service Bus (ESB) - เพื่อนศัตรูหรือ Frenemies หรือไม่? ( https://www.confluent.io/blog/apache-kafka-vs-enterprise-service-bus-esb-friends-enemies-or-frenemies/ ) กล่าวถึงสาเหตุที่คาฟก้าไม่สามารถแข่งขันได้ แต่เสริมการบูรณาการและการแก้ปัญหาการส่งข้อความ (รวมถึง RabbitMQ) และวิธีการรวมเข้าด้วยกัน


30

5 ความแตกต่างที่สำคัญระหว่าง Kafka และ RabbitMQ ลูกค้าที่ใช้พวกเขา: ป้อนคำอธิบายรูปภาพที่นี่

ระบบการส่งข้อความใดที่จะเลือกหรือเราควรเปลี่ยนระบบการส่งข้อความที่มีอยู่ของเรา?

ไม่มีคำตอบสำหรับคำถามข้างต้น วิธีการหนึ่งที่เป็นไปได้ในการตรวจสอบเมื่อคุณต้องตัดสินใจว่าระบบการส่งข้อความหรือคุณควรเปลี่ยนระบบที่มีอยู่คือการ“ ประเมินขอบเขตและค่าใช้จ่าย


5
แหล่งข้อมูลของคุณอยู่ที่ไหน ฉันไม่เห็นด้วยกับคำตอบของคุณเกี่ยวกับประสิทธิภาพใน RabbitMQ - ขึ้นอยู่กับจำนวนของคิวการเชื่อมต่อและอื่น ๆ
Lovisa Johansson

แก้ไข. แต่ช่วงความแปรปรวนเฉลี่ยคล้ายกันตามที่ระบุข้างต้น มีสถานการณ์ที่มันจะดีขึ้นหรือแย่ลงกว่าช่วงที่กล่าวถึงข้างต้น อ้างถึงบล็อก Rabbitmq จุดข้อมูลล่าสุดอาจมีการเปลี่ยนแปลง rabbitmq.com/blog/2012/04/25/…
Shishir

@Shishir - คุณสามารถแชร์รายละเอียดเพิ่มเติม / ลิงก์ที่อธิบายประเภทการแลกเปลี่ยนข้อความที่ต่างกัน - โดยตรง, แฟนคลับ, ผับ / ย่อย ฯลฯ ? เสียงเหล่านี้มีประโยชน์ในการกำหนดแพลตฟอร์มการส่งข้อความที่เหมาะสมสำหรับข้อกำหนดที่กำหนด ขอบคุณ
Andy Dufresne

@Shishir ลิงก์จาก 2012 อาจมีการเปลี่ยนแปลงใช่
Lovisa Johansson

@AndyDufresne ช้าไปหน่อย แต่นี่เป็นลิงค์: cloudamqp.com/blog/…
Lovisa Johansson

28

ความแตกต่างที่สำคัญอย่างหนึ่งที่คุณลืมคือ RabbitMQ คือระบบการส่งข้อความแบบกดในขณะที่ Kafka เป็นระบบการส่งข้อความแบบดึง นี่เป็นสิ่งสำคัญในสถานการณ์ที่ระบบการส่งข้อความต้องตอบสนองผู้บริโภคประเภทต่างๆที่มีความสามารถในการประมวลผลที่แตกต่างกัน ด้วยระบบที่ใช้งานแบบดึงผู้บริโภคสามารถใช้งานได้ตามความสามารถในการใช้งานซึ่งระบบการกดจะส่งข้อความโดยไม่คำนึงถึงสถานะของผู้บริโภคจึงทำให้ผู้บริโภคมีความเสี่ยงสูง


3
คุณสามารถดึงและดันได้ด้วย RabbitMQ
Nikolas

16

RabbitMQเป็นนายหน้าข้อความวัตถุประสงค์ทั่วไปแบบดั้งเดิม ช่วยให้เว็บเซิร์ฟเวอร์ตอบสนองต่อคำขอได้อย่างรวดเร็วและส่งข้อความไปยังบริการต่างๆ ผู้เผยแพร่สามารถเผยแพร่ข้อความและทำให้พร้อมใช้งานในคิวเพื่อให้ผู้บริโภคสามารถเรียกดูได้ การสื่อสารสามารถเป็นแบบอะซิงโครนัสหรือแบบซิงโครนัส


ในอีกทางหนึ่งApache Kafkaไม่ใช่เพียงนายหน้าข้อความ LinkedIn ได้รับการออกแบบและนำมาใช้ครั้งแรกเพื่อใช้เป็นคิวข้อความ ตั้งแต่ปี 2011 คาฟก้าได้รับการเปิดแหล่งที่มาและพัฒนาอย่างรวดเร็วในแพลตฟอร์มสตรีมมิ่งแบบกระจายซึ่งใช้สำหรับการดำเนินการตามท่อข้อมูลเรียลไทม์และแอพพลิเคชั่นสตรีมมิ่ง

สามารถปรับขนาดในแนวนอนทนต่อข้อผิดพลาดชั่วร้ายเร็วและทำงานในการผลิตในหลายพัน บริษัท

องค์กรสมัยใหม่มีท่อส่งข้อมูลที่หลากหลายซึ่งเอื้อต่อการสื่อสารระหว่างระบบหรือบริการ สิ่งต่าง ๆ มีความซับซ้อนเพิ่มขึ้นเล็กน้อยเมื่อจำนวนบริการที่เหมาะสมต้องสื่อสารกันในเวลาจริง

สถาปัตยกรรมมีความซับซ้อนเนื่องจากต้องมีการผนวกรวมที่หลากหลายเพื่อเปิดใช้งานการสื่อสารระหว่างกันของบริการเหล่านี้ แม่นยำยิ่งขึ้นสำหรับสถาปัตยกรรมที่ครอบคลุมบริการ m source และบริการเป้าหมาย n การผสานรวมที่แตกต่างกัน nxm จำเป็นต้องถูกเขียน นอกจากนี้การรวมทุกครั้งจะมีข้อกำหนดที่แตกต่างกันซึ่งหมายความว่าอาจต้องใช้โปรโตคอลที่แตกต่างกัน (HTTP, TCP, JDBC ฯลฯ ) หรือการแสดงข้อมูลที่แตกต่าง (Binary, Apache Avro, JSON ฯลฯ ) ทำให้สิ่งต่าง ๆ มีความท้าทายมากยิ่งขึ้น . นอกจากนี้บริการต้นทางอาจแก้ไขภาระที่เพิ่มขึ้นจากการเชื่อมต่อที่อาจส่งผลกระทบต่อความหน่วงแฝง

Apache Kafka นำไปสู่สถาปัตยกรรมที่ง่ายและจัดการได้มากขึ้นโดยการแยกการส่งไปป์ไลน์ข้อมูล Kafka ทำหน้าที่เป็นระบบกระจายความเร็วสูงซึ่งบริการต้นทางผลักดันกระแสข้อมูลทำให้มีบริการเป้าหมายเพื่อดึงข้อมูลตามเวลาจริง

นอกจากนี้ยังมีอินเทอร์เฟซผู้ใช้โอเพ่นซอร์สและระดับองค์กรจำนวนมากสำหรับการจัดการ Kafka Clusters อยู่ในขณะนี้ สำหรับรายละเอียดเพิ่มเติมโปรดดูที่บทความของฉันภาพรวมของเครื่องมือตรวจสอบ UI สำหรับกลุ่ม Apache Kafkaและเพราะเหตุใด Apache Kafka


การตัดสินใจว่าจะไป RabbitMQ หรือ Kafka นั้นขึ้นอยู่กับข้อกำหนดของโครงการของคุณ โดยทั่วไปหากคุณต้องการนายหน้าข้อความ pub-sub แบบง่าย ๆ ให้ไปที่ RabbitMQ หากคุณต้องการสร้างสถาปัตยกรรมที่ขับเคลื่อนด้วยเหตุการณ์ที่องค์กรของคุณจะทำหน้าที่ในเหตุการณ์แบบเรียลไทม์ให้ไปที่ Apache Kafka เนื่องจากมีฟังก์ชั่นเพิ่มเติมสำหรับสถาปัตยกรรมประเภทนี้ (เช่น Kafka Streams หรือ ksqlDB)


15

ฉันรู้ว่ามันช้าไปหน่อยและบางทีคุณอาจพูดไปทางอ้อมแล้ว แต่อีกครั้งคาฟคาไม่ได้อยู่ในคิวเลยมันเป็นท่อนไม้

เพื่อให้ง่ายกรณีการใช้งานที่ชัดเจนที่สุดเมื่อคุณต้องการ RabbitMQ (หรือเทคโนคิว) มากกว่า Kafka คือสิ่งต่อไปนี้:

คุณมีผู้บริโภคหลายคนที่บริโภคจากคิวและเมื่อใดก็ตามที่มีข้อความใหม่ในคิวและผู้บริโภคที่มีอยู่คุณต้องการให้ข้อความนี้ถูกประมวลผล ถ้าคุณมองอย่างใกล้ชิดว่า Kafka ทำงานอย่างไรคุณจะสังเกตได้ว่าไม่รู้วิธีการทำเช่นนั้นเนื่องจากการปรับขนาดพาร์ติชันคุณจะมีลูกค้าที่ทุ่มเทให้กับพาร์ติชันและคุณจะประสบปัญหาความอดอยาก ปัญหาที่สามารถหลีกเลี่ยงได้อย่างง่ายดายโดยใช้เทคโนคิวแบบง่าย คุณสามารถคิดถึงการใช้เธรดที่จะส่งข้อความที่แตกต่างจากพาร์ติชันเดียวกัน แต่อีกครั้ง Kafka ไม่มีกลไกการตอบรับที่เลือก

สิ่งที่คุณสามารถทำได้มากที่สุดคือทำในฐานะคนพวกนั้นและพยายามที่จะเปลี่ยนคาฟคาให้เป็นคิว: https://github.com/softwaremill/kmq

Yannick


10

ใช้ RabbitMQ เมื่อ:

  • คุณไม่ต้องจัดการกับ Bigdata และคุณต้องการ UI ในตัวที่สะดวกสำหรับการตรวจสอบ
  • ไม่จำเป็นต้องรอคิวที่จำลองได้โดยอัตโนมัติ
  • ไม่มีผู้ใช้หลายรายสำหรับข้อความ - เนื่องจากต่างจาก Kafka ซึ่งเป็นบันทึก RabbitMQ เป็นคิวและข้อความจะถูกลบเมื่อใช้งานและได้รับการตอบรับ
  • หากคุณมีข้อกำหนดที่จะใช้ Wildcards และ regex สำหรับข้อความ
  • หากการกำหนดลำดับความสำคัญของข้อความเป็นสิ่งสำคัญ

ในระยะสั้น: RabbitMQ นั้นดีสำหรับกรณีการใช้งานง่ายโดยมีปริมาณการใช้ข้อมูลน้อยและมีข้อดีของคิวลำดับความสำคัญและตัวเลือกการกำหนดเส้นทางที่ยืดหยุ่น สำหรับข้อมูลขนาดใหญ่และปริมาณงานสูงใช้ Kafka


สมาชิกหลายรายมีการจัดการที่ดีไม่ได้อยู่ในคิวเดียว แต่รวมไปถึงหลายคิวและไดนามิกที่อาจเกิดขึ้น แน่นอนว่า Rabbit ไม่ได้มีไว้สำหรับ 'กรณีใช้งานง่าย' เท่านั้น แต่สำหรับ paragdim ที่แตกต่างกันโดยสิ้นเชิง แต่ไม่ซับซ้อนกว่าชุดข้อมูลขนาดใหญ่ที่ต้องเก็บรักษาไว้เป็นเวลานาน คุณสามารถขยายส่วนข้อความสำคัญได้หรือไม่?
โอเว่น

9

ฉันจะให้คำตอบอย่างมีวัตถุประสงค์บนพื้นฐานของประสบการณ์ของฉันกับทั้งสองฉันจะข้ามทฤษฎีที่อยู่เบื้องหลังพวกเขาโดยสมมติว่าคุณรู้แล้วและ / หรือคำตอบอื่น ๆ ที่ให้ไว้เพียงพอแล้ว

RabbitMQ : ฉันเลือกสิ่งนี้หากความต้องการของฉันนั้นง่ายพอที่จะจัดการกับการสื่อสารของระบบผ่านช่องทาง / คิวการเก็บรักษาและการสตรีมมิงไม่ใช่ข้อกำหนด เช่นเมื่อระบบการผลิตสร้างสินทรัพย์จะแจ้งให้ระบบข้อตกลงเพื่อกำหนดค่าสัญญาและอื่น ๆ

Kafka : ความต้องการจัดหากิจกรรมส่วนใหญ่เมื่อคุณอาจต้องจัดการกับสตรีม (บางครั้งไม่มีที่สิ้นสุด) ข้อมูลจำนวนมากในเวลาที่เหมาะสมอย่างสมดุลทันทีเล่นซ้ำเพื่อชดเชยสถานะที่กำหนดและอื่น ๆ โปรดทราบว่าสถาปัตยกรรมนี้มีความซับซ้อนมากขึ้นเช่นกันเนื่องจากมีแนวคิดเช่นหัวข้อ / พาร์ทิชัน / โบรกเกอร์ / ข้อความหลุมฝังศพ ฯลฯ เป็นสิ่งสำคัญอันดับหนึ่ง


4

ประโยชน์อย่างเดียวที่ฉันคิดได้คือคุณสมบัติการทำธุรกรรมส่วนที่เหลือทั้งหมดสามารถทำได้โดยใช้คาฟคา


2
Kafka มีการทำธุรกรรม
OneCricketeer

2

การไต่ระดับทั้งสองนั้นทำได้ยากในทางที่ทนต่อความผิดพลาดแบบกระจาย แต่ฉันต้องการทำให้เป็นกรณีที่ RabbitMQ มีขนาดใหญ่ขึ้น มันไม่ง่ายเลยที่จะเข้าใจ Shovel, Federation, คิวมิงค์ข่าวสารเกี่ยวกับกระจก, ACK, Mem, Fault tollerance เป็นต้นไม่ว่าคุณจะไม่มีปัญหาเฉพาะกับ Zookeeper ฯลฯ ใน Kafka แต่มีส่วนที่เคลื่อนไหวน้อยกว่าในการจัดการ ที่กล่าวว่าคุณได้รับการแลกเปลี่ยนหลายภาษากับ RMQ ซึ่งคุณไม่ได้ทำกับคาฟคา หากคุณต้องการสตรีมให้ใช้ Kafka หากคุณต้องการ IoT แบบง่ายหรือการส่งแพ็กเก็ตปริมาณสูงที่คล้ายกันให้ใช้ Kafka มันเกี่ยวกับผู้บริโภคที่ฉลาด หากคุณต้องการความยืดหยุ่นของ msg และความน่าเชื่อถือที่สูงขึ้นด้วยค่าใช้จ่ายที่สูงขึ้นและความซับซ้อนที่อาจเกิดขึ้นให้ใช้ RMQ


ฉันไม่เห็นด้วยว่าคุณอนุมานว่า RMQ มี "ความซับซ้อนบางอย่าง" อย่างไรถ้าบอกว่าคาฟคามีความซับซ้อนน้อยกว่า
Cory Robinson

1

หากคุณมีความต้องการการกำหนดเส้นทางที่ซับซ้อนและต้องการ GUI ในตัวเพื่อตรวจสอบโบรกเกอร์นายหน้า RabbitMQ อาจเหมาะที่สุดสำหรับแอปพลิเคชันของคุณ มิฉะนั้นหากคุณกำลังมองหานายหน้าข้อความเพื่อจัดการปริมาณงานสูงและให้การเข้าถึงประวัติสตรีมคาฟคาน่าจะเป็นตัวเลือกที่ดีกว่า


[+1] คำอธิบายที่ดีฉันแน่ใจว่าคุณใช้มันในโครงการของคุณคุณช่วยตั้งชื่อให้พวกเขาใช้ในการติดตั้งระบบข้อความ
GingerHead

@GingerHead เราทำงานกับ บริษัท วิทยุที่ใช้ RabbitMQ ในการสร้าง GUI และติดตั้งได้ง่าย มันยอดเยี่ยมมากสำหรับนักพัฒนาในการตรวจสอบสถานะของไมโครไซต์ของพวกเขาได้อย่างง่ายดาย บริษัท เดียวกันยังใช้ Kafka สำหรับสตรีมข้อมูลปริมาณมากซึ่งต้องใช้เวลาในการเก็บรักษานานกว่าสามวัน หากคุณมีความสนใจในการอ่านข้อมูลเพิ่มเติมเกี่ยวกับความแตกต่างระหว่างสองเทคโนโลยีที่นี่เป็นบทความที่ผมเขียนในหัวข้อนี้: Kafka บทความเทียบกับ
Maria Hatfield

0

Apache Kafka เป็นตัวเลือกยอดนิยมสำหรับการเปิดใช้งาน data pipelines Apache kafka เพิ่ม kafka stream เพื่อรองรับการใช้งาน etl ที่เป็นที่นิยม KSQL ทำให้การแปลงข้อมูลภายในท่อเป็นเรื่องง่ายพร้อมที่จะส่งข้อความไปยังระบบอื่น KSQL เป็นเครื่องมือ SQL สตรีมมิ่งสำหรับ Apache Kafka มันมีอินเตอร์เฟส SQL แบบอินเทอร์เฟซที่ใช้งานง่าย แต่ทรงพลังสำหรับการประมวลผลสตรีมบน Kafka โดยไม่จำเป็นต้องเขียนโค้ดในภาษาการเขียนโปรแกรมเช่น Java หรือ Python KSQL สามารถปรับขนาดได้ยืดหยุ่นยืดหยุ่นผิดพลาดและเรียลไทม์ สนับสนุนการดำเนินการสตรีมมิ่งที่หลากหลายรวมถึงการกรองข้อมูลการแปลงการรวมการรวมการสร้างหน้าต่างและการทำให้เป็นเซสชัน

https://docs.confluent.io/current/ksql/docs/index.html

Rabbitmq ไม่ใช่ตัวเลือกยอดนิยมสำหรับระบบ etl สำหรับระบบที่ต้องการระบบรับส่งข้อความอย่างง่ายที่ให้ปริมาณงานน้อย


0

ฉันรู้ว่านี่เป็นคำถามเก่า แต่สถานการณ์หนึ่งที่ RabbitMQ อาจเป็นทางเลือกที่ดีกว่าคือเมื่อต้องรับมือกับการทำข้อมูลซ้ำ

ด้วย RabbitMQ โดยค่าเริ่มต้นเมื่อข้อความหมดแล้วข้อความนั้นจะถูกลบ ด้วยค่าเริ่มต้นของ Kafka ข้อความจะถูกเก็บไว้เป็นเวลาหนึ่งสัปดาห์ เป็นเรื่องปกติที่จะตั้งค่านี้เป็นเวลานานกว่าเดิมหรือแม้แต่จะไม่ลบทิ้ง

ในขณะที่ผลิตภัณฑ์ทั้งสองสามารถกำหนดค่าให้เก็บรักษาข้อความ (หรือไม่เก็บ) หากการปฏิบัติตาม CCPA หรือ GDPR เป็นเรื่องที่น่ากังวลฉันจะใช้ RabbitMQ


0

คาฟคานั้นดีกว่า RabbitMQ ในแง่ของปริมาณงานความทนทานความล่าช้า หากคุณคาดหวังการทำธุรกรรมน้อยกว่า 10k / วินาทีคุณสามารถใช้ RabbitMQ ได้ แต่ขึ้นอยู่กับการใช้งานของคุณ

ฉันใช้ Kafka ในผลิตภัณฑ์ของเราซึ่งเราจัดการธุรกรรมมากกว่า 70k / วินาทีและเวลาในการตอบสนองโดยเฉลี่ยอยู่ที่ 15 มิลลิวินาทีโดยมีหนามแหลมเล็กน้อยถึงไม่เกิน 40 มิลลิวินาที ขนาดของหัวข้อคือ 100kb

PFB จุดข้อมูลเพิ่มเติมเกี่ยวกับ KAFKA และ RabbitMQ: Apache Kafka รวมถึงโบรกเกอร์เองซึ่งจริงๆแล้วเป็นที่รู้จักกันดีและเป็นที่นิยมมากที่สุดของมันและได้รับการออกแบบและวางตลาดอย่างเด่นชัดต่อสถานการณ์การประมวลผลสตรีม นอกจากนั้น Apache Kafka เพิ่งเพิ่ม Kafka Streams ซึ่งวางตำแหน่งตัวเองเป็นทางเลือกในการสตรีมแพลตฟอร์มเช่น Apache Spark, Apache Flink, Apache Beam / Google Cloud Data Flow และ Spring Cloud Data Flow เอกสารประกอบนั้นใช้งานได้ดีในการพูดคุยเกี่ยวกับกรณีการใช้งานที่ได้รับความนิยมเช่นการติดตามกิจกรรมเว็บไซต์ตัวชี้วัดการรวมบันทึกการประมวลผลสตรีมการจัดหากิจกรรมและบันทึกการกระทำ กรณีการใช้งานอย่างหนึ่งที่อธิบายคือการส่งข้อความซึ่งอาจสร้างความสับสนได้ ดังนั้นลองแกะกล่องออกมาสักเล็กน้อยเพื่อรับความชัดเจนว่าสถานการณ์การรับส่งข้อความใดดีที่สุดสำหรับ Kafka เช่น:

สตรีมจาก A ถึง B โดยไม่มีการกำหนดเส้นทางที่ซับซ้อนโดยมีปริมาณงานสูงสุด (100k / วินาที +) จัดส่งตามลำดับอย่างน้อยหนึ่งครั้ง เมื่อแอปพลิเคชันของคุณต้องการเข้าถึงประวัติสตรีมจัดส่งตามลำดับอย่างน้อยหนึ่งครั้ง คาฟคาเป็นร้านค้าข้อความที่มีความทนทานและลูกค้าสามารถรับ“ การเล่นซ้ำ” ของสตรีมกิจกรรมตามความต้องการซึ่งตรงข้ามกับโบรกเกอร์ข้อความแบบดั้งเดิมที่เมื่อส่งข้อความแล้วมันจะถูกลบออกจากคิว การประมวลผลเหตุการณ์การจัดหาสตรีม RabbitMQ เป็นโซลูชันการส่งข้อความทั่วไปซึ่งมักจะใช้เพื่ออนุญาตให้เว็บเซิร์ฟเวอร์ตอบสนองต่อการร้องขอได้อย่างรวดเร็วแทนที่จะถูกบังคับให้ทำตามขั้นตอนการใช้ทรัพยากรจำนวนมากในขณะที่ผู้ใช้รอผล นอกจากนี้ยังเป็นสิ่งที่ดีสำหรับการกระจายข้อความไปยังผู้รับหลายคนเพื่อการบริโภคหรือเพื่อสร้างสมดุลระหว่างคนงานที่มีภาระงานสูง (20k + / วินาที) เมื่อความต้องการของคุณขยายเกินกว่าปริมาณงาน RabbitMQ มีสิ่งที่จะนำเสนอมากมาย: คุณสมบัติสำหรับการจัดส่งที่เชื่อถือได้การกำหนดเส้นทางสหพันธรัฐ HA ความปลอดภัยเครื่องมือการจัดการและคุณสมบัติอื่น ๆ ตรวจสอบบางสถานการณ์ที่ดีที่สุดสำหรับ RabbitMQ เช่น:

แอปพลิเคชันของคุณต้องทำงานร่วมกับโปรโตคอลที่มีอยู่เช่น AMQP 0-9-1, STOMP, MQTT, AMQP 1.0 คุณต้องมีการควบคุม / การรับรองความมั่นคงที่ละเอียดยิ่งขึ้นต่อข้อความ (คิวจดหมายที่ตายแล้ว ฯลฯ ) อย่างไรก็ตาม Kafka ได้เพิ่มการสนับสนุนธุรกรรมที่ดีขึ้นเมื่อเร็ว ๆ นี้ แอปพลิเคชันของคุณต้องการความหลากหลายในจุดต่อจุดร้องขอ / ตอบและเผยแพร่ / สมัครรับส่งข้อความการกำหนดเส้นทางที่ซับซ้อนไปยังผู้บริโภครวมบริการ / แอพเข้ากับตรรกะการกำหนดเส้นทางที่ไม่น่ารำคาญ RabbitMQ ความช่วยเหลือของซอฟต์แวร์เพิ่มเติม RabbitMQ มักใช้กับ Apache Cassandra เมื่อแอปพลิเคชันต้องการเข้าถึงประวัติสตรีมหรือด้วยปลั๊กอิน LevelDB สำหรับแอปพลิเคชันที่ต้องมีคิว "ไม่มีที่สิ้นสุด" แต่ฟีเจอร์เหล่านี้ไม่ได้มาพร้อมกับ RabbitMQ


0

คำตอบสั้น ๆ คือ "ข้อความตอบรับ" RabbitMQ สามารถกำหนดค่าให้ต้องการข้อความตอบรับ หากผู้รับล้มเหลวข้อความจะกลับไปที่คิวและผู้รับอื่นสามารถลองอีกครั้ง ในขณะที่คุณสามารถทำสิ่งนี้ได้ใน Kafka ด้วยรหัสของคุณเองมันสามารถทำงานได้กับ RabbitMQ นอกกรอบ

จากประสบการณ์ของฉันหากคุณมีแอพพลิเคชั่นที่มีข้อกำหนดในการสืบค้นกระแสข้อมูล Kafka และ KSql เป็นทางออกที่ดีที่สุดของคุณ หากคุณต้องการระบบการเข้าคิวคุณจะดีขึ้นด้วย RabbitMQ


0

คำตอบที่ได้รับการโหวตมากที่สุดครอบคลุมส่วนใหญ่ แต่ฉันต้องการใช้มุมมองกรณีใช้แสงสูง คาฟคาทำกระต่าย mq ได้คำตอบคือใช่ แต่กระต่ายเอ็มเคสามารถทำทุกอย่างที่คาฟก้าทำได้คำตอบคือไม่ ดังนั้นสิ่งที่ Rabbit mq ไม่สามารถทำได้คือทำให้ kafka แตกต่างกันนั่นคือการกระจายการประมวลผลข้อความ ด้วยวิธีนี้อ่านคำตอบที่ได้รับการโหวตมากที่สุดในตอนนี้และจะทำให้เข้าใจได้ง่ายขึ้น หากต้องการทำอย่างละเอียดให้ใช้กรณีการใช้งานที่คุณต้องสร้างระบบการส่งข้อความที่มีปริมาณงานสูงเช่น "ชอบ" ใน Facebook และคุณได้เลือกกระต่าย mq สำหรับสิ่งนั้น คุณสร้างการแลกเปลี่ยนและคิวและผู้บริโภคที่ผู้เผยแพร่ทั้งหมด (ในกรณีนี้ผู้ใช้ FB) สามารถเผยแพร่ข้อความ 'ไลค์' เนื่องจากปริมาณงานของคุณสูง คุณจะสร้างหลายเธรดในคอนซูเมอร์เพื่อประมวลผลข้อความในแบบคู่ขนาน แต่คุณยังคงถูก จำกัด ด้วยความจุของฮาร์ดแวร์ของเครื่องที่ผู้ใช้บริการกำลังทำงานอยู่ สมมติว่าผู้บริโภครายหนึ่งไม่เพียงพอที่จะประมวลผลข้อความทั้งหมด - คุณจะทำอย่างไร คุณสามารถเพิ่มผู้บริโภคได้อีกหนึ่งรายในคิว - ไม่สามารถทำเช่นนั้นได้ คุณสามารถสร้างคิวใหม่และผูกคิวนั้นเพื่อแลกเปลี่ยนข้อความที่ 'ชอบ' เผยแพร่คำตอบนั้นไม่ทำให้คุณได้รับข้อความที่ประมวลผลสองครั้ง นั่นคือปัญหาหลักที่คาฟคาแก้ได้ มันช่วยให้คุณสร้างพาร์ติชันแบบกระจาย (Queue in rabbit mq) และผู้บริโภคแบบกระจายที่พูดคุยกัน ที่ทำให้ข้อความของคุณในหัวข้อได้รับการประมวลผลจากผู้บริโภคที่กระจายอยู่ในโหนดต่าง ๆ (Machines) โบรกเกอร์ของ Kafka รับประกันว่าข้อความจะได้รับความสมดุลในทุกส่วนของหัวข้อนั้น ๆ กลุ่มผู้บริโภคต้องแน่ใจว่าผู้บริโภคทุกคนพูดคุยกันและข้อความไม่ได้รับการดำเนินการสองครั้ง แต่ในชีวิตจริงคุณจะไม่ประสบกับปัญหานี้เว้นแต่ว่าคุณจะใส่ได้สูงเพราะ Rabbit mq สามารถประมวลผลข้อมูลได้อย่างรวดเร็วแม้กับผู้ใช้รายเดียว

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.