![](http://www.somkiat.cc/wp-content/uploads/2023/06/queue-kafka-1024x576.jpeg)
น่าสนใจดีกับ KIP-932: Queues for Kafka
KIP (Kafka Improvement Proposal) นี้ทำการใช้งาน queue ใน Kafka นั่นเอง
โดยปกติถ้าต้องจัดการ message ที่เข้า Topic ให้ตามรูปแบบของ Queue คือ
- FIFO (First In First Out)
- แต่ละ message ที่เข้ามาต้องทำงานเพียงครั้งเดียว
ที่สำคัญก็ยังต้อง scale ได้ง่าย
ใน Kafka นั้นมักจะทำดังนี้ ยกตัวอย่างเช่น
- ให้ topic มี partition เดียวพอ เพราะว่าถ้ามีหลาย ๆ partition จะไม่การันตีการทำงานตามลำดับข้าม partition ได้
- แต่ละ consumer ต้องกำหนด consumer group เข้ามา
ถ้าจะ scale ต้องทำอย่างไร ?
จำเป็นต้องมีหลาย ๆ partition ก็ต้องทำการเพิ่ม message key
เพื่อทำการ route message ที่มี message key เดียวกัน
ไปยัง partition เดียวกัน นั่นคือเข้าทำงานที่ consumer หรือ consumer group เดียวกัน
เพื่อการันตีว่า จะต้องทำงานเรียงลำดับกัน แซงคิวกันไม่ได้
ซึ่ง Kafka จะทำงานแบบนี้ เรียกว่า partition-based ordering
ผลที่ตามมาคือ มีบาง partition จะมี message เข้ามาเยอะเกินไป
จะเรียกว่า over-partition
ดังนั้นจึงคิดว่า น่าจะมีรูปแบบอื่นที่เหมาะสม จึงเกิดแนวคิดของ Queue for Kafka เสนอออกมา
ตอนนี้อยู่ในขั้นตอนการพูดคุยในประเด็นต่าง ๆ เท่านั้น
![](http://www.somkiat.cc/wp-content/uploads/2023/06/Screenshot-2566-06-27-at-12.12.18-1024x227.png)
แนวคิดหลัก ๆ คือ การเพิ่มสิ่งที่เรียกว่า Share group เข้ามา
ให้มีทางเลือกมากขึ้นสำหรับฝั่งของ consumer ในการใช้งานรูปแบบต่าง ๆ
ฝั่ง producer สามารถส่ง message เข้ามายัง topic โดยไม่ต้องสนใจว่าจะเข้าไปยัง partition ไหน
เพราะว่าฝั่ง consumer ที่อยู่ใน share group เดียวกัน
จะมองเห็น message ในมุมมองของ Queue แบบปกติเลย
แสดงดังรูป
![](http://www.somkiat.cc/wp-content/uploads/2023/06/kafka-share-group-1024x692.png)
แต่ดูเหมือนจะเป็นคอขวดไหม ตรงนี้ก็น่าคิด !!
กับอีกอย่าง ไปใช้งานอย่างอื่นที่เก่งเรื่อง queue ดีกว่าไหม เช่น RabbitMQ เป็นต้น
ลองศึกษากันดูครับ รู้ไว้ไม่เสียหาย
เป็นอีกหนึ่งแนวคิดที่น่าสนใจ
Reference Websites