Apache Kafka แก้ปัญหาอะไรบ้าง
Apache Kafka คือ เป็นระบบเหตุการณ์แบบกระจาย ทำงานแบบเรียล์ไทม Distributed Event Streaming Platform สำหรับรับ-ส่ง จัดเก็บ และประมวลผลข้อมูลต่างๆ ระหว่างระบบต่าง ๆ
Apache Kafka ในสถาปัตยกรรมซอฟต์แวร์ แก้ปัญหาสำคัญเรื่อง การสื่อสารและการไหลของข้อมูลระหว่างระบบจำนวนมาก โดยเฉพาะระบบที่ต้องรองรับ Real-time และ Scale สูง ได้แก่ Tight Coupling, Traffic สูง, Real-time Data มีความต่อเนื่องกัน, Service ล่มแล้วข้อมูลหาย, การทำงานไม่พร้อมกัน, Data Pipeline ข้อมูลชุดเดียวกันไปใช้ได้หลายระบบ, Scalability การขยายระบบ
Apache Kafka มีแนวคิดหลักว่า“อย่าให้ระบบต่าง ๆ เรียกหากันโดยตรงทุกครั้ง แต่ให้สื่อสารกันผ่าน Event ที่อยู่ในศูนย์กลาง Event Streaming”
กล่าวง่ายๆ คือ ทำหน้าที่เป็นตัวกลางระหว่างระบบ โดยการทำงานจะทำงานแบบจับเหตุการณ์ แบบ Real Time ซึ่งต่อการความต่อเนื่อง ป้องกันข้อมูลศูนย์หายระหว่างการสื่อสารระหว่างระบบ
องค์ประกอบของ Apache Kafka
Apache Kafka เป็นแพลตฟอร์มสำหรับจัดการและส่งต่อข้อมูลในรูปแบบ Event Streaming โดยออกแบบมาเพื่อให้ระบบซอฟต์แวร์หลายระบบสามารถแลกเปลี่ยนข้อมูลกันได้อย่างต่อเนื่อง รองรับข้อมูลจำนวนมาก และสามารถประมวลผลข้อมูลแบบ Real-time ได้ แนวคิดสำคัญของ Kafka คือการแยกผู้ส่งข้อมูลออกจากผู้รับข้อมูล โดยมี Kafka เป็นตัวกลางในการจัดเก็บและกระจาย Event
- Producer ซึ่งทำหน้าที่สร้างและส่งข้อมูลหรือ Event เข้าสู่ Kafka ตัวอย่างเช่น เมื่อผู้ใช้สมัครสมาชิก ระบบสามารถสร้าง Event ชื่อ
UserRegisteredหรือเมื่อมีการสั่งซื้อสินค้า ระบบสามารถสร้าง EventOrderCreatedจากนั้น Producer จะส่ง Event เหล่านี้เข้าสู่ Kafka โดยไม่จำเป็นต้องรู้ว่ามีระบบใดนำข้อมูลไปใช้งานต่อ - Broker ซึ่งเปรียบเสมือนเซิร์ฟเวอร์ที่รับ จัดเก็บ และให้บริการข้อมูลที่อยู่ภายใน Kafka ในระบบขนาดใหญ่จะมี Broker หลายเครื่องรวมกันเป็น Kafka Cluster เพื่อรองรับปริมาณข้อมูลสูง เพิ่มประสิทธิภาพ และช่วยให้ระบบสามารถทำงานต่อได้เมื่อเกิดปัญหากับเครื่องใดเครื่องหนึ่ง
- Topic ซึ่งเปรียบเสมือนช่องทางหรือหมวดหมู่สำหรับ Event เช่น
ordersสำหรับข้อมูลคำสั่งซื้อpaymentsสำหรับข้อมูลการชำระเงิน หรือai.questionsสำหรับคำถามที่ส่งเข้าสู่ระบบ AI การแบ่งข้อมูลด้วย Topic ช่วยให้ระบบสามารถจัดการและนำข้อมูลแต่ละประเภทไปใช้ได้อย่างเป็นระบบ - Partition ซึ่งเป็นกลไกสำคัญที่ทำให้ Kafka สามารถรองรับข้อมูลจำนวนมากและประมวลผลแบบขนานได้ ตัวอย่างเช่น Topic
ordersอาจมี 4 Partition เมื่อมีข้อมูลจำนวนมาก Consumer หลายตัวสามารถรับผิดชอบ Partition ที่แตกต่างกันและทำงานพร้อมกันได้ ส่งผลให้ระบบสามารถเพิ่มความสามารถในการประมวลผลได้ตามปริมาณงาน - Offset ซึ่งใช้ระบุตำแหน่งของ Event เช่น Offset 0, 1, 2 และ 3 Offset ช่วยให้ Consumer สามารถทราบว่าตนเองอ่านข้อมูลไปถึงตำแหน่งใดแล้ว และสามารถกลับมาอ่านข้อมูลต่อจากตำแหน่งเดิมได้ตามข้อมูลที่ยังคงถูกเก็บไว้ใน Kafka
- Consumer ซึ่งทำหน้าที่อ่าน Event จาก Topic แล้วนำไปประมวลผลต่อ เช่น Consumer ของระบบชำระเงินอาจรับ
OrderCreatedแล้วดำเนินการตรวจสอบการชำระเงิน ขณะที่ Consumer ของระบบวิเคราะห์ข้อมูลอาจนำ Event เดียวกันไปคำนวณสถิติหรือสร้างรายงาน
- Consumer Group โดย Consumer ภายในกลุ่มจะช่วยกันประมวลผล Partition ทำให้สามารถเพิ่มจำนวน Worker เพื่อรองรับข้อมูลที่เพิ่มขึ้นได้ แนวคิดนี้เป็นส่วนสำคัญของการทำ Scalability ในระบบ Kafka
- Replication ซึ่งเป็นการทำสำเนาข้อมูลของ Partition ไปยัง Broker อื่น เพื่อเพิ่มความทนทานของระบบ หาก Broker ที่ถือข้อมูลหลักเกิดปัญหา Kafka สามารถใช้ Replica ที่มีอยู่ใน Broker อื่นเพื่อช่วยให้ระบบดำเนินงานต่อได้ ทั้งนี้รายละเอียดการเลือกผู้นำและการทำงานของ Replica จะขึ้นอยู่กับการตั้งค่าของ Cluster
- สำหรับ Kafka รุ่นใหม่ การจัดการ Metadata และหน้าที่ของ Controller ใช้สถาปัตยกรรม KRaft (Kafka Raft) ซึ่งเป็นกลไกภายใน Kafka สำหรับบริหารจัดการข้อมูล Metadata และสถานะของ Cluster โดย Kafka รุ่นใหม่ไม่จำเป็นต้องพึ่งพา ZooKeeper ในสถาปัตยกรรมแบบ KRaft
ข้อสรุปต่างๆของ Apache Kafka
- Event Streaming รับ–ส่งข้อมูลแบบต่อเนื่องได้ รองรับการทำงานแบบ Real-time ของข้อมูล
- Event Backbone เป็นศูนย์กลางการส่ง Event ระหว่างระบบ ทำให้ระบบต่าง ๆ สื่อสารกันผ่าน Kafka
- Tight Coupling ลดการเชื่อมต่อโดยตรงระหว่าง Service ต่างๆ ทำให้เกิด Loose Coupling น้อยลง
- Asynchronous Processing ในแต่ละ Producer สามารถส่งงานแล้วไม่ต้องรอ Consumer จนทำงานเสร็จ ซึ่งเหมาะกับงานหลังบ้าน Background และงานที่ใช้เวลานาน
- รองรับข้อมูลจำนวนมาก โดยใช้ Partition ในการแบ่งส่วนข้อมูลออกหลาย Partition และ Consumer Group สามารถกระจายงานไปหลาย Worker ได้
- Scalability เพิ่ม Broker, Partition หรือ Consumer เพื่อรองรับโหลดที่เพิ่มขึ้น
- Resilience การทำงานแบบ Event ต่างๆ สามารถถูกเก็บไว้ตามนโยบาย Retention Consumer สามารถกลับมาอ่าน Event ที่ยังคงอยู่ได้
- Data Pipeline ส่งข้อมูลจาก Application ไปยัง Database, Data Lake, Analytics หรือระบบอื่น ๆ
- Microservices ให้ Microservices แลกเปลี่ยน Event โดยไม่ต้องเรียกกันโดยตรงทุกครั้ง
- Real-time Analytics ส่งข้อมูลให้ระบบ Analytics และ Monitoring ได้อย่างต่อเนื่อง

ความคิดเห็น
แสดงความคิดเห็น