MQ
Apache Kafka vs RabbitMQ vs BullMQ
1 / 16
Technology Decision Presentation

Kafka vs RabbitMQ vs BullMQ

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

Event Streaming Message Routing Background Job Architecture Decision
ไม่มีเครื่องมือใดดีที่สุดสำหรับทุกงาน มีเพียงเครื่องมือที่เหมาะสมที่สุดกับแต่ละ Use Case
Business Problem

ทำไมระบบจึงไม่ควรทำทุกอย่างพร้อมกัน

ระบบแบบรอทุกขั้นตอน

  • ลูกค้าต้องรอนานขึ้น
  • ระบบหนึ่งล่มอาจทำให้กระบวนการทั้งหมดล้ม
  • รองรับปริมาณงานช่วง Peak ได้ยาก
  • ระบบต่าง ๆ ผูกติดกันมากเกินไป

ระบบแบบ Asynchronous

  • ระบบหลักตอบลูกค้าได้เร็วขึ้น
  • งานที่เหลือสามารถทำต่อเบื้องหลัง
  • เพิ่ม Worker เพื่อรองรับปริมาณงานได้
  • ระบบปลายทางล่มชั่วคราว งานยังรอได้
Customer
→
Order API
→
Queue / Event Platform
→
ระบบต่าง ๆ ทำงานต่อ
Simple Mental Model

จำง่าย ๆ: สมุดบันทึก ศูนย์คัดแยก และกระดานงาน

Apache Kafka

01

เปรียบเหมือน: สมุดบันทึกเหตุการณ์หรือกล้องวงจรปิด

ตอบคำถาม: “มีอะไรเกิดขึ้นแล้ว?”

เก็บเหตุการณ์ไว้ให้หลายระบบนำไปใช้และอ่านย้อนหลังได้

RabbitMQ

02

เปรียบเหมือน: ศูนย์คัดแยกพัสดุ

ตอบคำถาม: “ข้อความนี้ควรส่งไปที่ไหน?”

คัดแยกข้อความตามกฎแล้วส่งเข้า Queue ที่เหมาะสม

BullMQ

03

เปรียบเหมือน: กระดานมอบหมายงาน

ตอบคำถาม: “มีงานอะไรที่ Worker ต้องทำ?”

จัดคิวงานเบื้องหลัง พร้อม Retry, Delay และติดตามสถานะ

Kafka เน้น “เหตุการณ์” — RabbitMQ เน้น “การส่งข้อความ” — BullMQ เน้น “การทำงานให้เสร็จ”
Workload Classification

ก่อนเลือกเครื่องมือ ต้องแยกสิ่งที่กำลังส่งให้ชัดเจน

Event

ความหมาย: สิ่งที่เกิดขึ้นแล้ว

OrderCreated PaymentCompleted

ผู้ส่งไม่สั่งว่าใครต้องทำอะไร

Message

ความหมาย: ข้อมูลที่ส่งระหว่างระบบ

CustomerData OrderPayload

เป็นคำกลางที่อาจหมายถึง Event หรือ Command

Command

ความหมาย: คำสั่งให้ผู้รับทำบางอย่าง

ReserveInventory ProcessPayment

โดยทั่วไปควรมีผู้รับผิดชอบชัดเจน

Job

ความหมาย: งานที่ต้องทำให้เสร็จ

GeneratePDF SendEmail

มักต้องติดตามสถานะ Retry และผลลัพธ์

คำถามแรกไม่ใช่ “จะใช้ Kafka หรือ RabbitMQ?” แต่คือ “สิ่งที่กำลังส่งมีความหมายว่าอะไร?”
E-commerce Example

เหตุการณ์เดียวกัน แต่แต่ละเครื่องมือมองต่างกัน

Kafka: กระจาย Event

OrderCreated
Payment
Inventory
Analytics
Fraud

แต่ละระบบอ่าน Event เดียวกันอย่างอิสระ

RabbitMQ: Route Message

Order Exchange
Payment Queue
Stock Queue
TH Warehouse
Notify Queue

Exchange ส่งข้อความเข้า Queue ตามกฎ

BullMQ: Execute Job

Background Jobs
Send Email
Create PDF
Export File
Call API

Worker รับงานไปทำ พร้อม Retry เมื่อผิดพลาด

Executive Comparison

เปรียบเทียบภาพรวมสำหรับผู้ตัดสินใจ

หัวข้อ Apache Kafka RabbitMQ BullMQ
ประเภทหลัก Event Streaming Platform Message Broker Job Queue
จุดเด่น เก็บและกระจาย Event Routing ข้อความ บริหาร Background Job
อ่านย้อนหลัง เด่นมาก ไม่ใช่จุดเด่น ไม่ใช่เป้าหมายหลัก
Routing ซับซ้อน ระดับ Topic/Key เด่นมาก ระดับ Queue/Job
Retry และ Job State ต้องออกแบบเพิ่ม Ack/Nack และ Dead Letter มี Attempts/Backoff ในตัว
Technology Fit หลายภาษา หลายระบบ หลายภาษา หลาย Protocol Node.js/TypeScript และ Redis
ความซับซ้อนเริ่มต้น สูง ปานกลาง ต่ำถึงปานกลาง
Apache Kafka

เหมาะเมื่อ Event คือสินทรัพย์ข้อมูลขององค์กร

แนวคิดสำคัญ

  • ข้อมูลถูกบันทึกใน Topic
  • Topic แบ่งเป็น Partition
  • Consumer จดจำตำแหน่งด้วย Offset
  • Consumer Group แบ่งงานหรืออ่านข้อมูลแยกกัน
  • ข้อมูลเก็บตาม Retention Policy

Use Case ที่เหมาะ

  • Enterprise Event Backbone
  • Customer Activity Stream
  • Transaction Event
  • Change Data Capture
  • Data Lake และ Analytics Pipeline
  • Audit Trail และ Event Sourcing

ข้อควรระวัง

  • Infrastructure และ Operation ซับซ้อน
  • รับประกันลำดับภายใน Partition
  • ต้องออกแบบ Partition Key ให้เหมาะสม
  • Retry และ Dead Letter ต้องกำหนดมาตรฐาน
  • ต้องบริหาร Schema Compatibility

ไม่ควรใช้เพียงเพราะ “มีอยู่แล้ว”

  • ส่งอีเมลเพียงหนึ่งฉบับ
  • สร้าง PDF เบื้องหลัง
  • Resize รูปภาพ
  • งานที่ต้องติดตาม Progress ราย Job
RabbitMQ

เหมาะเมื่อหัวใจของปัญหาคือการส่งและคัดแยกข้อความ

วิธีทำงาน

Producer
→
Exchange
→
Queue
→
Consumer

Exchange ใช้ Routing Key และ Binding เพื่อส่งข้อความไปยัง Queue ที่เหมาะสม

จุดแข็ง

  • Routing ยืดหยุ่นและเข้าใจง่าย
  • รองรับ Direct, Topic, Fanout และ Headers
  • รองรับ Acknowledgement
  • รองรับ Dead Letter
  • เหมาะกับ Command และ Work Queue

Use Case ที่เหมาะ

  • Payment และ Order Processing
  • Routing ตามประเทศหรือประเภทงาน
  • Command ระหว่าง Microservices
  • กระจายงานไปยัง Worker
  • เชื่อมระบบหลายภาษา

ข้อควรระวัง

  • Queue ปกติไม่ใช่ Event History
  • ต้องออกแบบ Retry ไม่ให้วนไม่สิ้นสุด
  • ต้องจัดการ Poison Message
  • Queue ที่ค้างมากอาจใช้ทรัพยากรสูง
BullMQ

เหมาะกับ Background Job ของ Node.js Application

สถานะของ Job

Waiting
→
Active
→
Completed
Failed
→
Retry / Backoff

จุดแข็ง

  • เริ่มต้นได้เร็วใน Node.js/TypeScript
  • รองรับ Retry และ Backoff
  • รองรับ Delayed Job และ Priority
  • ควบคุม Concurrency ได้
  • รองรับ Rate Limiting
  • ติดตามสถานะและ Progress ของ Job ได้

Use Case ที่เหมาะ

  • ส่ง Email หรือ Notification
  • สร้าง PDF และ Report
  • Import/Export ไฟล์
  • Resize รูปภาพ
  • เรียก External API ที่จำกัด Request

ข้อควรระวัง

  • Redis ต้องพร้อมสำหรับ Production
  • ต้องวางแผน Persistence และ Memory
  • ไม่ใช่ Enterprise Event History
  • ไม่ควรเก็บ Completed Job โดยไม่จำกัด
  • Job ต้องรองรับการทำซ้ำอย่างปลอดภัย
Existing Platform Strategy

ถ้าลูกค้ามีเครื่องมืออยู่แล้ว ควรตัดสินใจอย่างไร

มี Kafka อยู่แล้ว

ใช้ต่อเมื่อ:

  • งานเป็น Business Event
  • ต้อง Replay หรือมีหลาย Consumer
  • ต้องส่งข้อมูลไป Analytics

พิจารณาตัวอื่นเมื่อ:

  • เป็น Background Job แบบเฉพาะทาง
  • ต้องติดตามสถานะราย Job

มี RabbitMQ อยู่แล้ว

ใช้ต่อเมื่อ:

  • งานเป็น Message หรือ Command
  • Routing ปัจจุบันตอบโจทย์
  • ไม่ต้องอ่านประวัติย้อนหลัง

พิจารณา Kafka เมื่อ:

  • ต้องสร้าง Event Backbone
  • ต้องทำ Data Pipeline

มี BullMQ/Redis อยู่แล้ว

ใช้ต่อเมื่อ:

  • เป็นงานภายใน Node.js
  • เน้น Retry, Delay หรือ Rate Limit
  • Redis มี HA และ Monitoring

พิจารณาตัวอื่นเมื่อ:

  • เชื่อมหลาย Domain หรือหลายภาษา
  • ต้องเก็บและ Replay Event
“มีเครื่องมืออยู่แล้ว” เป็นข้อได้เปรียบด้านต้นทุน แต่ไม่ใช่เหตุผลเพียงข้อเดียวในการเลือก
Greenfield Decision

ถ้ายังไม่มีเครื่องมือ ให้เริ่มจาก Decision Tree

ต้องเก็บ Event, อ่านย้อนหลัง หรือให้หลายระบบอ่านข้อมูลเดียวกันหรือไม่?
→
ใช่: พิจารณา Apache Kafka
ต้อง Routing ข้อความตามประเภท ประเทศ หรือปลายทางหรือไม่?
→
ใช่: พิจารณา RabbitMQ
เป็น Background Job ที่ต้อง Retry, Delay, Priority หรือ Progress หรือไม่?
→
ใช่: พิจารณา BullMQ
มีหลาย Use Case ที่มีธรรมชาติต่างกันอย่างชัดเจนหรือไม่?
→
ใช่: อาจใช้ร่วมกัน โดยแบ่งหน้าที่ชัดเจน
Data Lifetime Routing Replay Ordering Peak Load Team Skills Operating Cost
Hybrid Architecture

ไม่จำเป็นต้องเลือกเพียงตัวเดียว

Order Service
→
Kafka: OrderCreated
Inventory Service
Analytics Service
Fraud Service
Notification Service
BullMQ
→
Email Worker
SMS Worker

Kafka

ประกาศ Business Event ให้หลายระบบรับรู้

BullMQ

บริหารงานส่ง Email/SMS พร้อม Retry และ Rate Limit

ขอบเขตที่ชัดเจน

Event ระดับองค์กรแยกจากงานภายใน Service

Event บอกว่า “เกิดอะไรขึ้นแล้ว” — Command บอกว่า “ต้องการให้ใครทำอะไร” — Job ติดตามว่า “งานเสร็จหรือยัง”
Production Readiness

ไม่ว่าจะเลือกตัวไหน สิ่งเหล่านี้ต้องออกแบบเสมอ

Idempotency

ข้อความเดิมเข้าซ้ำได้ แต่ต้องไม่เกิดผลทางธุรกิจซ้ำ

เช่น ห้ามตัดเงินหรือออก Invoice ซ้ำ

Retry Policy

กำหนดจำนวนครั้ง ระยะห่าง และ Error ที่ควร Retry

Dead Letter

แยกงานที่ล้มเหลวซ้ำออกมาตรวจสอบและ Reprocess

Observability

ติดตาม Queue Depth, Error Rate, Job Age และ Consumer Lag

Schema Governance

กำหนดรูปแบบข้อมูล Version และ Compatibility

Security

Authentication, Authorization, Encryption และ Audit Log

รับ Message
→
ตรวจ Idempotency Key
→
ประมวลผล
→
บันทึกผล
Weighted Decision

ตัดสินใจแบบมืออาชีพด้วย Weighted Scoring

เกณฑ์ น้ำหนักตัวอย่าง Kafka RabbitMQ BullMQ
เก็บและ Replay Event 5 5 2 1
Routing ซับซ้อน 4 2 5 2
Background Job 4 2 4 5
Data Pipeline 5 5 2 1
Delayed/Scheduled Job 3 2 3 5
เชื่อมหลายระบบและหลายภาษา 4 5 5 3
ใช้ Infrastructure เดิมได้ 5 ประเมิน ประเมิน ประเมิน
ทีมสามารถดูแลได้ 5 ประเมิน ประเมิน ประเมิน
คะแนนรวม = ผลรวมของ “น้ำหนักธุรกิจ × คะแนนเครื่องมือ”
Validation & Delivery

อย่าตัดสินจาก Benchmark บนกระดาษเพียงอย่างเดียว

PoC ควรทดสอบ

  • Normal Load และ Peak Load
  • Consumer หรือ Worker ล่ม
  • Broker หรือ Redis Node ล่ม
  • Network ขาดช่วง
  • Message ซ้ำหรือผิดรูปแบบ
  • Poison Message และ Dead Letter
  • Queue Backlog และ Consumer Lag
  • Recovery และ Replay

ผลลัพธ์ที่ควรได้รับ

  • Architecture Diagram
  • Capacity Estimate
  • Performance และ Failure Test
  • Recovery Procedure
  • Monitoring Dashboard
  • Security Model
  • Operational Runbook
  • Cost Estimate และ Recommendation
Requirement Workshop
→
Architecture & Scoring
→
Proof of Concept
→
Production Design
Final Recommendation

เลือกเครื่องมือที่ง่ายที่สุด ซึ่งตอบ Requirement ได้ครบ

Kafka

เลือกเมื่อ Event เป็นสินทรัพย์ข้อมูล

ต้องเก็บย้อนหลัง มีหลาย Consumer ต้อง Replay หรือส่งข้อมูลไป Data Platform

RabbitMQ

เลือกเมื่อหัวใจคือ Message และ Routing

ต้องส่ง Command ไปยังปลายทางที่เหมาะสม พร้อม Acknowledgement และ Dead Letter

BullMQ

เลือกเมื่อหัวใจคือ Background Job

เหมาะกับ Node.js/TypeScript ที่ต้องการ Retry, Delay, Priority, Rate Limit และ Job State

Hybrid

ใช้ร่วมกันเมื่อปัญหามีหลายประเภท

แบ่ง Event, Command และ Job ให้ชัดเจน พร้อมกำหนด Ownership และมาตรฐานการดูแล

การตัดสินใจที่ดีต้องสมดุลระหว่าง Use Case, Reliability, ความเชี่ยวชาญของทีม ต้นทุนรวม และความสามารถในการเติบโต
← → เปลี่ยนสไลด์ · F เต็มหน้าจอ · N เปิด Notes