AWS Kinesis
Datasource แบ่งออกเป็น 2 แบบหลักๆคือ Batch และ Streaming Data
Streaming Data คือ data ที่ถูกสร้างจากหลายๆ data sources สร้างขึ้นอย่างต่อเนื่องและส่งมาอย่างต่อเนื่องในขนาดเล็กๆๆตลอดเวลา (Timeseries) เช่น
- Stock Prices
- IoT Sensor Data
- Game Data
- Geospatial data
- Purchases from online stores
- Social network data
Kinesis คือ Platform ตัวนึงที่ทําหน้าที่ในการรวบรวมข้อมูลเหล่านั้นมาเพื่อทําการวิเคราะห์ประมวลผลนั้นเอง
Kinesis แบ่งออกเป็น
- Kinesis Streams
แบ่งออกเป็น Producer คนที่เป็นส่งข้อมูล และ Consumer คือ server ที่นําไปประมวลผล และมี Kinesis streams เป็นคนคั่นตรงกลาง โดยคอยรับข้อมูลส่งไปมานั้นเอง

Kinesis โดย default จะเก็บข้อมูลไว้ใน Shard เพียง 24 ชั่วโมงเท่านั้นแต่ตั้งค่าได้จนถึง 7 วัน
โดย Shards มีคุณสมบัติคือ มันสามารถ Reads ได้ 5 transactions/second และ อ่านข้อมูลได้สูงสุดถึง 2MB/second ส่วน Write จะทําได้ 1,000 records/second
- Kinesis Firehose
ทีนี้พอมาเป็น Firehose เราไม่ต้องสนใจเรื่องของ Shard ละ เมื่อ producer (Datasource) เราส่งข้อมูลมาที่ Firehose มันจะสจัดการให้เราอัตโนมัติเลย โดยเมื่อมันทําการจัดการอัตโนมัติแล้วมันสามารถไปเก็บข้อมูลที่ S3 bucket ได้เลย

ซึ่งพอลง S3 bucket แล้ว แปลว่ามันสามารถที่จะนําไป analytic ได้อีกเยอะ เช่น elasticsearch หรือ copy data ไปที่ redshift อีกด้วย


- Kinesis Data Analytics
ส่วน Analytics จะแตกต่างออกไปคือ มันอนุญาติให้เราใช้ SQL ในการ query ข้อมูล เพื่อทําการ analyze streaming data นั้นเอง
Kinesis client library (KCL)
Kinesis client library (KCL) เป็น 1 ใน library ของ Kinesis (มี producer, consumer และก็ connector) ที่เราเอาไว้ทํา application เพื่อมา consume data และ จัดการ process data streams
ความสามารถที่มันทําได้คือ
- KCL จะทําให้มั่นใจว่า Shard ทุกตัวมี Record processor
- Record processor จะเป็นตัวที่นําข้อมูลของ Data Stream มาใช้งาน
- เช่น สมมุติเรามี 1 consumer (สมมุติเป็นเครื่อง EC2) และ Data streams มี 4 Shard ก็จะมี 4 record processor ทํางานบน consumer เดียว แต่ถ้าเรามี 2 consumer KCL จะทําหน้าที่กระจายโหลด (Load Balancing) ออกไปทั้งสอง 2 consumer นั้น
- และถ้าจํานวนของ Shard เพิ่มขึ้น KCL จะทําหน้าที่ในการเพิ่ม record processors บน consumer ของเรา เพื่อให้มั่นใจว่าทุก Shard ของเรามี record processor
- * เมื่อ Record processor เยอะขึ้น สิ่งที่ควรทําในการ Auto Scaling Group ออกไปคือการใช้ CPU Utilisation ไม่ใช่การใช้จํานวนของ Shard
แล้ว Kinesis Streams ต่างกับ Kinesis Firehose ยังไง?
อ่านมาถึงตรงนี้อาจจะ งงบ้าง เลยมาสรุปสั้นๆว่า
Kinesis Streams เมื่อเราใช้ Streams เราต้องจัดการ manually manage เองทั้งหมด ในเรื่องของ Shard และ Scale
วิธีการคือเราส่งข้อมูลด้วย Kinesis Producer Library, รับข้อมูลด้วย Kinesis Client Library และ ส่งข้อมูล (processed data) ไปที่ downstream ด้วย Kinesis Connector Library ซึ่งอาจจะเป็น S3, Redshift, DynamoDB etc.
แต่ในทางกลับกัน Kinesis Firehose จะ fully managed และ scale เอง โดยที่เราไม่ต้องจัดการใดๆ แต่ทางกลับกัน downstream ที่จะส่งไปให้ได้มีแค่ 2 ตัวคือ S3, Redshift or ElasticSearch (ต้องลง Kinesis Agent ไว้)
ทีนี้วิธีเลือกใช้ก็ง่ายๆเลยก็คือ ถ้าเราต้องการที่จะ customize data pipeline ของเรา ให้เราเลือกใช้ Kinesis Streams แต่ถ้าเราไม่ได้ต้องการ customize และรับได้ที่ downstream ของเราคือ S3,Redshift หรือ ElasticSearch ก็เลือก Kinesis Firehose