ไปเจอบทความของ ByteByteGo มาครับ เค้าวาดรูปอธิบายเหตุผลหนึ่งว่าทำไม Kafka ถึงเร็ว ออกมาให้เข้าใจง่ายดี เลยเอามาแปะให้ได้ลองอ่านกัน
เหตุผลหนึ่งที่ Kafka เค้าสามารถทำ low latency ตอนส่ง message ได้เนี่ย เค้าใช้การดำเนินการที่เรียกว่า “Zero-Copy” ครับ ถ้าดูจากรูปด้านบนจะมีอยู่ 2 แบบคือ แบบที่ไม่ได้ใช้ zero-copy กับแบบที่ใช้ zero-copy ซึ่งเราจะเห็นว่าแบบที่ 2 เนี่ย มันไม่ได้คัดลอกไฟล์เข้าไปที่ application buffer เลย ทุกอย่างทำอยู่ใน kernel context และส่งออกไปที่ network interface controller/card (NIC) ผ่านคำสั่ง sendfile
ถ้าใครสนใจเรื่อง Zero-Copy เพิ่มเติม ผมแนะนำให้ลองอ่านบทความด้านล่างนี้ครับ
เค้าเขียนโปรแกรมเล็กๆ มาทำ performance benchmark ให้เห็นไปเลยว่า sendfile
นี่มันเร็วจริงๆ นะ