น่าสนใจดีกับ 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 เสนอออกมา

ตอนนี้อยู่ในขั้นตอนการพูดคุยในประเด็นต่าง ๆ เท่านั้น

แนวคิดหลัก ๆ คือ การเพิ่มสิ่งที่เรียกว่า Share group เข้ามา
ให้มีทางเลือกมากขึ้นสำหรับฝั่งของ consumer ในการใช้งานรูปแบบต่าง ๆ
ฝั่ง producer สามารถส่ง message เข้ามายัง topic โดยไม่ต้องสนใจว่าจะเข้าไปยัง partition ไหน
เพราะว่าฝั่ง consumer ที่อยู่ใน share group เดียวกัน
จะมองเห็น message ในมุมมองของ Queue แบบปกติเลย
แสดงดังรูป

แต่ดูเหมือนจะเป็นคอขวดไหม ตรงนี้ก็น่าคิด !!
กับอีกอย่าง ไปใช้งานอย่างอื่นที่เก่งเรื่อง queue ดีกว่าไหม เช่น RabbitMQ เป็นต้น

ลองศึกษากันดูครับ รู้ไว้ไม่เสียหาย
เป็นอีกหนึ่งแนวคิดที่น่าสนใจ

Reference Websites