TopGit
Đánh giá repo GitHub

Canal: đăng ký binlog MySQL cho CDC

alibaba/canal
CTopGit review image for alibaba/canal
Review by Topgit.dev for alibaba/canal, with GitHub repository stats and README context.
Nhận định nhanh

Canal giải quyết bài toán change data capture cho MySQL bằng cách giả làm một replica: nó nói protocol dump, MySQL đẩy binlog events cho nó, và nó biến các event đó thành một stream có cấu trúc. Chính mẹo đó cũng là giới hạn của nó — bạn đang vận hành hạ tầng cần uptime riêng chứ không phải một thư viện import vào code, nên nó chỉ đáng làm khi bạn thực sự có hệ thống downstream cần phản ứng gần thời gian thực với từng thay đổi dòng dữ liệu.

Sao
★ 29.7k
Fork
⑂ 7.6k
Ngôn ngữ
Java
Giấy phép
Apache-2.0
Chủ đề
—
Cập nhật
Jul 2026
Trang chủ
—
GitHub

Canal là gì?

Canal là một binlog parser viết bằng Java do Alibaba xây dựng, giả làm MySQL replica để lấy trực tiếp binary log events từ MySQL master. Nó chạy như một server độc lập nằm giữa MySQL và các consumer, giải mã binlog thô thành change event có cấu trúc mà client — viết bằng Java, Go, PHP, Python, Rust, C# hay Node.js — đọc qua protocol dựa trên protobuf, hoặc đẩy thẳng vào Kafka hay RocketMQ.

Tính năng chính

  • ✓Nói trực tiếp protocol replication (dump) của MySQL nên trông giống một read replica bình thường với database nguồn — không cần trigger, không cần polling.
  • ✓Giải mã binlog thô thành change event có cấu trúc, đọc được qua protocol client-server dựa trên protobuf.
  • ✓Có connector native để đẩy change event vào Kafka hoặc RocketMQ, thay vì bắt bạn tự viết client để lấy, theo tài liệu Kafka/RocketMQ QuickStart.
  • ✓Đi kèm Docker image, nên chạy được server mà không cần tự setup Java thủ công.
  • ✓Xuất metrics cho Prometheus ngay từ trong core.
  • ✓Hỗ trợ đăng ký binlog cho Aliyun RDS for MySQL, kể cả xử lý chuyển đổi master/replica tự động và đọc binlog OSS offline.
  • ✓canal-admin (từ bản 1.1.4) thêm web UI để cấu hình instance, quản lý task và xem log thay vì sửa file config bằng tay.
  • ✓Có client ở nhiều ngôn ngữ — Java, Go, PHP, Python, Rust, C#, Node.js — được liệt kê và link thẳng từ README.
Số sao GitHub của repo này thay đổi thế nào theo thời gian. Nguồn: star-history.com.Xem lịch sử sao ↗

Canal được dùng để làm gì

  • •Mirror một database MySQL sang một store khác mà không đụng vào write path của ứng dụng.
  • •Backup database gần thời gian thực, dựa trên replication stream thay vì dump định kỳ.
  • •Rebuild hoặc duy trì các index dẫn xuất — README nêu rõ cả index tách (heterogeneous) lẫn inverted index.
  • •Invalidate hoặc refresh cache của ứng dụng ngay khi một dòng dữ liệu bên dưới thay đổi.
  • •Đẩy thay đổi ở mức dòng dữ liệu vào business logic tùy biến để xử lý theo từng sự kiện cụ thể.

Cài đặt và chạy Canal

README không đưa thẳng câu lệnh cài đặt — nó trỏ tới trang QuickStart và Docker QuickStart trên wiki của project, cùng trang GitHub Releases để tải bản build. Có sẵn Docker image (canal thêm hỗ trợ Docker native từ dòng bản 1.1.x), nhưng câu lệnh chạy cụ thể và cấu trúc file config thì không nằm trong chính README, nên hãy đọc kỹ QuickStart trên wiki trước khi giả định mọi thứ chạy chỉ với một dòng lệnh.

Kết nối client

Canal chạy như một server và cần client kết nối qua protocol riêng dựa trên protobuf 3.0, chứ không phải socket thô. Ví dụ chính thức nằm ở trang wiki ClientExample/ClientAPI cho client Java; với các ngôn ngữ khác, README trỏ ra các project được maintain riêng — CanalSharp cho C#, canal-go cho Go, canal-php cho PHP, canal-python cho Python, canal-rs cho Rust, canal-nodejs cho Node.js — thay vì đóng gói sẵn trong repo này. Nếu không muốn tự viết client, canal có thể đẩy change event thẳng vào Kafka hoặc RocketMQ và bạn tiêu thụ từ queue như một topic bình thường.

Điểm mạnh

  • ✓Dùng đúng protocol replication của MySQL thay vì polling hay trigger, nên không tạo thêm tải ở write path của database nguồn.
  • ✓Đẩy native vào Kafka và RocketMQ nghĩa là bạn có thể bỏ qua việc tự viết consumer cho hai đích downstream phổ biến nhất.
  • ✓canal-admin cho web UI để quản lý config/task/log thay vì sửa file tay trên từng instance.
  • ✓Hỗ trợ rõ ràng nhiều phiên bản MySQL (5.1.x đến 8.0.x) thay vì chỉ ghim một bản duy nhất.
  • ✓Xử lý sẵn cho Aliyun RDS khi master/replica tự động chuyển đổi là một giải pháp cụ thể, có tên hẳn hoi, cho một điểm đau cụ thể — không phải lời hứa tương thích chung chung.

Hạn chế

  • △README không ghi trực tiếp câu lệnh install/run — bạn phải theo link ra wiki GitHub để xem QuickStart và hướng dẫn Docker.
  • △Client không phải Java (Go, PHP, Python, Rust, C#, Node.js) là các repo riêng do cộng đồng maintain, không thuộc project này — việc cập nhật chúng nằm ngoài chu kỳ release của canal.
  • △Đây là hạ tầng, không phải thư viện: bạn phải chạy và vận hành một server độc lập song song với MySQL, tốn công vận hành thật so với một script polling phía client.
  • △Con số hiệu năng lớn nhất mà README ghi lại là một lần cải thiện 150% gắn với release notes 1.1.x — không có bộ benchmark chạy liên tục để đối chiếu với một phiên bản MySQL hay workload cụ thể.

Lựa chọn thay thế cho Canal

Debezium — lựa chọn phổ biến hơn hiện nay cho CDC dựa trên binlog MySQL, nhất là nếu bạn đã dùng Kafka Connect; hỗ trợ đa database (Postgres, MongoDB, SQL Server) rộng hơn thiết kế MySQL-first của canal.MaxScale — proxy/router của MariaDB có kèm binlog server, đáng xem nếu bạn dùng MariaDB thay vì MySQL hoặc đã dùng MaxScale cho mục đích khác.

Câu hỏi thường gặp

Canal hỗ trợ những phiên bản MySQL nào?

Canal hỗ trợ MySQL 5.1.x, 5.5.x, 5.6.x, 5.7.x và 8.0.x làm database nguồn, theo README của project. Canal đọc binlog của các phiên bản này bằng cách nói cùng protocol replication mà một MySQL replica dùng, nên không cần connector riêng cho từng bản.

Canal có mã nguồn mở không và dùng thương mại được không?

Canal là mã nguồn mở theo giấy phép Apache-2.0, cho phép dùng thương mại, chỉnh sửa và phân phối lại. Canal được host trên GitHub dưới tài khoản của Alibaba, và toàn bộ source đều công khai để bạn xem hoặc fork.

Canal có client ở những ngôn ngữ lập trình nào?

Client chính thức của Canal viết bằng Java, nhưng README có link tới các client do cộng đồng maintain riêng cho C# (CanalSharp), Go (canal-go), PHP (canal-php), Python (canal-python), Rust (canal-rs) và Node.js (canal-nodejs).

Canal gửi message tới Kafka hoặc RocketMQ bằng cách nào?

Canal có hỗ trợ native, dựng sẵn để đẩy thẳng vào cả Kafka lẫn RocketMQ — bạn không cần tự viết consumer để bắc cầu giữa hai bên. Tính năng này đến từ dòng release 1.1.x, được ghi trong tài liệu Kafka/RocketMQ QuickStart của project.

Canal có hỗ trợ Aliyun RDS for MySQL không?

Canal có hỗ trợ native việc đăng ký binlog từ Aliyun RDS for MySQL. README nói tính năng này giải quyết cụ thể chuyện chuyển đổi master/replica tự động và đọc binlog OSS offline, hai hành vi đặc thù của cách Aliyun RDS quản lý instance MySQL.

Canal 1.1.x cải thiện hiệu năng bao nhiêu?

README của Canal nói dòng release 1.1.x mang lại mức cải thiện hiệu năng tổng thể 150%, sau quá trình kiểm thử và tối ưu được theo dõi ở issue #726 trên GitHub. Chi tiết nằm ở trang wiki Performance của project.

Vấn đề mà Canal giải quyết

Lấy thay đổi dữ liệu MySQL theo kiểu incremental mà không đụng vào write path của ứng dụng trước đây thường có ba cách: rải trigger khắp các bảng, polling bằng select tần suất cao, hoặc tự parse định dạng binlog của MySQL. Canal ra đời đúng từ nhu cầu đó ở Alibaba — đồng bộ xuyên trung tâm dữ liệu giữa Hàng Châu và Mỹ — khi cách làm dựa trên trigger trước năm 2010 không scale nổi, nên họ xây một công cụ nói thẳng protocol replication mà MySQL vốn đã dùng với replica của nó.

Nên dùng khi nào — và nên bỏ qua khi nào

Canal đáng để setup nếu bạn đã có sẵn một consumer downstream cụ thể trong đầu — search index, cache layer, database mirror, hay pipeline Kafka/RocketMQ — và bạn đang dùng MySQL từ 5.1 đến 8.0. Bỏ qua nếu bạn chỉ cần backup theo mốc thời gian thỉnh thoảng (mysqldump đã đủ) hoặc bạn không dùng MySQL/Aliyun RDS for MySQL, vì canal được thiết kế bám sát định dạng binlog riêng của MySQL.

Nguồn & ghi công

Thông tin và trích dẫn lấy từ repo GitHub alibaba/canal (github.com/alibaba/canal), bao gồm README và release notes được link trong đó.

Dữ liệu GitHub · đồng bộ lần cuối 15 thg 8, 2026Đánh giá bởi Henry
← Về TopGit

Chưa chắc canal có hợp với bạn?

Để ChatGPT, Claude hoặc Perplexity tìm hiểu giúp — bấm bên dưới và xem AI nói gì về canal.

GitHub