Apache Kafka ฉบับผู้เริ่มต้น #1: Hello Apache Kafka

Neng Liangpornrattana
LINE Developers Thailand
2 min readJun 18, 2018

Apache Kafka คืออะไร?

Apache Kafka คือ distributed message queue อาจจะงงนะครับ คิดซะว่าเราเป็นพ่อครัวแม่ครัว ยืนผัดข้าวผัดอยู่ ละมีลูกค้าหิวโซมาสัก 20 คนมาสั่งข้าวผัดหมู ข้าวผัดแหนม เอาไข่เจียว ไข่ดาวสุกบ้างไม่สุกบ้าง ถ้าเป็นแม่ครัวอย่างมากก็ตวาดไป ผัดอยู่ รอก่อนเว้ย มีกระทะเดียว อาจจะทำให้สถานการณ์ดีขึ้นบ้าง แต่ในโลกของการรับส่งข้อมูลมันไม่ได้ควบคุมง่ายขนาดนั้น ถ้าเราเป็นลูกค้าอยู่ร้านข้าวผัดเราก็คงหนีไปกินร้านอื่น แต่ถ้าเป็นโลกของการรับส่งข้อมูล คุมไม่ดี ข้อมูลหาย/ขาด/เกิน หรือถ้าเกี่ยวข้องกับตัวเลขการเงิน ยิ่งร้ายแรง

วิธีแก้ปัญหาอย่างง่ายๆก็คือต่อคิว.. แต่ความเจ๋งของ Apache Kafka คือ มันมีคุณสมบัติ distributed ขยายความง่ายๆ คือ มีแม่ครัวหลายคน มีเตาหลายเตาหลายกระทะนั่นเองงงง

โดยเริ่มแรก Kafka ถูกสร้างขึ้นโดย LinkedIn เป็น open source project ด้วยภาษา Java และ Scalaในช่วงต้นปี 2011 และถูกเผยแพร่ต่อ ผ่านทาง Apache Incubator ตั้งแต่ปี 2012 จากนั้นจึงได้แยกบริษัทออกมาจาก LinkedIn ก่อตั้งเป็น บริษัท Confluent เพื่อพัฒนา Kafka โดยเฉพาะ โดยชื่อ Kafka มาจากนักเขียนนาม Franz Kafka โดยเลือกชื่อ Kafka เพราะมันถูก optimize สำหรับการเขียน เหมือนกับงานของ Franz Kafka

ทำไมต้อง Apache Kafka?

ลองนึกดูว่าถ้าเรามีระบบสองตัว ให้คุยกันระหว่างสองตัวนี้ ก็ดูตรงไปตรงมา แต่ถ้าหากมีมากขึ้น มันก็ต้องทำการเชื่อมต่อในแต่ละระบบมากขึ้น

ดังนั้น Apache Kafka จึงถูกใช้เป็นตัวกลางในการเชื่อมต่อ เพื่อช่วยแยกการสื่อสารระหว่างระบบแต่ละตัว ไม่ว่าระบบอะไรต้องการข้อมูลจากไหน ก็มาเรียกใช้ใน Apache Kafka ตัวนี้ตัวเดียว

คุณสมบัติที่น่าสนใจของ Apache Kafka

  • มีการกระจาย (distributed) การเก็บข้อมูลใน clusters
  • มีความยืดหยุ่น (resilient architecture) เช่น มีการทำสำเนาข้อมูลซ้ำ (replication)
  • มีการทนต่อความเสียหาย (fault tolerent)
  • มีความสามารถในการขยายเชิงขนาน หรือ เพิ่มเครื่อง (node) ใน cluster ได้ (horizontal scalability)
  • มีประสิทธิภาพด้านความเร็ว (latency น้อยกว่า 10ms)
  • มีระบบที่ใหญ่ๆ ที่ใช้ Apache Kafka อยู่มาก เช่น Linkedin, Netflix, AirBnB, Yahoo, Wallmart หรือ LINE สวัสดีวันจันทร์นั่นเองของเรานั่นเองงง

Apache Kafka ทำอะไรได้บ้าง

  • ระบบส่งต่อข้อความ (messaging System)
  • เครื่องมือบันทึกกิจกรรม (activity Tracking)
  • รวบรวมเก็บ Log (log aggregation)
  • การประมวลผลแบบต่อเนื่องของข้อมูล (stream processing)

ระบบนิเวศน์ (Ecosystem) ของ Apache Kafka

ก่อนจะเริ่มลงรายละเอียด ต้องรู้ก่อนว่ามีอะไรที่อยู่ในระบบนิเวศน์ของ Apache Kafka โดยหลักๆจะมีดังนี้

  1. Kafka
  2. Source systems
  3. Producer
  4. Target systems
  5. Consumer
  6. Zookeeper

ขาเข้า

เริ่มต้นจาก Kafka เลย ตัว Kafka เป็นแกนหลักของระบบ จากนั้นก็มี Source systems ซึ่งก็คือแหล่งที่มาของข้อมูล อาจจะเป็นจากฐานข้อมูลหรือ Logging จากนั้นก็มีสิ่งที่เราเรียกมันว่า Producer มาคั่นกลาง ระหว่างเรา… ไม่ใช่สิ ระหว่าง Source systems กับ Kafka ต่างหากโดยตัว Producer เองจะทำการดึงข้อมูลมาจาก Source systems แล้วเอาข้าไปใน Kafka

ขาออก (แต่ยังไม่เอาออก)

คราวนี้เริ่มที่ Target systems คือที่ๆ อยากได้ข้อมูลใน Kafka ซึ่งจะมีตัวคั่นตรงกลางระหว่าง Kafka กับ Target systems ซึ่งเราจะเรียกมันว่า Consumer โดยตัว Consumer นี้จะทำหน้าที่ดึงข้อมูลมาจาก Kafka แล้วส่งต่อไปยัง Target systems ต่างๆเช่น ดึงข้อมูลแล้วแก้ไขให้อยู่ในรูปแบบข้อมูลที่เหมาะสมแล้วส่งต่อไปยัง ElasticSearch หรือ HDFS เป็นต้น แต่อย่างที่ระบุไว้นะครับ พออ่านแล้ว จะไม่ได้เอาข้อมูลออก ยังคงเก็บไว้อยู่

สิ่งสุดท้าย คือผู้จัดการ Zookeeper ที่ทำหน้าที่บริหารจัดการว่าควรจะไปอ่านข้อมูลที่ replica ตัวไหนหรือ Consumer นี้ควรไปอ่านข้อมูลตรงไหนต่อ เป็นต้น ซึ่งตัวระบบนิเวศน์ของ Kafka หลักๆ จะมีเท่านี้แหละ

แต่มันยังไม่หมด มันมีส่วนขยายให้อีก เช่น

  • Kafka Streams ทำหน้าที่เปลี่ยนแปลงข้อมูลใน Kafka
  • Kafka Connect ทำหน้าที่แปลงข้อมูลจาก Source systems ไปยัง Target systems โดยที่เราไม่ต้องสร้าง producer และ consumer ขึ้นมาเอง
  • Confluent Platform ซึ่งเป็นชุดเครื่องมือเสริมเพื่อปรับปรุงประสิทธิภาพของการทำงานของ Apache Kafka ซึ่งมีทั้งแบบ Open source และแบบ Enterprise

คร่าวๆเริ่มต้นกันแค่นี้ก่อนละกัน ตอนต่อไป

นะครับ จะไปลงรายละเอียดมากขึ้นครับ

References

--

--

Neng Liangpornrattana
LINE Developers Thailand

A data plumber, basketballer, workout addicted, dog and cat lover