# Di chuyển SQL Server sang Kafka
DTS hỗ trợ di chuyển dữ liệu từ SQL Server sang Kafka. Phiên bản SQL Server được hỗ trợ là SQL Server 2008 R2 trở lên. Kafka hỗ trợ phiên bản 2.x: bao gồm 2.0, 2.1, 2.2, 2.3, 2.4, 2.5, 2.6, 2.7, 2.8, v.v.

## 1. Giới hạn tính năng

### 1.1 Giới hạn của SQL Server nguồn
1. Cơ sở dữ liệu nguồn và các bảng cần di chuyển phải được bật tính năng CDC.

```sql
-- Chỉ định tên cơ sở dữ liệu
use dbname
-- Bật tính năng CDC
exec sys.sp_cdc_enable_db
-- Kiểm tra xem CDC đã được bật cho cơ sở dữ liệu dbname hay chưa, giá trị trả về là 1 nghĩa là đã bật
select is_cdc_enabled from sys.databases where name = "dbname";
-- Bật CDC cho bảng dbo.tablename
exec sys.sp_cdc_enable_table @source_schema = 'dbo',@source_name = 'tablename',@role_name = null;
-- Kiểm tra xem CDC đã được bật cho bảng dbo.tablename hay chưa, giá trị trả về là 1 nghĩa là đã bật
select is_tracked_by_cdc from sys.tables where name = 'tablename'
-- Sửa đổi thời gian lưu trữ dữ liệu CDC, tối thiểu phải đặt là 1440 phút (1 ngày) trở lên, khuyến nghị là 14400 phút (7 ngày).
EXECUTE sys.sp_cdc_change_job @job_type = N'cleanup', @retention = 14400;
```

### 1.2 Giới hạn của Kafka đích

1. Đặt `auto.create.topics.enable` thành true.
2. Đặt `delete.topic.enable` thành true.


## 2. Nội dung di chuyển

| Nội dung di chuyển | Mô tả                                                                |
| ----------------- | ------------------------------------------------------------------ |
| Cấu trúc di chuyển | Cơ sở dữ liệu, Cấu trúc bảng và dữ liệu                               |
| Phạm vi di chuyển   | Chỉ di chuyển các bảng có thể tìm thấy khi tạo tác vụ, các bảng mới được thêm vào trong quá trình thực hiện tác vụ tạm thời sẽ không được tự động di chuyển |
| DDL               | Các câu lệnh CREATE, ALTER, DROP                                     |
| DML               | Snapshot/insert/update/delete                                      |


## 3. Điền biểu mẫu

### Biểu mẫu nguồn dữ liệu

| Tên tham số | Mô tả                                                                                                         |
| -------------- | ------------------------------------------------------------------------------------------------------------------- |
| Địa chỉ        | Hỗ trợ hai phương thức: địa chỉ mạng nội bộ và địa chỉ đường truyền chuyên dụng. Địa chỉ mạng nội bộ yêu cầu thông tin VPC và mạng con; địa chỉ đường truyền chuyên dụng hỗ trợ cả IP và tên miền, nếu sử dụng tên miền, cần có mạng người dùng có cổng ra mạng ngoài |
| Cổng           | Cổng kết nối SQL Server                                                                                          |
| Tên người dùng       | Tên đăng nhập kết nối SQL Server                                                                                      |
| Mật khẩu       | Mật khẩu tương ứng với người dùng cơ sở dữ liệu SQL Server                                                              |
| Tên cơ sở dữ liệu  | Tên cơ sở dữ liệu SQL Server, chỉ hỗ trợ di chuyển một cơ sở dữ liệu duy nhất                                                   |
| Tên bảng     | Tên bảng SQL Server cần chuyển, sử dụng dấu phẩy tiếng Anh để phân tách các tên bảng. Ví dụ: `dbo.tablename1,dbo.tablename2`, khi schema là dbo thì có thể bỏ qua và chỉ cần điền tên bảng, ví dụ: `tablename1,tablename2` |


### Biểu mẫu đích chuyển đổi

| Tên tham số     | Mô tả                                                                                       |
| ------------------ | ------------------------------------------------------------------------------------------------- |
| Địa chỉ nội bộ   | Địa chỉ kết nối cụm Kafka, ví dụ: 92.168.1.10:9092,192.168.1.11:9092,192.168.1.12:9093   |
| Tốc độ tối đa       | Giới hạn tốc độ truyền của Kafka, điều chỉnh tốc độ truyền                                               |
| Tiền tố Topic       | DTS khi di chuyển SQL Server sang Kafka sẽ tạo Topic tương ứng trên Kafka đích; quy tắc là một Topic cho mỗi bảng, mỗi Topic sẽ lấy tham số này làm tiền tố |
| Số phân vùng mặc định | Số lượng phân vùng mặc định cho Topic tương ứng khi di chuyển SQL Server sang Kafka bằng DTS |


## 4. Định dạng dữ liệu truyền Kafka

Nội dung được di chuyển từ DTS sang Kafka ở định dạng Debezium JSON. Đối với đồng bộ hóa hạ nguồn, có thể sử dụng Flink CDC, chỉ định định dạng dữ liệu là debezium-json.