Kafka คืออะไร เกี่ยวอะไรกับ Apache
Kafka คือ distributed message queue โดยเริ่มแรก Kafka ถูกสร้างขึ้นโดย LinkedIn เป็น open sourced ในช่วงต้นปี 2011 และถูกเผยแพร่ต่ออย่างช้าๆ ผ่านทาง Apache Incubator ตั้งแต่ปี 2012 จากนั้นจึงได้แยกบริษัทออกมาจาก LinkedIn ก่อตั้งเป็น บริษัท Confluent เพื่อพัฒนา Kafka โดยเฉพาะ
Kafka เป็น platform ที่ใช้กระจายข้อความ (message) โดยมีหลักการหลักๆ 3 ข้อ
- ทำการเผยแพร่ข้อมูลอย่างรวดเร็วทีละ records ในรูปแบบ message queue หรือ ระบบ messaging
- ทดทานต่อความผิดปกติของ environment รอบข้าง ด้วยระบบ cluster ไม่ล่มง่ายๆ
- ทำงานตามการร้องขอของฝั่ง Client
ข้อดีของ Kafka
ทำข้อมูลแบบ real-time pipline ซึ่งมีความเสถียรระหว่างตัวระบบ และ applications ทำการแปลงข้อมูลแบบ real-time streaming application ไปเป็นแบบ streams data
Kafka Concepts
- ทำงานเป็น cluster ได้ทั้งหนึ่งหรือหลาย servers
- Kafka cluster เก็บชุดข้อมูลลงในหมวดหมู่ที่เรียกว่า “topics”
- ข้อมูลแต่ละ record จะประกอบด้วย key, value และ timestamp
Kafka Core API
- Producer API ใช้สำหรับส่งข้อมูลเข้าถังของ kafka แต่ละ topics
- Consumer API ใช้สำหรับให้ user เข้ามาดึงข้อมูลแต่ละ topics โดยจะส่งข้อมูลกลับไปทีละ records
- Streams API สำหรับให้ application ทำการดึงข้อมูล (consuming) จาก topics และ ส่งข้อมูลกลับมา (producing)
- Connector API ใช้จัดการเชื่อต่อของ producers และ consumers ที่ต่อระหว่าง Kafka topics และ application ภายนอก
Producers
Producers ทำหน้าที่ส่งข้อมูลให้กับ topics ที่กำหนดไว้ และก็ต้องคอยแจกเลือก partition ภายใน topic เองด้วย ซึ่งจะปกติทำงานเป็นแบบ round-robin เพื่อความสมดุล หรือ อาจจะใช้ function อื่นในการกระจายก็ได้
Consumers
Consumers จะแทนตัวเองด้วย consumer group name โดยแต่ละ record ที่อยู่ใน topic จะถูกส่งให้เพียง 1 consumer ภายใต้ consumer group เท่านั้น เพราะฉะนั้นเราสามารถแบ่ง process ของ consumer ออกเป็นหลายเครื่องเพื่อช่วยในการทำงานได้ แต่ถ้า consumer groups ต่างกันทั้งหมด record ทั้งหมดจะถูก broadcast ให้กับ consumer ทั้งหมดเช่นกัน
Topics
Topics คือ หมวดหมู่ หรือ ชื่อ group ของฐานข้อมูลที่จะเผยแพร่ โดยสามารถมีปลายทางได้หลายคน นั้นหมายถึงอาจจะมี cosumer ตั้งแต่ 0 หรือ หลายคนก็ได้
จะเห็นได้ว่าการทำงานของแต่ละ topics ฝั่ง producer ก็จะทยอยเพิ่ม record เข้าไปตาม sequence ส่วน Consumer แต่ละอันก็จะมี offset ของตัวเองที่จะค่อยเข้ามาดึงตาม sequence ของตนเอง
วิธีการ Install Kafka
1. ติดตั้งและตรวจสอบ Java
$ java -version
2. ดาวน์โหลด JDK
เลือก download ให้ตรงกับ java version ของ server
http://www.oracle.com/technetwork/java/javase/downloads/index.html
$ cd /go/to/download/path $ tar -zxf jdk-8u60-linux-x64.gz
ทำการย้าย path ของ kafka
$ su password: (type password of root user) $ mkdir /opt/jdk $ mv jdk-1.8.0_60 /opt/jdk/
3. ประกาศตัวแบบ environment
เพื่มตัวแปรลงใน file .bashrc ใน path home ของ user
export JAVA_HOME =/usr/jdk/jdk-1.8.0_60 export PATH=$PATH:$JAVA_HOME/bin
รัน bash profile เพื่อให้ค่าตัวแปรมีผลทันที
$ source ~/.bashrc
4. ดาวน์โหลด ZooKeeper
จาก http://zookeeper.apache.org/releases.html และวาง file ลงบน server
$ cd opt/ $ tar -zxf zookeeper-3.4.6.tar.gz $ cd zookeeper-3.4.6 $ mkdir data
5. สร้าง file configure
$ vi conf/zoo.cfg tickTime=2000 dataDir=/path/to/zookeeper/data clientPort=2181 initLimit=5 syncLimit=2
6. start zookeeper server
$ bin/zkServer.sh start
$ JMX enabled by default $ Using config: /Users/../zookeeper-3.4.6/bin/../conf/zoo.cfg $ Starting zookeeper ... STARTE
7. start cli
$ bin/zkCli.sh
Connecting to localhost:2181 ................ ................ ................ Welcome to ZooKeeper! ................ ................ WATCHER:: WatchedEvent state:SyncConnected type: None path:null [zk: localhost:2181(CONNECTED) 0]
8. Stop Zookeeper server
$ bin/zkServer.sh stop
9.ดาวน์โหลด Kafka
http://www.apache.org/dyn/closer.cgi?path=/kafka/0.9.0.0/kafka_2.11-0.9.0.0.tgz.html และวาง file ลง server
$ cd opt/ $ tar -zxf kafka_2.11.0.9.0.0 tar.gz $ cd kafka_2.11.0.9.0.0
10. Start server
$ bin/kaka-server-start.sh config/server.properties
$ bin/kaka-server-start.sh config/server.properties [2016-01-02 15:37:30,410] INFO KafkaConfig values: request.timeout.ms = 30000 log.roll.hours = 168 inter.broker.protocol.version = 0.9.0.X log.preallocate = false security.inter.broker.protocol = PLAINTEXT ……………………………………………. …………………………………………….
11. Stop server
$ bin/kaka-server-stop.sh config/server.properties
สรุปว่า Kafka คือ
Kafka คือ messaging queue system ที่รองรับข้อมูลความเร็วสูง ในปริมาณมาก
Kafka สามารถนำมาเป็นเครื่องมือในการกระจาย broadcast และลดความซับซ้อนของ data pipeline
Kafka เป็น open source ที่องค์กรขนาดใหญ่ให้การยอมรับและใช้งานในปัจจุบัน
Author: Suphakit Annoppornchai
Credit: https://saixiii.com,https://kafka.apache.org