Real time analytics: Airflow + Kafka + Druid + Superset

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

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! 🔥🔥

Nguồn: viblo.asia

Bài viết liên quan

So sánh Webhook và API: Khi nào nên sử dụng?

Trong lĩnh vực công nghệ thông tin và phát triển phần mềm, Webhook và API là hai th

Những ngành nghề AI có thể thay thế dần trong tương lai.

Những ngành nghề AI có thể thay thế trong tương lai gần Dựa trên các báo cáo và

Tạo Subdomain miễn phí với is-a.dev 🤪

Cuối tuần mọi người thế nào, mình thì rảnh quá lướt Facebook, tớ tình cờ th

Dùng TailwindCSS v4 trong SpringBoot + JTE

Giới thiệu JTE là gì? JTE (Java Template Engine) là một template engine an toàn, nhẹ và