0

Bài 2: Kiến trúc hệ thống Debezium và hướng dẫn cài đặt môi trường bằng Docker Compose.

Ở bài trước chúng ta đã hiểu lý thuyết tại sao lại cần Debezium. Hôm nay, chúng ta sẽ đi sâu vào xem kiến trúc của nó hình thù ra sao, và tự tay dựng một cụm Debezium hoàn chỉnh trên máy tính của bạn bằng Docker Compose nhé.


1. Kiến trúc tổng thể của hệ thống Debezium

Hệ thống CDC bằng Debezium không chạy đơn độc. Nó thường là một "mắt xích" trong một hệ sinh thái luân chuyển dữ liệu. Dưới đây là 4 thành phần cốt lõi bạn cần nắm:

Thành phần Vai trò thực tế
Source Database Nơi chứa dữ liệu gốc (MySQL, PostgreSQL...). Cần được cấu hình để ghi lại log (ví dụ: bật binlog ở chế độ ROW trong MySQL).
Kafka Connect Một framework của Apache Kafka dùng để đưa dữ liệu vào/ra khỏi Kafka. Debezium thực chất là các Connector plugin chạy bên trên Kafka Connect.
Apache Kafka Nơi trung chuyển và lưu trữ các event (sự kiện thay đổi dữ liệu) mà Debezium đẩy ra.
Sink / Consumer Các ứng dụng hoặc hệ thống đích (Elasticsearch, Redis, Microservice khác...) sẽ subscribe vào Kafka để tiêu thụ dữ liệu.

Luồng chạy: Database thay đổi -> Debezium (Kafka Connect) đọc file log -> Đẩy message vào Kafka Broker -> Các hệ thống khác lấy từ Kafka ra xài.


2. Thực hành: Dựng môi trường với Docker Compose

Để tránh việc phải cài cắm thủ công từng phần mềm gây rác máy, chúng ta sẽ dùng Docker. Cụm của chúng ta hôm nay sẽ bao gồm: Zookeeper, Kafka, MySQL, và Kafka Connect (đã cài sẵn Debezium).

  1. Chuẩn bị thư mục và file: Tạo một thư mục mới (ví dụ: debezium-tutorial) và tạo một file có tên docker-compose.yml bên trong thư mục đó.
  2. Viết cấu hình Docker Compose: Mở file docker-compose.yml và dán đoạn mã sau vào:
version: '3.8'
services:
  zookeeper:
    image: quay.io/debezium/zookeeper:2.4
    ports:
      - "2181:2181"
      - "2888:2888"
      - "3888:3888"

  kafka:
    image: quay.io/debezium/kafka:2.4
    ports:
      - "9092:9092"
    links:
      - zookeeper
    environment:
      - ZOOKEEPER_CONNECT=zookeeper:2181

  mysql:
    image: mysql:8.0
    ports:
      - "3306:3306"
    environment:
      - MYSQL_ROOT_PASSWORD=debezium
      - MYSQL_USER=mysqluser
      - MYSQL_PASSWORD=mysqlpw
    # Lệnh này cực kỳ quan trọng để bật binlog cho MySQL (yêu cầu bắt buộc của CDC)
    command: --server-id=1 --log-bin=mysql-bin --binlog-format=ROW --binlog-row-image=FULL

  connect:
    image: quay.io/debezium/connect:2.4
    ports:
      - "8083:8083"
    links:
      - kafka
      - mysql
    environment:
      - BOOTSTRAP_SERVERS=kafka:9092
      - GROUP_ID=1
      - CONFIG_STORAGE_TOPIC=my_connect_configs
      - OFFSET_STORAGE_TOPIC=my_connect_offsets
      - STATUS_STORAGE_TOPIC=my_connect_statuses
  1. Khởi chạy hệ thống: Mở Terminal/Command Prompt, di chuyển vào thư mục chứa file docker-compose.yml và chạy lệnh sau để kéo image và khởi động các services ở chế độ chạy ngầm:

    docker-compose up -d
    

    Lưu ý: Lần đầu tiên chạy có thể mất vài phút vì Docker cần tải các images từ internet về.

  2. Kiểm tra trạng thái: Chạy lệnh docker ps để đảm bảo cả 4 container đều đang ở trạng thái Up. Sau đó, kiểm tra xem API của Kafka Connect đã hoạt động chưa bằng cách mở trình duyệt hoặc dùng cURL:

    curl -H "Accept:application/json" localhost:8083/
    

    Nếu bạn thấy trả về một đoạn JSON chứa version (ví dụ: {"version":"3.5.1",...}), hệ thống đã sẵn sàng!


💡 Lời Kết

Ở bài này, chúng ta đã dựng thành công cơ sở hạ tầng. Tuy nhiên, Debezium lúc này vẫn đang "ngồi chơi xơi nước" vì chúng ta chưa bảo nó phải theo dõi Database nào. Ở bài tiếp theo, chúng ta sẽ tiến hành cấu hình Connector để bắt đầu hứng dữ liệu thay đổi từ MySQL nhé!


All rights reserved

Viblo
Hãy đăng ký một tài khoản Viblo để nhận được nhiều bài viết thú vị hơn.
Đăng kí