Cài đặt Apache NiFi
Kết nối NiFi với các Data Source và Destination
ELT Data
Hi mọi người hôm nay Balloon sẽ hướng dẫn mọi người cách làm sao để sync được data từ một database ở đầu source sang một database khác, các bạn có thể gọi nó là Data Lake vì chúng ta sẽ không thay đổi bất cứ thứ tự hay cấu trúc các table ở source.
Mình không biết các bạn khác có áp dụng build Datawarehouse ngay từ ban đầu hay không nhưng mình thì lại thích build Data Lake trước vì nó giữ nguyên vẹn được những thông tin ở source, tránh trường hợp apply quá nhiều việc biến đổi dữ liệu. Việc biến đổi dữ liệu trước từ lúc ETL sẽ mang lại lợi ích rất lớn là người dùng (Data Analyst, Department Manager) có thể dử dụng dữ liệu mà chúng ta đẩy vào trong Datawarehouse ngay mà không cần phải làm thêm thao tác gì nữa thông qua các công cụ visualization như PowerBI của Microsoft hoặc Tableau, bên cạnh đó nó sẽ tìm ẩn một số những rủi ro như sau:
Quá trình transform xảy ra lỗi do xử lí không tốt => phải can thiệp bằng tay để sửa lỗi (T . T) . Cái này mình gặp hoài luôn khi bên source có thay đổi gì đó, lúc trước đó vẫn chạy tốt
Ex: 0 + null = null
Không on the same page với người tạo ra dữ liệu
Giả sử bạn là người kế thừa sản phẩm của người đi trước và có gì trục trặc xảy ra với một số cột data đã bị biến đổi, bạn có thể sẽ gặp trường hợp là bên source quả quyết là cột này họ làm đúng bên warehouse mới sai đó, quá trình trace lỗi sẽ trở thành ác mộng khi bạn không rõ logic transform của người cũ
Ex: total_amount trong source là total sau khi đã trừ discount nhưng trong warehousee lại là total_amount + discount vì một lí do nào đó
Thay đổi cách tính => heartshot
Cái này thì các bạn không còn lạ gì nữa đúng hông, khi công ty quyết định thay đổi cách tính đã tồn tại 2 năm nay, và bạn sẽ phải ETL lại hết dữ liệu của 2 năm để đồng bộ dữ liệu theo cách tính mới vì bạn đã lỡ không lấy các cột dữ liệu gốc có trong công thức mà chỉ lấy kết quả tính toán cuối cùng và công ty đã archive data cũ ra đĩa cứng
Vì những lí do trên nên mình sẽ hướng dẫn mọi người cách build Data Lake nhé
Cài đặt Apache Nifi
Sau đó các bạn kiểm tra lại bằng cách gõ docker ps để list ra tất cả các container đang chạy. Nếu thành công thì container nifi của chúng ta sẽ hiển thị như hình dưới đây

Nếu vẫn chưa hiển thị được container như trên thì cứ comment lên bài viết lỗi của các bạn nhé. Bây giờ mình sẽ vào khám phá giao diện của Apache NiFi xem thử mình sẽ làm việc với nó như thế nào để move data từ database này qua database khác nhé
Kết nối NiFi với các Data Source và Destination
Các bạn mở trình duyệt và gõ http://localhost:8080/nifi
Các thông tin liên quan đến chức năng của NiFi mình sẽ không giải thích ở đây các bạn tham khảo thêm ở link này , nếu các bạn quan tâm thì có thể comment cho mình ở bài viết này, mình sẽ làm tiếp một bài giải thích riêng ở mục khác, mình sẽ assume là các bạn đã có một số kiến thức cơ bản về NiFi nhé, workspace chính của nifi sẽ hiển thị như sau:

Copy driver vào container nifi, mình sẽ sử dụng mysql để demo các bạn download ở link này mình chọn bản Platform Independent , bản này có thể chạy trên 20 hệ điều hành khác nhau bao gồm Debian của NiFi, sau khi download bạn mở terminal và gõ
Tạo Process Group:
Rê chuột lên thanh Toolbar và chọn Component tên Process Group, kéo nó ra workspace và đặt tên cho nó, mình đặt tên nó là Demo như hình bên dưới, đúng như thêm gọi của nó Process Group sẽ giúp bạn tổ chức các processor khoa học và gọn gàng hơn, mình thường nhóm các process trong cùng một database lại tronng một Process Group và đặt tên cho nó bằng số IP cho dễ nhớ
Configure Database Connector:
Bạn click phải chuột vào bất kì chỗ nào trên workspace, hông phải Process Group mà mình mới tạo đâu nha, và chọn Configure
Trong khung Configure bạn chọn dấu cộng để thêm Controller Service, trong khung searcho gõ tìm jdbc, bạn chọn DBCPConnectionPool
Click Configure, Đặt tên cho ConnectionPool là Demo_SourceDatabase, sau đó bạn chọn Tab Properties và điền vào các thông tin sau.
Tiếp tục tạo thêm controller service trỏ vào database đích là datalake mysql mình tạo lúc trước, vì ở chung network với nhau nên bạn lưu ý thay thể hostname của database bằng tên container nhé, trong trường hợp này là mysql
Sau khi đã configure xong, bạn click chọn enable 2 controller này (icon hình sấm sét)
Design Data Flow:
Ở khung workspace bạn double click vào ProcessGroup Demo, bên trong Process Group bạn click chọn Component Processor, kéo nó ra giữa workspace
Trên màn hình sẽ hiển thị tất cả các processor để chọn, bạn gõ chữ Fetch để tìm và chọn Processor GenerateTableFetch, để tìm hiểu nó sử dụng như thế nào bạn click chuột phải vào component và chọn View Usage
Double click vào component GenerateTableFetch và thay đổi tên cho nó trùng với tên table mà bạn muốn ETL từ database nguồn cho descriptive hơn, sau đó bạn chọn Tab Properties, và điền vào các thông tin như bên dưới