- vừa được xem lúc

Real time analytics: Airflow + Kafka + Druid + Superset

0 0 96

Người đăng: Duy Nguyen

Theo Viblo Asia

Introduction

Blog này giới thiệu về cách thiết lập phân tích realtime mã nguồn mở. Chúng tôi sẽ sử dụng Kafka và Apache {Airflow, Superset, Druid}.

Việc có số liệu phân tích của bạn theo kiểu truyền trực tuyến cho phép bạn liên tục phân tích hành vi của khách hàng và hành động theo hành vi đó. Chung quy là mình cũng muốn test thử khả năng realtime của Druid mình đang nghiên cứu một vài solution realtime analytic chi tiết code có thể tham khảo tại repo Github

Trong bài viết này sử dụng Aiflow như một producer có nhiệm vụ gửi data đến kafka topic, dữ liệu phân tích được lưu trữ trong Druid và được hiển thị trực quan bằng Superset.

Kafka

Kafka là một hệ thống message theo cơ chế Pub-Sub. Nó cho phép các nhà sản xuất (gọi là producer) viết các message vào Kafka mà một, hoặc nhiều người tiêu dùng (gọi là consumer) có thể đọc, xử lý được những message đó. Các message được gửi tới Kafka theo Topic, các Topic giống như là các kênh lưu trữ message từ Producer gửi đến Kafka, người tiêu dùng (Consumer) đăng kí một hoặc nhiều Topic để tiêu thụ những message đó.

Kafka có thời gian lưu giữ, vì vậy nó sẽ lưu trữ message của bạn theo thời gian hoặc kích thước bạn cấu hình và có thể được chỉ định gửi theo Topic.Kafka hoạt động tốt khi kết hợp với Apache Flink và Apache Spark để phân tích và hiển thị dữ liệu truyền trực tuyến theo thời gian thực. Trong bài viết này kafka được sử dụng để thu thập dữ liệu và load vào trong Druid.

Druid

Druid cung cấp khả năng nhập dữ liệu thời gian thực có độ trễ thấp từ Kafka, thăm dò dữ liệu linh hoạt và tổng hợp dữ liệu nhanh chóng. Druid không được coi là một hồ dữ liệu (data lake) mà thay vào đó là một dòng sông dữ liệu. Vì dữ liệu đang được tạo ra bởi người dùng, cảm biến hoặc bất cứ thứ gì, nó sẽ chảy trong bối cảnh ứng dụng. Như với thiết lập Hive / Presto, dữ liệu thường thực hiện hàng giờ hoặc hàng ngày, nhưng với Druid, dữ liệu có sẵn để truy vấn khi truy cập vào cơ sở dữ liệu. Druid đươck đánh giá là cải thiện 90% -98% tốc độ so với Apache Hive (chưa kiểm chứng).

Superset

Apache SuperSet là một công cụ trực quan hóa dữ liệu Nguồn mở có thể được sử dụng để biểu diễn dữ liệu bằng đồ họa. Superset ban đầu được tạo ra bởi AirBnB và sau đó được phát hành cho cộng đồng Apache. Apache Superset được phát triển bằng ngôn ngữ Python và sử dụng Flask Framework cho tất cả các tương tác web. Superset hỗ trợ phần lớn RDMBS thông qua SQL Alchemy.

Bắt đầu thôi!

Sử dụng Docker, thật dễ dàng để thiết lập một phiên bản cục bộ và có thể thử và khám phá các khả năng.

Để thiết lập hệ thống, bắt đầu bằng cách sao chép kho lưu trữ git:

git clone https://github.com/apot-group/real-time-analytic.git
cd real-time-analytic

Tiếp theo, chúng ta cần xây dựng các hình ảnh cục bộ:

docker-compose rm -f && docker-compose build && docker-compose up

Vì xây dựng hình ảnh từ đầu, nên việc này có thể mất một lúc. Sau khi thực hiện lệnh docker-compile up, các dịch vụ sẽ khởi động. Có thể mất một khoảng thời gian trước khi mọi thứ bắt đầu và chạy.

Service URL User/Password
Druid Unified http://localhost:8888/ None
Druid Legacy http://localhost:8081/ None
Superset http://localhost:8088/ docker exec -it superset bash superset-init
Airflow http://localhost:3000/ admin - a-airflow/app/standalone_admin_password.txt

Lưu ý là với airflow user admin và password sẽ tự tạo tại a-airflow/app/standalone_admin_password.txt dùng thông tin này để đăng nhập nhé. Còn với superset thì cần đi đến container đang chạy và thực hiện lệnh init để tạo user với pass:
docker exec -it <superset_container_name> bash superset-init

Airflow dags tại a-airflow /app/dags/demo.py mỗi phút sẽ gữi tin nhắn đến topic 'demo' kafka với dữ liệu về danh sách coin ['BTC', 'ETH', 'BTT', 'DOT'] cấu trúc của thông báo dữ liệu như bên dưới. để bật start streaming thì login vào airflow và bật dags demo lên nhé.

{ "data_id" : 454, "name": 'BTC', "timestamp": '2021-02-05T10:10:01'
}

Từ http://localhost:8888/ chọn load data > kafka điền thông tin kafka server kakfa:9092 và topic demo và config output.

Cuối cùng là login vào Superset http://localhost:8088/ tạo kết nối với với druid như một database với sqlalchemy uri: druid://broker:8082/druid/v2/sql/ chi tiết các kết nối hơn có thể tham khảo Superset-Database-Connect

Cuối cùng là tạo chart > dashboard và enjoy cái moment thoi! 🔥 🔥

Bình luận

Bài viết tương tự

- vừa được xem lúc

Làm việc với Firebase Realtime Database

Firebase Realtime database là một cloud hosted database hỗ trợ đa nền tảng: Android, IOS và Web. Tất cả dữ liệu được lưu trữ ở định dạng JSON và với bất kể một sự thay đổi dữ liệu nào thì có sự phản h

0 0 63

- vừa được xem lúc

Khám phá từng ngõ ngách Apache Druid - Phần 1

1. Giới thiệu. Trước khi đi vào nội dung chính mình muốn kể 1 câu chuyện sau:. .

0 0 574

- vừa được xem lúc

Event driven programming và câu chuyện người đưa thư

Một bức tranh lớn về thiết kế hệ thống với phong cách lập trình theo phương châm: Sống là không chờ đợi. .

0 0 44

- vừa được xem lúc

Giới thiệu về SignalR

1. SignalR là gì . SignalR có thể sử dụng trong bất kì chức năng web real-time nào. Trong đó ứng dụng chat trên web là một ví dụ điển hình.

0 0 29

- vừa được xem lúc

Xây dựng ứng dụng Real-Time IoT với ScyllaDB

Real-Time Là Gì. Khi này ứng dụng IoT của bạn sẽ xuất hiện 2 vấn đề về độ trễ (latency):.

0 0 29

- vừa được xem lúc

Ứng dụng thời gian thực với Laravel Reverb

Giới thiệu. Ở bản cập nhật Laravel 11, Taylor Otwell đã giới thiệu một vài sự cập nhật mới mẻ cho Laravel.

0 0 18