Debezium Là Gì?
Debezium là một nền tảng mã nguồn mở (open source) cho phép phát triển các ứng dụng xử lý dữ liệu theo thời gian thực (realtime). Nó hoạt động như một connector, kết nối với các cơ sở dữ liệu thông qua các log và phát ra các tín hiệu dữ liệu mỗi khi có các thao tác DDL (Data Definition Language) hoặc DML (Data Manipulation Language), như INSERT, UPDATE, DELETE, hoặc TRUNCATE.
Các Debezium Connectors
Debezium thường được sử dụng kết hợp với Kafka Connect, và đóng vai trò quan trọng như một connector trong Kafka. Những sự kiện như insert, update, delete sẽ được gửi đến Kafka thông qua Debezium connectors và có thể được sử dụng cho nhiều dịch vụ khác nhau.
Những connector của Debezium hỗ trợ nhiều cơ sở dữ liệu phổ biến như MongoDB, MySQL, PostgreSQL, SQL Server, Oracle, Db2, và Cassandra. Dưới đây là một số phương pháp kết nối cho từng cơ sở dữ liệu:
1. PostgreSQL: WAL (Write-Ahead Logging)
Debezium sử dụng WAL để theo dõi các thay đổi dữ liệu trong PostgreSQL. WAL là một bản ghi liên tục của tất cả các thay đổi đối với cơ sở dữ liệu. Debezium đọc WAL và chuyển các thay đổi thành các luồng dữ liệu.
2. MongoDB: Oplog (Operations Log)
Debezium sử dụng Oplog để theo dõi các thay đổi trong MongoDB, theo dõi tất cả các hoạt động CRUD (Create, Read, Update, Delete) và chuyển đổi chúng thành các luồng dữ liệu.
3. MySQL: Binlog (Binary Log)
Debezium theo dõi các thay đổi dữ liệu trong MySQL thông qua Binlog, một bản ghi liên tục của tất cả các thay đổi.
4. SQL Server: CDC (Change Data Capture)
Debezium sử dụng CDC để theo dõi các thay đổi dữ liệu trong SQL Server, cho phép truy xuất các thay đổi dữ liệu và chuyển đổi chúng thành các luồng dữ liệu.
5. Oracle: LogMiner
Debezium dựa trên LogMiner để theo dõi các thay đổi dữ liệu trong Oracle và chuyển đổi chúng thành các luồng dữ liệu.
6. Db2: CDC (Change Data Capture)
Debezium khai thác CDC trong Db2 để theo dõi các thay đổi dữ liệu và chuyển thành luồng dữ liệu.
7. Cassandra: CDC (Change Data Capture)
Debezium sử dụng CDC để theo dõi các thay đổi dữ liệu trong Cassandra.
Debezium Engine
Không phải lúc nào chúng ta cũng cần phải lưu trữ các sự kiện trên Kafka. Đôi khi, các lập trình viên muốn nhận các sự kiện trực tiếp tại dịch vụ của mình mà không cần thêm Kafka. Debezium cung cấp một module debezium-api
được phát triển bằng Java cho mục đích này.
Ứng Dụng Thực Tế của Debezium
Với khả năng phát và nhận dữ liệu theo thời gian thực, Debezium được sử dụng trong nhiều dự án khác nhau, bao gồm:
- CDC (Change Data Capture), Datalake, và ETL: Các ứng dụng nhận và xử lý dữ liệu có thể sử dụng Debezium để nhận và phân tích dữ liệu.
- Xem Số Liệu Thời Gian Thực: Giúp theo dõi đơn hàng hoặc xử lý đơn hàng trong thời gian thực.
- Phát Hiện Gian Lận: Debezium là một công cụ đơn giản để theo dõi và xác minh các giao dịch liên tục.
Cấu Hình Cần Thiết Để Bắt Đầu
Trong chuỗi bài viết này, chúng ta sẽ sử dụng PostgreSQL làm cơ sở dữ liệu demo. Để Debezium có thể hoạt động, cần phải bật WAL level ở chế độ logical
, bạn có thể sử dụng câu SQL sau để kiểm tra:
sql
SELECT name, setting
FROM pg_settings
WHERE name IN ('wal_level', 'max_replication_slots');
Lưu ý: max_replication_slots
chỉ định số lượng replication tối đa có thể tạo, tương ứng với số lượng connector tối đa có thể sử dụng.
Để bật WAL level ở chế độ logical
, bạn có thể thực hiện câu lệnh sau:
sql
ALTER SYSTEM SET wal_level = logical;
Bạn cũng có thể cấu hình trong tệp postgresql.conf
. Để kiểm tra các replication đã được tạo, hãy sử dụng câu SQL sau:
sql
SELECT * FROM pg_stat_replication;
Vậy Replication Là Gì?
Replication trong PostgreSQL cho phép tạo ra các bản sao của dữ liệu, mang lại nhiều lợi ích như tăng khả năng mở rộng và giảm tải dữ liệu.
Có nhiều loại replication trong PostgreSQL, bao gồm:
1. Stream Replication
Đây là loại replication phổ biến, thường dùng trong mô hình master-slave, cho phép truyền các thay đổi từ con master sang con slave.
2. Logical Replication
Khác với Stream Replication, Logical Replication chỉ sao chép các thay đổi DDL và DML thực sự gây ra thay đổi cho dữ liệu, điều này mang lại hiệu suất tốt hơn và tính linh hoạt nhưng cũng đòi hỏi cấu hình phức tạp hơn.
Tùy vào nhu cầu cụ thể mà bạn có thể chọn loại replication phù hợp, ở đây chúng ta sẽ chọn Logical Replication.
Cấu Hình REPLICA IDENTITY Cho Các Bảng
REPLICA IDENTITY DEFAULT
Đây là chế độ mặc định, sử dụng khóa chính hoặc khóa duy nhất để xác định bản ghi. Chế độ này có hiệu suất cao nhưng khi nhận sự kiện DELETE
, bạn chỉ nhận được các giá trị khóa chính.
sql
ALTER TABLE customers SET REPLICA IDENTITY USING DEFAULT;
REPLICA IDENTITY LOGICAL
Trong chế độ này, PostgreSQL sẽ dùng toàn bộ các trường làm khóa, đảm bảo tất cả dữ liệu sẽ được truyền đi, kể cả các dữ liệu trước khi xóa.
sql
ALTER TABLE customers REPLICA IDENTITY FULL;
REPLICA IDENTITY NOTHING
Chế độ này cũng sao chép toàn bộ dữ liệu nhưng không sử dụng khóa, điều này có thể làm mất tính nhất quán dữ liệu. Sử dụng chế độ này nếu bạn cần sao chép tất cả dữ liệu mà không quan tâm đến tính nhất quán.
sql
ALTER TABLE customers REPLICA IDENTITY NOTHING;
Chuỗi Bài Viết
- Phần 1: Debezium là gì? Ứng dụng thực tế.
- Phần 2: Cấu hình sử dụng Debezium Engine với PostgreSQL.
- Phần 3: Cấu hình sử dụng Debezium với PostgreSQL và Kafka Connect.
source: viblo