apache kafka

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

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 หรือ หลายคนก็ได้

kafka topickafka consumer

จะเห็นได้ว่าการทำงานของแต่ละ 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

Leave a Reply