Hướng dẫn này trình bày cách sử dụng Debezium để giám sát cơ sở dữ liệu MySQL. Khi dữ liệu trong cơ sở dữ liệu thay đổi, bạn sẽ thấy các luồng sự kiện kết quả
Trong hướng dẫn này, bạn sẽ khởi động các dịch vụ Debezium, chạy một máy chủ cơ sở dữ liệu MySQL với một cơ sở dữ liệu ví dụ đơn giản và sử dụng Debezium để theo dõi các thay đổi của cơ sở dữ liệu
điều kiện tiên quyết
Docker đã được cài đặt và đang chạy
Hướng dẫn này sử dụng Docker và hình ảnh bộ chứa Debezium để chạy các dịch vụ cần thiết. Bạn nên sử dụng phiên bản Docker mới nhất. Để biết thêm thông tin, hãy xem tài liệu cài đặt Docker Engine
Ví dụ này cũng có thể được chạy bằng Podman. Để biết thêm thông tin, xem Podman
Giới thiệu về Debezi
Debezium là một nền tảng phân tán giúp chuyển đổi thông tin từ cơ sở dữ liệu hiện có của bạn thành các luồng sự kiện, cho phép các ứng dụng phát hiện và phản hồi ngay lập tức các thay đổi ở cấp độ hàng trong cơ sở dữ liệu
Debezium được xây dựng dựa trên Apache Kafka và cung cấp một bộ trình kết nối tương thích. Mỗi trình kết nối hoạt động với một hệ thống quản lý cơ sở dữ liệu cụ thể [DBMS]. Trình kết nối ghi lại lịch sử thay đổi dữ liệu trong DBMS bằng cách phát hiện các thay đổi khi chúng xảy ra và truyền bản ghi của từng sự kiện thay đổi sang chủ đề Kafka. Sau đó, các ứng dụng sử dụng có thể đọc các bản ghi sự kiện kết quả từ chủ đề Kafka
Bằng cách tận dụng nền tảng phát trực tuyến đáng tin cậy của Kafka, Debezium giúp các ứng dụng có thể sử dụng các thay đổi xảy ra trong cơ sở dữ liệu một cách chính xác và đầy đủ. Ngay cả khi ứng dụng của bạn dừng đột ngột hoặc mất kết nối, nó cũng không bỏ lỡ các sự kiện xảy ra trong thời gian ngừng hoạt động. Sau khi ứng dụng khởi động lại, nó sẽ tiếp tục đọc từ chủ đề từ điểm mà nó đã dừng lại
Hướng dẫn sau đây chỉ cho bạn cách triển khai và sử dụng với một cấu hình đơn giản. Để biết thêm thông tin về việc triển khai và sử dụng trình kết nối Debezium, hãy xem tài liệu về trình kết nối
tài nguyên bổ sung
Bắt đầu các dịch vụ
Sử dụng Debezium yêu cầu ba dịch vụ riêng biệt. Dịch vụ kết nối ZooKeeper, Kafka và Debezium. Trong hướng dẫn này, bạn sẽ thiết lập một phiên bản duy nhất của từng dịch vụ bằng cách sử dụng Docker và hình ảnh bộ chứa Debezium
Để bắt đầu các dịch vụ cần thiết cho hướng dẫn này, bạn phải
Cân nhắc khi chạy Debezium với Docker
Hướng dẫn này sử dụng Docker và hình ảnh bộ chứa Debezium để chạy các dịch vụ ZooKeeper, Kafka, Debezium và MySQL. Chạy mỗi dịch vụ trong một vùng chứa riêng biệt sẽ đơn giản hóa việc thiết lập để bạn có thể thấy Debezium đang hoạt động
Trong môi trường sản xuất, bạn sẽ chạy nhiều phiên bản của từng dịch vụ để cung cấp hiệu suất, độ tin cậy, khả năng sao chép và khả năng chịu lỗi. Thông thường, bạn sẽ triển khai các dịch vụ này trên một nền tảng như OpenShift hoặc Kubernetes quản lý nhiều vùng chứa Docker chạy trên nhiều máy chủ và máy hoặc bạn sẽ cài đặt trên phần cứng chuyên dụng
Bạn nên lưu ý những cân nhắc sau để chạy Debezium với Docker
Các thùng chứa cho ZooKeeper và Kafka là phù du
ZooKeeper và Kafka thường lưu trữ cục bộ dữ liệu của họ bên trong các thùng chứa, điều này sẽ yêu cầu bạn gắn các thư mục trên máy chủ dưới dạng ổ đĩa. Theo cách đó, khi các vùng chứa bị dừng, dữ liệu vẫn còn. Tuy nhiên, hướng dẫn này bỏ qua thiết lập này - khi một vùng chứa bị dừng, tất cả dữ liệu được lưu giữ lâu dài sẽ bị mất. Bằng cách này, việc dọn dẹp trở nên đơn giản khi bạn hoàn thành hướng dẫn
Để biết thêm thông tin về lưu trữ dữ liệu liên tục, hãy xem tài liệu về hình ảnh vùng chứa
Hướng dẫn này yêu cầu bạn chạy từng dịch vụ trong một vùng chứa khác nhau
Để tránh nhầm lẫn, bạn sẽ chạy từng vùng chứa ở nền trước trong một thiết bị đầu cuối riêng biệt. Bằng cách này, tất cả đầu ra của một vùng chứa sẽ được hiển thị trong thiết bị đầu cuối được sử dụng để chạy nó
Docker cũng cho phép bạn chạy một container ở chế độ tách rời [với tùy chọn
8], trong đó container được khởi động và lệnh... 2017-09-21 07:16:59,085 - INFO [main-EventThread:ZkClient@713] - zookeeper state changed [SyncConnected] 2017-09-21 07:16:59,218 - INFO [main:Logging$class@70] - Cluster ID = LPtcBFxzRvOzDSXhc6AamA ... 2017-09-21 07:16:59,649 - INFO [main:Logging$class@70] - [Kafka Server 1], started [1]
9 trả về ngay lập tức. Tuy nhiên, các thùng chứa chế độ tách rời không hiển thị đầu ra của chúng trong thiết bị đầu cuối. Để xem đầu ra, bạn cần sử dụng lệnh... 2017-09-21 07:16:59,085 - INFO [main-EventThread:ZkClient@713] - zookeeper state changed [SyncConnected] 2017-09-21 07:16:59,218 - INFO [main:Logging$class@70] - Cluster ID = LPtcBFxzRvOzDSXhc6AamA ... 2017-09-21 07:16:59,649 - INFO [main:Logging$class@70] - [Kafka Server 1], started [1]
0. Để biết thêm thông tin, hãy xem tài liệu Docker$ docker run -it --rm --name mysql -p 3306:3306 -e MYSQL_ROOT_PASSWORD=debezium -e MYSQL_USER=mysqluser -e MYSQL_PASSWORD=mysqlpw quay.io/debezium/example-mysql:2.1
Người quản lý vườn thú bắt đầu
ZooKeeper là dịch vụ đầu tiên bạn phải bắt đầu
Thủ tục
Mở một thiết bị đầu cuối và sử dụng nó để khởi động ZooKeeper trong một thùng chứa
Lệnh này chạy một vùng chứa mới bằng phiên bản 2. 1 trong số
1 hình ảnh$ docker run -it --rm --name mysql -p 3306:3306 -e MYSQL_ROOT_PASSWORD=debezium -e MYSQL_USER=mysqluser -e MYSQL_PASSWORD=mysqlpw quay.io/debezium/example-mysql:2.1
$ docker run -it --rm --name zookeeper -p 2181:2181 -p 2888:2888 -p 3888:3888 quay.io/debezium/zookeeper:2.1
2$ docker run -it --rm --name mysql -p 3306:3306 -e MYSQL_ROOT_PASSWORD=debezium -e MYSQL_USER=mysqluser -e MYSQL_PASSWORD=mysqlpw quay.io/debezium/example-mysql:2.1
Bộ chứa có tính tương tác, có nghĩa là đầu vào và đầu ra tiêu chuẩn của thiết bị đầu cuối được gắn vào bộ chứa
3$ docker run -it --rm --name mysql -p 3306:3306 -e MYSQL_ROOT_PASSWORD=debezium -e MYSQL_USER=mysqluser -e MYSQL_PASSWORD=mysqlpw quay.io/debezium/example-mysql:2.1
Vùng chứa sẽ bị xóa khi dừng
4$ docker run -it --rm --name mysql -p 3306:3306 -e MYSQL_ROOT_PASSWORD=debezium -e MYSQL_USER=mysqluser -e MYSQL_PASSWORD=mysqlpw quay.io/debezium/example-mysql:2.1
Tên của thùng chứa
5$ docker run -it --rm --name mysql -p 3306:3306 -e MYSQL_ROOT_PASSWORD=debezium -e MYSQL_USER=mysqluser -e MYSQL_PASSWORD=mysqlpw quay.io/debezium/example-mysql:2.1
Ánh xạ ba cổng của vùng chứa tới cùng một cổng trên máy chủ Docker. Điều này cho phép các vùng chứa khác [và các ứng dụng bên ngoài vùng chứa] giao tiếp với ZooKeeper
Nếu bạn sử dụng Podman, hãy chạy lệnh sau. s
$ sudo podman pod create --name=dbz --publish "9092,3306,8083"
$ sudo podman run -it --rm --name zookeeper --pod dbz quay.io/debezium/zookeeper:2.1
Xác minh rằng ZooKeeper đã bắt đầu và đang lắng nghe trên cổng
6$ docker run -it --rm --name mysql -p 3306:3306 -e MYSQL_ROOT_PASSWORD=debezium -e MYSQL_USER=mysqluser -e MYSQL_PASSWORD=mysqlpw quay.io/debezium/example-mysql:2.1
Bạn sẽ thấy đầu ra tương tự như sau
Starting up in standalone mode ZooKeeper JMX enabled by default Using config: /zookeeper/conf/zoo.cfg 2017-09-21 07:15:55,417 - INFO [main:QuorumPeerConfig@134] - Reading configuration from: /zookeeper/conf/zoo.cfg 2017-09-21 07:15:55,419 - INFO [main:DatadirCleanupManager@78] - autopurge.snapRetainCount set to 3 2017-09-21 07:15:55,419 - INFO [main:DatadirCleanupManager@79] - autopurge.purgeInterval set to 1 ... port 0.0.0.0/0.0.0.0:2181 [1]
1Dòng này cho biết ZooKeeper đã sẵn sàng và đang lắng nghe trên cổng 2181. Thiết bị đầu cuối sẽ tiếp tục hiển thị đầu ra bổ sung khi ZooKeeper tạo ra nó
Bắt đầu Kafka
Sau khi khởi động ZooKeeper, bạn có thể khởi động Kafka trong vùng chứa mới
Debezi 2. 1. 2. Final đã được thử nghiệm với nhiều phiên bản của Kafka Connect. Vui lòng tham khảo Ma trận thử nghiệm Debezium để xác định khả năng tương thích giữa Debezium và Kafka Connect
Thủ tục
Mở một thiết bị đầu cuối mới và sử dụng nó để khởi động Kafka trong một thùng chứa
Lệnh này chạy một vùng chứa mới bằng phiên bản 2. 1 trong số hình ảnh
7$ docker run -it --rm --name mysql -p 3306:3306 -e MYSQL_ROOT_PASSWORD=debezium -e MYSQL_USER=mysqluser -e MYSQL_PASSWORD=mysqlpw quay.io/debezium/example-mysql:2.1
$ docker run -it --rm --name kafka -p 9092:9092 --link zookeeper:zookeeper quay.io/debezium/kafka:2.1
2$ docker run -it --rm --name mysql -p 3306:3306 -e MYSQL_ROOT_PASSWORD=debezium -e MYSQL_USER=mysqluser -e MYSQL_PASSWORD=mysqlpw quay.io/debezium/example-mysql:2.1
Bộ chứa có tính tương tác, có nghĩa là đầu vào và đầu ra tiêu chuẩn của thiết bị đầu cuối được gắn vào bộ chứa
3$ docker run -it --rm --name mysql -p 3306:3306 -e MYSQL_ROOT_PASSWORD=debezium -e MYSQL_USER=mysqluser -e MYSQL_PASSWORD=mysqlpw quay.io/debezium/example-mysql:2.1
Vùng chứa sẽ bị xóa khi dừng
0$ sudo podman run -it --rm --name mysql --pod dbz -e MYSQL_ROOT_PASSWORD=debezium -e MYSQL_USER=mysqluser -e MYSQL_PASSWORD=mysqlpw quay.io/debezium/example-mysql:2.1
Tên của thùng chứa
1$ sudo podman run -it --rm --name mysql --pod dbz -e MYSQL_ROOT_PASSWORD=debezium -e MYSQL_USER=mysqluser -e MYSQL_PASSWORD=mysqlpw quay.io/debezium/example-mysql:2.1
Bản đồ cổng
2 trong vùng chứa đến cùng một cổng trên máy chủ Docker để các ứng dụng bên ngoài vùng chứa có thể giao tiếp với Kafka$ sudo podman run -it --rm --name mysql --pod dbz -e MYSQL_ROOT_PASSWORD=debezium -e MYSQL_USER=mysqluser -e MYSQL_PASSWORD=mysqlpw quay.io/debezium/example-mysql:2.1
3$ sudo podman run -it --rm --name mysql --pod dbz -e MYSQL_ROOT_PASSWORD=debezium -e MYSQL_USER=mysqluser -e MYSQL_PASSWORD=mysqlpw quay.io/debezium/example-mysql:2.1
Báo cho vùng chứa rằng nó có thể tìm thấy ZooKeeper trong vùng chứa
4 đang chạy trên cùng một máy chủ Docker$ sudo podman run -it --rm --name mysql --pod dbz -e MYSQL_ROOT_PASSWORD=debezium -e MYSQL_USER=mysqluser -e MYSQL_PASSWORD=mysqlpw quay.io/debezium/example-mysql:2.1
Nếu bạn sử dụng Podman, hãy chạy lệnh sau
$ sudo podman run -it --rm --name kafka --pod dbz quay.io/debezium/kafka:2.1
Trong hướng dẫn này, bạn sẽ luôn kết nối với Kafka từ bên trong bộ chứa Docker. Bất kỳ vùng chứa nào trong số này đều có thể giao tiếp với vùng chứa
5 bằng cách liên kết với vùng chứa đó. Nếu bạn cần kết nối với Kafka từ bên ngoài bộ chứa Docker, bạn sẽ phải đặt tùy chọn$ sudo podman run -it --rm --name mysql --pod dbz -e MYSQL_ROOT_PASSWORD=debezium -e MYSQL_USER=mysqluser -e MYSQL_PASSWORD=mysqlpw quay.io/debezium/example-mysql:2.1
6 để quảng cáo địa chỉ Kafka thông qua máy chủ Docker [$ sudo podman run -it --rm --name mysql --pod dbz -e MYSQL_ROOT_PASSWORD=debezium -e MYSQL_USER=mysqluser -e MYSQL_PASSWORD=mysqlpw quay.io/debezium/example-mysql:2.1
7 theo sau là địa chỉ IP hoặc tên máy chủ có thể phân giải của máy chủ Docker]$ sudo podman run -it --rm --name mysql --pod dbz -e MYSQL_ROOT_PASSWORD=debezium -e MYSQL_USER=mysqluser -e MYSQL_PASSWORD=mysqlpw quay.io/debezium/example-mysql:2.1
Xác minh rằng Kafka đã bắt đầu
Bạn sẽ thấy đầu ra tương tự như sau
... 2017-09-21 07:16:59,085 - INFO [main-EventThread:ZkClient@713] - zookeeper state changed [SyncConnected] 2017-09-21 07:16:59,218 - INFO [main:Logging$class@70] - Cluster ID = LPtcBFxzRvOzDSXhc6AamA ... 2017-09-21 07:16:59,649 - INFO [main:Logging$class@70] - [Kafka Server 1], started [1]
1Nhà môi giới Kafka đã bắt đầu thành công và sẵn sàng cho các kết nối khách hàng. Thiết bị đầu cuối sẽ tiếp tục hiển thị đầu ra bổ sung khi Kafka tạo ra nó
Bắt đầu một cơ sở dữ liệu MySQL
Tại thời điểm này, bạn đã khởi động ZooKeeper và Kafka, nhưng bạn vẫn cần một máy chủ cơ sở dữ liệu để Debezium có thể ghi lại các thay đổi. Trong quy trình này, bạn sẽ khởi động máy chủ MySQL với cơ sở dữ liệu mẫu
Thủ tục
Mở một thiết bị đầu cuối mới và sử dụng nó để khởi động một bộ chứa mới chạy máy chủ cơ sở dữ liệu MySQL được cấu hình sẵn với cơ sở dữ liệu
7... 2017-09-21 07:16:59,085 - INFO [main-EventThread:ZkClient@713] - zookeeper state changed [SyncConnected] 2017-09-21 07:16:59,218 - INFO [main:Logging$class@70] - Cluster ID = LPtcBFxzRvOzDSXhc6AamA ... 2017-09-21 07:16:59,649 - INFO [main:Logging$class@70] - [Kafka Server 1], started [1]
Lệnh này chạy một vùng chứa mới bằng phiên bản 2. 1 của hình ảnh
9, dựa trên mysql. 8. 0 hình ảnh. Nó cũng định nghĩa và điền vào một cơ sở dữ liệu$ sudo podman run -it --rm --name mysql --pod dbz -e MYSQL_ROOT_PASSWORD=debezium -e MYSQL_USER=mysqluser -e MYSQL_PASSWORD=mysqlpw quay.io/debezium/example-mysql:2.1
7 mẫu... 2017-09-21 07:16:59,085 - INFO [main-EventThread:ZkClient@713] - zookeeper state changed [SyncConnected] 2017-09-21 07:16:59,218 - INFO [main:Logging$class@70] - Cluster ID = LPtcBFxzRvOzDSXhc6AamA ... 2017-09-21 07:16:59,649 - INFO [main:Logging$class@70] - [Kafka Server 1], started [1]
$ docker run -it --rm --name mysql -p 3306:3306 -e MYSQL_ROOT_PASSWORD=debezium -e MYSQL_USER=mysqluser -e MYSQL_PASSWORD=mysqlpw quay.io/debezium/example-mysql:2.1
2$ docker run -it --rm --name mysql -p 3306:3306 -e MYSQL_ROOT_PASSWORD=debezium -e MYSQL_USER=mysqluser -e MYSQL_PASSWORD=mysqlpw quay.io/debezium/example-mysql:2.1
Bộ chứa có tính tương tác, có nghĩa là đầu vào và đầu ra tiêu chuẩn của thiết bị đầu cuối được gắn vào bộ chứa
3$ docker run -it --rm --name mysql -p 3306:3306 -e MYSQL_ROOT_PASSWORD=debezium -e MYSQL_USER=mysqluser -e MYSQL_PASSWORD=mysqlpw quay.io/debezium/example-mysql:2.1
Vùng chứa sẽ bị xóa khi dừng
3... [System] [MY-010931] [Server] /usr/sbin/mysqld: ready for connections. Version: '8.0.27' socket: '/var/run/mysqld/mysqld.sock' port: 3306 MySQL Community Server - GPL. [System] [MY-011323] [Server] X Plugin ready for connections. Bind-address: '::' port: 33060, socket: /var/run/mysqld/mysqlx.sock
Tên của thùng chứa
4... [System] [MY-010931] [Server] /usr/sbin/mysqld: ready for connections. Version: '8.0.27' socket: '/var/run/mysqld/mysqld.sock' port: 3306 MySQL Community Server - GPL. [System] [MY-011323] [Server] X Plugin ready for connections. Bind-address: '::' port: 33060, socket: /var/run/mysqld/mysqlx.sock
Bản đồ cổng
5 [cổng MySQL mặc định] trong vùng chứa tới cùng một cổng trên máy chủ Docker để các ứng dụng bên ngoài vùng chứa có thể kết nối với máy chủ cơ sở dữ liệu... [System] [MY-010931] [Server] /usr/sbin/mysqld: ready for connections. Version: '8.0.27' socket: '/var/run/mysqld/mysqld.sock' port: 3306 MySQL Community Server - GPL. [System] [MY-011323] [Server] X Plugin ready for connections. Bind-address: '::' port: 33060, socket: /var/run/mysqld/mysqlx.sock
6... [System] [MY-010931] [Server] /usr/sbin/mysqld: ready for connections. Version: '8.0.27' socket: '/var/run/mysqld/mysqld.sock' port: 3306 MySQL Community Server - GPL. [System] [MY-011323] [Server] X Plugin ready for connections. Bind-address: '::' port: 33060, socket: /var/run/mysqld/mysqlx.sock
Tạo người dùng và mật khẩu có các đặc quyền tối thiểu theo yêu cầu của trình kết nối Debezium MySQL
Nếu bạn sử dụng Podman, hãy chạy lệnh sau
$ sudo podman run -it --rm --name mysql --pod dbz -e MYSQL_ROOT_PASSWORD=debezium -e MYSQL_USER=mysqluser -e MYSQL_PASSWORD=mysqlpw quay.io/debezium/example-mysql:2.1
Xác minh rằng máy chủ MySQL bắt đầu
Máy chủ MySQL khởi động và dừng một vài lần khi cấu hình được sửa đổi. Bạn sẽ thấy đầu ra tương tự như sau
... [System] [MY-010931] [Server] /usr/sbin/mysqld: ready for connections. Version: '8.0.27' socket: '/var/run/mysqld/mysqld.sock' port: 3306 MySQL Community Server - GPL. [System] [MY-011323] [Server] X Plugin ready for connections. Bind-address: '::' port: 33060, socket: /var/run/mysqld/mysqlx.sock
Khởi động ứng dụng khách dòng lệnh MySQL
Sau khi khởi động MySQL, bạn khởi động ứng dụng khách dòng lệnh MySQL để truy cập cơ sở dữ liệu
...
2017-09-21 07:16:59,085 - INFO [main-EventThread:ZkClient@713] - zookeeper state changed [SyncConnected]
2017-09-21 07:16:59,218 - INFO [main:Logging$class@70] - Cluster ID = LPtcBFxzRvOzDSXhc6AamA
...
2017-09-21 07:16:59,649 - INFO [main:Logging$class@70] - [Kafka Server 1], started [1]
7 mẫuThủ tục
Mở một thiết bị đầu cuối mới và sử dụng nó để khởi động ứng dụng khách dòng lệnh MySQL trong một vùng chứa
Lệnh này chạy một vùng chứa mới bằng cách sử dụng mysql. 8. 0 và xác định lệnh trình bao để chạy ứng dụng khách dòng lệnh MySQL với các tùy chọn chính xác
$ docker run -it --rm --name mysqlterm --link mysql --rm mysql:8.0 sh -c 'exec mysql -h"$MYSQL_PORT_3306_TCP_ADDR" -P"$MYSQL_PORT_3306_TCP_PORT" -uroot -p"$MYSQL_ENV_MYSQL_ROOT_PASSWORD"'
2$ docker run -it --rm --name mysql -p 3306:3306 -e MYSQL_ROOT_PASSWORD=debezium -e MYSQL_USER=mysqluser -e MYSQL_PASSWORD=mysqlpw quay.io/debezium/example-mysql:2.1
Bộ chứa có tính tương tác, có nghĩa là đầu vào và đầu ra tiêu chuẩn của thiết bị đầu cuối được gắn vào bộ chứa
3$ docker run -it --rm --name mysql -p 3306:3306 -e MYSQL_ROOT_PASSWORD=debezium -e MYSQL_USER=mysqluser -e MYSQL_PASSWORD=mysqlpw quay.io/debezium/example-mysql:2.1
Vùng chứa sẽ bị xóa khi dừng
0$ docker run -it --rm --name mysqlterm --link mysql --rm mysql:8.0 sh -c 'exec mysql -h"$MYSQL_PORT_3306_TCP_ADDR" -P"$MYSQL_PORT_3306_TCP_PORT" -uroot -p"$MYSQL_ENV_MYSQL_ROOT_PASSWORD"'
Tên của thùng chứa
1$ docker run -it --rm --name mysqlterm --link mysql --rm mysql:8.0 sh -c 'exec mysql -h"$MYSQL_PORT_3306_TCP_ADDR" -P"$MYSQL_PORT_3306_TCP_PORT" -uroot -p"$MYSQL_ENV_MYSQL_ROOT_PASSWORD"'
Liên kết vùng chứa với vùng chứa
2$ docker run -it --rm --name mysqlterm --link mysql --rm mysql:8.0 sh -c 'exec mysql -h"$MYSQL_PORT_3306_TCP_ADDR" -P"$MYSQL_PORT_3306_TCP_PORT" -uroot -p"$MYSQL_ENV_MYSQL_ROOT_PASSWORD"'
Nếu bạn sử dụng Podman, hãy chạy lệnh sau
$ sudo podman pod create --name=dbz --publish "9092,3306,8083"
$ sudo podman run -it --rm --name zookeeper --pod dbz quay.io/debezium/zookeeper:2.1
0Xác minh rằng máy khách dòng lệnh MySQL đã bắt đầu
Bạn sẽ thấy đầu ra tương tự như sau
1$ sudo podman pod create --name=dbz --publish "9092,3306,8083" $ sudo podman run -it --rm --name zookeeper --pod dbz quay.io/debezium/zookeeper:2.1
Tại dấu nhắc lệnh
3, hãy chuyển sang cơ sở dữ liệu hàng tồn kho$ docker run -it --rm --name mysqlterm --link mysql --rm mysql:8.0 sh -c 'exec mysql -h"$MYSQL_PORT_3306_TCP_ADDR" -P"$MYSQL_PORT_3306_TCP_PORT" -uroot -p"$MYSQL_ENV_MYSQL_ROOT_PASSWORD"'
2$ sudo podman pod create --name=dbz --publish "9092,3306,8083" $ sudo podman run -it --rm --name zookeeper --pod dbz quay.io/debezium/zookeeper:2.1
Liệt kê các bảng trong cơ sở dữ liệu
3$ sudo podman pod create --name=dbz --publish "9092,3306,8083" $ sudo podman run -it --rm --name zookeeper --pod dbz quay.io/debezium/zookeeper:2.1
Sử dụng ứng dụng khách dòng lệnh MySQL để khám phá cơ sở dữ liệu và xem dữ liệu được tải sẵn trong cơ sở dữ liệu
Ví dụ
4$ sudo podman pod create --name=dbz --publish "9092,3306,8083" $ sudo podman run -it --rm --name zookeeper --pod dbz quay.io/debezium/zookeeper:2.1
Bắt đầu kết nối Kafka
Sau khi khởi động MySQL và kết nối với cơ sở dữ liệu
...
2017-09-21 07:16:59,085 - INFO [main-EventThread:ZkClient@713] - zookeeper state changed [SyncConnected]
2017-09-21 07:16:59,218 - INFO [main:Logging$class@70] - Cluster ID = LPtcBFxzRvOzDSXhc6AamA
...
2017-09-21 07:16:59,649 - INFO [main:Logging$class@70] - [Kafka Server 1], started [1]
7 bằng ứng dụng khách dòng lệnh MySQL, bạn khởi động dịch vụ Kafka Connect. Dịch vụ này hiển thị API REST để quản lý trình kết nối Debezium MySQLThủ tục
Mở một thiết bị đầu cuối mới và sử dụng thiết bị đầu cuối đó để bắt đầu dịch vụ Kafka Connect trong vùng chứa
Lệnh này chạy một vùng chứa mới bằng cách sử dụng 2. 1 phiên bản của hình ảnh
5$ docker run -it --rm --name mysqlterm --link mysql --rm mysql:8.0 sh -c 'exec mysql -h"$MYSQL_PORT_3306_TCP_ADDR" -P"$MYSQL_PORT_3306_TCP_PORT" -uroot -p"$MYSQL_ENV_MYSQL_ROOT_PASSWORD"'
5$ sudo podman pod create --name=dbz --publish "9092,3306,8083" $ sudo podman run -it --rm --name zookeeper --pod dbz quay.io/debezium/zookeeper:2.1
2$ docker run -it --rm --name mysql -p 3306:3306 -e MYSQL_ROOT_PASSWORD=debezium -e MYSQL_USER=mysqluser -e MYSQL_PASSWORD=mysqlpw quay.io/debezium/example-mysql:2.1
Bộ chứa có tính tương tác, có nghĩa là đầu vào và đầu ra tiêu chuẩn của thiết bị đầu cuối được gắn vào bộ chứa
3$ docker run -it --rm --name mysql -p 3306:3306 -e MYSQL_ROOT_PASSWORD=debezium -e MYSQL_USER=mysqluser -e MYSQL_PASSWORD=mysqlpw quay.io/debezium/example-mysql:2.1
Vùng chứa sẽ bị xóa khi dừng
8$ docker run -it --rm --name mysqlterm --link mysql --rm mysql:8.0 sh -c 'exec mysql -h"$MYSQL_PORT_3306_TCP_ADDR" -P"$MYSQL_PORT_3306_TCP_PORT" -uroot -p"$MYSQL_ENV_MYSQL_ROOT_PASSWORD"'
Tên của thùng chứa
9$ docker run -it --rm --name mysqlterm --link mysql --rm mysql:8.0 sh -c 'exec mysql -h"$MYSQL_PORT_3306_TCP_ADDR" -P"$MYSQL_PORT_3306_TCP_PORT" -uroot -p"$MYSQL_ENV_MYSQL_ROOT_PASSWORD"'
Bản đồ cổng
00 trong vùng chứa đến cùng một cổng trên máy chủ Docker. Điều này cho phép các ứng dụng bên ngoài vùng chứa sử dụng API REST của Kafka Connect để thiết lập và quản lý các phiên bản vùng chứa mới$ sudo podman pod create --name=dbz --publish "9092,3306,8083" $ sudo podman run -it --rm --name zookeeper --pod dbz quay.io/debezium/zookeeper:2.1
01$ sudo podman pod create --name=dbz --publish "9092,3306,8083" $ sudo podman run -it --rm --name zookeeper --pod dbz quay.io/debezium/zookeeper:2.1
Đặt các biến môi trường theo yêu cầu của hình ảnh Debezium
02$ sudo podman pod create --name=dbz --publish "9092,3306,8083" $ sudo podman run -it --rm --name zookeeper --pod dbz quay.io/debezium/zookeeper:2.1
Liên kết vùng chứa với các vùng chứa đang chạy Kafka và máy chủ MySQL
Nếu bạn sử dụng Podman, hãy chạy lệnh sau
$ sudo podman pod create --name=dbz --publish "9092,3306,8083"
$ sudo podman run -it --rm --name zookeeper --pod dbz quay.io/debezium/zookeeper:2.1
6Nếu bạn cung cấp tùy chọn lệnh
$ sudo podman pod create --name=dbz --publish "9092,3306,8083"
$ sudo podman run -it --rm --name zookeeper --pod dbz quay.io/debezium/zookeeper:2.1
03 thì API Kafka Connect REST sẽ không lắng nghe trên giao diện $ sudo podman pod create --name=dbz --publish "9092,3306,8083"
$ sudo podman run -it --rm --name zookeeper --pod dbz quay.io/debezium/zookeeper:2.1
04. Điều này có thể gây ra sự cố khi cổng REST bị lộNếu đây là sự cố thì hãy đặt biến môi trường
$ sudo podman pod create --name=dbz --publish "9092,3306,8083"
$ sudo podman run -it --rm --name zookeeper --pod dbz quay.io/debezium/zookeeper:2.1
05 để đảm bảo rằng API REST sẽ có thể truy cập được từ tất cả các giao diệnXác minh rằng Kafka Connect đã bắt đầu và sẵn sàng chấp nhận kết nối
Bạn sẽ thấy đầu ra tương tự như sau
7$ sudo podman pod create --name=dbz --publish "9092,3306,8083" $ sudo podman run -it --rm --name zookeeper --pod dbz quay.io/debezium/zookeeper:2.1
Sử dụng API Kafka Connect REST để kiểm tra trạng thái của dịch vụ Kafka Connect
Kafka Connect hiển thị API REST để quản lý các trình kết nối Debezium. Để giao tiếp với dịch vụ Kafka Connect, bạn có thể sử dụng lệnh
06 để gửi các yêu cầu API tới cổng 8083 của máy chủ Docker [mà bạn đã ánh xạ tới cổng 8083 trong vùng chứa$ sudo podman pod create --name=dbz --publish "9092,3306,8083" $ sudo podman run -it --rm --name zookeeper --pod dbz quay.io/debezium/zookeeper:2.1
07 khi bạn khởi động Kafka Connect]$ sudo podman pod create --name=dbz --publish "9092,3306,8083" $ sudo podman run -it --rm --name zookeeper --pod dbz quay.io/debezium/zookeeper:2.1
Các lệnh này sử dụng
04. Nếu bạn đang sử dụng nền tảng Docker không phải bản địa [chẳng hạn như Hộp công cụ Docker], hãy thay thế$ sudo podman pod create --name=dbz --publish "9092,3306,8083" $ sudo podman run -it --rm --name zookeeper --pod dbz quay.io/debezium/zookeeper:2.1
04 bằng địa chỉ IP của máy chủ Docker của bạn$ sudo podman pod create --name=dbz --publish "9092,3306,8083" $ sudo podman run -it --rm --name zookeeper --pod dbz quay.io/debezium/zookeeper:2.1
Mở một thiết bị đầu cuối mới và kiểm tra trạng thái của dịch vụ Kafka Connect
8$ sudo podman pod create --name=dbz --publish "9092,3306,8083" $ sudo podman run -it --rm --name zookeeper --pod dbz quay.io/debezium/zookeeper:2.1
1Phản hồi cho thấy Kafka Connect phiên bản 3. 3. 1 đang chạy
Kiểm tra danh sách các trình kết nối đã đăng ký với Kafka Connect
9$ sudo podman pod create --name=dbz --publish "9092,3306,8083" $ sudo podman run -it --rm --name zookeeper --pod dbz quay.io/debezium/zookeeper:2.1
1Không có trình kết nối nào hiện được đăng ký với Kafka Connect
Triển khai trình kết nối MySQL
Sau khi bắt đầu các dịch vụ Debezium và MySQL, bạn đã sẵn sàng triển khai trình kết nối Debezium MySQL để nó có thể bắt đầu giám sát cơ sở dữ liệu MySQL mẫu [
...
2017-09-21 07:16:59,085 - INFO [main-EventThread:ZkClient@713] - zookeeper state changed [SyncConnected]
2017-09-21 07:16:59,218 - INFO [main:Logging$class@70] - Cluster ID = LPtcBFxzRvOzDSXhc6AamA
...
2017-09-21 07:16:59,649 - INFO [main:Logging$class@70] - [Kafka Server 1], started [1]
7]Tại thời điểm này, bạn đang chạy các dịch vụ Debezium, máy chủ cơ sở dữ liệu MySQL với cơ sở dữ liệu
...
2017-09-21 07:16:59,085 - INFO [main-EventThread:ZkClient@713] - zookeeper state changed [SyncConnected]
2017-09-21 07:16:59,218 - INFO [main:Logging$class@70] - Cluster ID = LPtcBFxzRvOzDSXhc6AamA
...
2017-09-21 07:16:59,649 - INFO [main:Logging$class@70] - [Kafka Server 1], started [1]
7 mẫu và máy khách dòng lệnh MySQL được kết nối với cơ sở dữ liệu. Để triển khai trình kết nối MySQL, bạn phảiSau khi trình kết nối được đăng ký, nó sẽ bắt đầu theo dõi
13 của máy chủ cơ sở dữ liệu và nó sẽ tạo ra các sự kiện thay đổi cho mỗi hàng thay đổi$ sudo podman pod create --name=dbz --publish "9092,3306,8083" $ sudo podman run -it --rm --name zookeeper --pod dbz quay.io/debezium/zookeeper:2.1
Xem lại đầu ra nhật ký Kafka Connect khi trình kết nối bắt đầu giúp bạn hiểu rõ hơn về từng nhiệm vụ mà nó phải hoàn thành trước khi có thể bắt đầu giám sát
13$ sudo podman pod create --name=dbz --publish "9092,3306,8083" $ sudo podman run -it --rm --name zookeeper --pod dbz quay.io/debezium/zookeeper:2.1
Đăng ký một trình kết nối để giám sát cơ sở dữ liệu ...
2017-09-21 07:16:59,085 - INFO [main-EventThread:ZkClient@713] - zookeeper state changed [SyncConnected]
2017-09-21 07:16:59,218 - INFO [main:Logging$class@70] - Cluster ID = LPtcBFxzRvOzDSXhc6AamA
...
2017-09-21 07:16:59,649 - INFO [main:Logging$class@70] - [Kafka Server 1], started [1]
7
...
2017-09-21 07:16:59,085 - INFO [main-EventThread:ZkClient@713] - zookeeper state changed [SyncConnected]
2017-09-21 07:16:59,218 - INFO [main:Logging$class@70] - Cluster ID = LPtcBFxzRvOzDSXhc6AamA
...
2017-09-21 07:16:59,649 - INFO [main:Logging$class@70] - [Kafka Server 1], started [1]
Bằng cách đăng ký trình kết nối Debezium MySQL, trình kết nối sẽ bắt đầu giám sát
$ sudo podman pod create --name=dbz --publish "9092,3306,8083"
$ sudo podman run -it --rm --name zookeeper --pod dbz quay.io/debezium/zookeeper:2.1
13 của máy chủ cơ sở dữ liệu MySQL. $ sudo podman pod create --name=dbz --publish "9092,3306,8083"
$ sudo podman run -it --rm --name zookeeper --pod dbz quay.io/debezium/zookeeper:2.1
13 ghi lại tất cả các giao dịch của cơ sở dữ liệu [chẳng hạn như thay đổi đối với các hàng riêng lẻ và thay đổi đối với lược đồ]. Khi một hàng trong cơ sở dữ liệu thay đổi, Debezium tạo ra một sự kiện thay đổiTrong môi trường sản xuất, thông thường bạn sẽ sử dụng các công cụ Kafka để tạo các chủ đề cần thiết theo cách thủ công, bao gồm chỉ định số lượng bản sao hoặc bạn sẽ sử dụng cơ chế Kafka Connect để tùy chỉnh cài đặt của các chủ đề được tạo tự động. Tuy nhiên, đối với hướng dẫn này, Kafka được cấu hình để tự động tạo các chủ đề chỉ với một bản sao
Thủ tục
Xem lại cấu hình của trình kết nối Debezium MySQL mà bạn sẽ đăng ký
Trước khi đăng ký trình kết nối, bạn nên làm quen với cấu hình của nó. Trong bước tiếp theo, bạn sẽ đăng ký trình kết nối sau
0Starting up in standalone mode ZooKeeper JMX enabled by default Using config: /zookeeper/conf/zoo.cfg 2017-09-21 07:15:55,417 - INFO [main:QuorumPeerConfig@134] - Reading configuration from: /zookeeper/conf/zoo.cfg 2017-09-21 07:15:55,419 - INFO [main:DatadirCleanupManager@78] - autopurge.snapRetainCount set to 3 2017-09-21 07:15:55,419 - INFO [main:DatadirCleanupManager@79] - autopurge.purgeInterval set to 1 ... port 0.0.0.0/0.0.0.0:2181 [1]
1 Tên của đầu nối. 2 Cấu hình của đầu nối. 3Chỉ một tác vụ nên hoạt động tại một thời điểm. Vì trình kết nối MySQL đọc
13 của máy chủ MySQL, nên việc sử dụng một tác vụ trình kết nối duy nhất đảm bảo xử lý sự kiện và thứ tự phù hợp. Dịch vụ Kafka Connect sử dụng các trình kết nối để bắt đầu một hoặc nhiều tác vụ thực hiện công việc và nó tự động phân phối các tác vụ đang chạy trên cụm dịch vụ Kafka Connect. Nếu bất kỳ dịch vụ nào dừng hoặc gặp sự cố, các tác vụ đó sẽ được phân phối lại cho các dịch vụ đang chạy. 4Máy chủ cơ sở dữ liệu, là tên của bộ chứa Docker chạy máy chủ MySQL [$ sudo podman pod create --name=dbz --publish "9092,3306,8083" $ sudo podman run -it --rm --name zookeeper --pod dbz quay.io/debezium/zookeeper:2.1
2]. Docker điều khiển ngăn xếp mạng bên trong các vùng chứa sao cho mỗi vùng chứa được liên kết có thể được giải quyết bằng$ docker run -it --rm --name mysqlterm --link mysql --rm mysql:8.0 sh -c 'exec mysql -h"$MYSQL_PORT_3306_TCP_ADDR" -P"$MYSQL_PORT_3306_TCP_PORT" -uroot -p"$MYSQL_ENV_MYSQL_ROOT_PASSWORD"'
20 bằng cách sử dụng tên vùng chứa cho tên máy chủ. Nếu MySQL đang chạy trên một mạng bình thường, bạn sẽ chỉ định địa chỉ IP hoặc tên máy chủ có thể phân giải cho giá trị này. 5Một tiền tố chủ đề duy nhất. Tên này sẽ được sử dụng làm tiền tố cho tất cả các chủ đề Kafka. 6Chỉ những thay đổi trong cơ sở dữ liệu$ sudo podman pod create --name=dbz --publish "9092,3306,8083" $ sudo podman run -it --rm --name zookeeper --pod dbz quay.io/debezium/zookeeper:2.1
7 mới được phát hiện. 7Trình kết nối sẽ lưu trữ lịch sử của các lược đồ cơ sở dữ liệu trong Kafka bằng cách sử dụng trình môi giới này [cùng một trình môi giới mà bạn đang gửi sự kiện] và tên chủ đề. Sau khi khởi động lại, trình kết nối sẽ khôi phục các lược đồ của cơ sở dữ liệu đã tồn tại tại thời điểm trong... 2017-09-21 07:16:59,085 - INFO [main-EventThread:ZkClient@713] - zookeeper state changed [SyncConnected] 2017-09-21 07:16:59,218 - INFO [main:Logging$class@70] - Cluster ID = LPtcBFxzRvOzDSXhc6AamA ... 2017-09-21 07:16:59,649 - INFO [main:Logging$class@70] - [Kafka Server 1], started [1]
13 khi trình kết nối bắt đầu đọc$ sudo podman pod create --name=dbz --publish "9092,3306,8083" $ sudo podman run -it --rm --name zookeeper --pod dbz quay.io/debezium/zookeeper:2.1
Để biết thêm thông tin, xem
Vì lý do bảo mật, bạn không nên đặt mật khẩu hoặc các bí mật khác ở dạng văn bản thuần túy vào cấu hình trình kết nối. Thay vào đó, mọi bí mật phải được đưa ra bên ngoài thông qua cơ chế được xác định trong KIP-297["Bí mật bên ngoài cho cấu hình kết nối"]
Mở một thiết bị đầu cuối mới và sử dụng lệnh
06 để đăng ký trình kết nối Debezium MySQL$ sudo podman pod create --name=dbz --publish "9092,3306,8083" $ sudo podman run -it --rm --name zookeeper --pod dbz quay.io/debezium/zookeeper:2.1
Lệnh này sử dụng API của dịch vụ Kafka Connect để gửi yêu cầu
24 đối với tài nguyên$ sudo podman pod create --name=dbz --publish "9092,3306,8083" $ sudo podman run -it --rm --name zookeeper --pod dbz quay.io/debezium/zookeeper:2.1
25 với tài liệu JSON mô tả trình kết nối mới [được gọi là$ sudo podman pod create --name=dbz --publish "9092,3306,8083" $ sudo podman run -it --rm --name zookeeper --pod dbz quay.io/debezium/zookeeper:2.1
26]$ sudo podman pod create --name=dbz --publish "9092,3306,8083" $ sudo podman run -it --rm --name zookeeper --pod dbz quay.io/debezium/zookeeper:2.1
Lệnh này sử dụng
04 để kết nối với máy chủ Docker. Nếu bạn đang sử dụng nền tảng Docker không phải bản địa, hãy thay thế$ sudo podman pod create --name=dbz --publish "9092,3306,8083" $ sudo podman run -it --rm --name zookeeper --pod dbz quay.io/debezium/zookeeper:2.1
04 bằng địa chỉ IP của máy chủ Docker của bạn$ sudo podman pod create --name=dbz --publish "9092,3306,8083" $ sudo podman run -it --rm --name zookeeper --pod dbz quay.io/debezium/zookeeper:2.1
1Starting up in standalone mode ZooKeeper JMX enabled by default Using config: /zookeeper/conf/zoo.cfg 2017-09-21 07:15:55,417 - INFO [main:QuorumPeerConfig@134] - Reading configuration from: /zookeeper/conf/zoo.cfg 2017-09-21 07:15:55,419 - INFO [main:DatadirCleanupManager@78] - autopurge.snapRetainCount set to 3 2017-09-21 07:15:55,419 - INFO [main:DatadirCleanupManager@79] - autopurge.purgeInterval set to 1 ... port 0.0.0.0/0.0.0.0:2181 [1]
Người dùng Windows có thể cần thoát khỏi dấu ngoặc kép. Ví dụ
2Starting up in standalone mode ZooKeeper JMX enabled by default Using config: /zookeeper/conf/zoo.cfg 2017-09-21 07:15:55,417 - INFO [main:QuorumPeerConfig@134] - Reading configuration from: /zookeeper/conf/zoo.cfg 2017-09-21 07:15:55,419 - INFO [main:DatadirCleanupManager@78] - autopurge.snapRetainCount set to 3 2017-09-21 07:15:55,419 - INFO [main:DatadirCleanupManager@79] - autopurge.purgeInterval set to 1 ... port 0.0.0.0/0.0.0.0:2181 [1]
Nếu không, bạn có thể thấy lỗi như sau
3Starting up in standalone mode ZooKeeper JMX enabled by default Using config: /zookeeper/conf/zoo.cfg 2017-09-21 07:15:55,417 - INFO [main:QuorumPeerConfig@134] - Reading configuration from: /zookeeper/conf/zoo.cfg 2017-09-21 07:15:55,419 - INFO [main:DatadirCleanupManager@78] - autopurge.snapRetainCount set to 3 2017-09-21 07:15:55,419 - INFO [main:DatadirCleanupManager@79] - autopurge.purgeInterval set to 1 ... port 0.0.0.0/0.0.0.0:2181 [1]
Nếu bạn sử dụng Podman, hãy chạy lệnh sau
Starting up in standalone mode
ZooKeeper JMX enabled by default
Using config: /zookeeper/conf/zoo.cfg
2017-09-21 07:15:55,417 - INFO [main:QuorumPeerConfig@134] - Reading configuration from: /zookeeper/conf/zoo.cfg
2017-09-21 07:15:55,419 - INFO [main:DatadirCleanupManager@78] - autopurge.snapRetainCount set to 3
2017-09-21 07:15:55,419 - INFO [main:DatadirCleanupManager@79] - autopurge.purgeInterval set to 1
...
port 0.0.0.0/0.0.0.0:2181 [1]
4Xác minh rằng
26 được bao gồm trong danh sách các trình kết nối$ sudo podman pod create --name=dbz --publish "9092,3306,8083" $ sudo podman run -it --rm --name zookeeper --pod dbz quay.io/debezium/zookeeper:2.1
5Starting up in standalone mode ZooKeeper JMX enabled by default Using config: /zookeeper/conf/zoo.cfg 2017-09-21 07:15:55,417 - INFO [main:QuorumPeerConfig@134] - Reading configuration from: /zookeeper/conf/zoo.cfg 2017-09-21 07:15:55,419 - INFO [main:DatadirCleanupManager@78] - autopurge.snapRetainCount set to 3 2017-09-21 07:15:55,419 - INFO [main:DatadirCleanupManager@79] - autopurge.purgeInterval set to 1 ... port 0.0.0.0/0.0.0.0:2181 [1]
Xem lại nhiệm vụ của trình kết nối
6Starting up in standalone mode ZooKeeper JMX enabled by default Using config: /zookeeper/conf/zoo.cfg 2017-09-21 07:15:55,417 - INFO [main:QuorumPeerConfig@134] - Reading configuration from: /zookeeper/conf/zoo.cfg 2017-09-21 07:15:55,419 - INFO [main:DatadirCleanupManager@78] - autopurge.snapRetainCount set to 3 2017-09-21 07:15:55,419 - INFO [main:DatadirCleanupManager@79] - autopurge.purgeInterval set to 1 ... port 0.0.0.0/0.0.0.0:2181 [1]
Bạn sẽ thấy một phản hồi tương tự như sau [được định dạng để dễ đọc]
7Starting up in standalone mode ZooKeeper JMX enabled by default Using config: /zookeeper/conf/zoo.cfg 2017-09-21 07:15:55,417 - INFO [main:QuorumPeerConfig@134] - Reading configuration from: /zookeeper/conf/zoo.cfg 2017-09-21 07:15:55,419 - INFO [main:DatadirCleanupManager@78] - autopurge.snapRetainCount set to 3 2017-09-21 07:15:55,419 - INFO [main:DatadirCleanupManager@79] - autopurge.purgeInterval set to 1 ... port 0.0.0.0/0.0.0.0:2181 [1]
1 Trình kết nối đang chạy một tác vụ duy nhất [tác vụ
30] để thực hiện công việc của nó. Trình kết nối chỉ hỗ trợ một tác vụ duy nhất, bởi vì MySQL ghi lại tất cả các hoạt động của nó trong một tuần tự$ sudo podman pod create --name=dbz --publish "9092,3306,8083" $ sudo podman run -it --rm --name zookeeper --pod dbz quay.io/debezium/zookeeper:2.1
13. Điều này có nghĩa là trình kết nối chỉ cần một trình đọc để có được chế độ xem nhất quán, có thứ tự về tất cả các sự kiện$ sudo podman pod create --name=dbz --publish "9092,3306,8083" $ sudo podman run -it --rm --name zookeeper --pod dbz quay.io/debezium/zookeeper:2.1
Xem trình kết nối bắt đầu
Khi bạn đăng ký một trình kết nối, nó sẽ tạo ra một lượng lớn đầu ra nhật ký trong bộ chứa Kafka Connect. Bằng cách xem lại kết quả này, bạn có thể hiểu rõ hơn về quy trình mà trình kết nối trải qua từ khi nó được tạo cho đến khi nó bắt đầu đọc
$ sudo podman pod create --name=dbz --publish "9092,3306,8083"
$ sudo podman run -it --rm --name zookeeper --pod dbz quay.io/debezium/zookeeper:2.1
13 của máy chủ MySQLSau khi đăng ký trình kết nối
$ sudo podman pod create --name=dbz --publish "9092,3306,8083"
$ sudo podman run -it --rm --name zookeeper --pod dbz quay.io/debezium/zookeeper:2.1
26, bạn có thể xem lại đầu ra nhật ký trong bộ chứa Kafka Connect [$ sudo podman pod create --name=dbz --publish "9092,3306,8083"
$ sudo podman run -it --rm --name zookeeper --pod dbz quay.io/debezium/zookeeper:2.1
07] để theo dõi trạng thái của trình kết nốiMột vài dòng đầu tiên hiển thị trình kết nối [
$ sudo podman pod create --name=dbz --publish "9092,3306,8083"
$ sudo podman run -it --rm --name zookeeper --pod dbz quay.io/debezium/zookeeper:2.1
26] đang được tạo và bắt đầuStarting up in standalone mode
ZooKeeper JMX enabled by default
Using config: /zookeeper/conf/zoo.cfg
2017-09-21 07:15:55,417 - INFO [main:QuorumPeerConfig@134] - Reading configuration from: /zookeeper/conf/zoo.cfg
2017-09-21 07:15:55,419 - INFO [main:DatadirCleanupManager@78] - autopurge.snapRetainCount set to 3
2017-09-21 07:15:55,419 - INFO [main:DatadirCleanupManager@79] - autopurge.purgeInterval set to 1
...
port 0.0.0.0/0.0.0.0:2181 [1]
8Xa hơn nữa, bạn sẽ thấy đầu ra như sau từ trình kết nối
Starting up in standalone mode
ZooKeeper JMX enabled by default
Using config: /zookeeper/conf/zoo.cfg
2017-09-21 07:15:55,417 - INFO [main:QuorumPeerConfig@134] - Reading configuration from: /zookeeper/conf/zoo.cfg
2017-09-21 07:15:55,419 - INFO [main:DatadirCleanupManager@78] - autopurge.snapRetainCount set to 3
2017-09-21 07:15:55,419 - INFO [main:DatadirCleanupManager@79] - autopurge.purgeInterval set to 1
...
port 0.0.0.0/0.0.0.0:2181 [1]
9Đầu ra nhật ký Debezium sử dụng ngữ cảnh chẩn đoán được ánh xạ [MDC] để cung cấp thông tin cụ thể theo luồng trong đầu ra nhật ký và giúp dễ hiểu hơn những gì đang xảy ra trong dịch vụ Kafka Connect đa luồng. Điều này bao gồm loại trình kết nối [
$ sudo podman pod create --name=dbz --publish "9092,3306,8083"
$ sudo podman run -it --rm --name zookeeper --pod dbz quay.io/debezium/zookeeper:2.1
36 trong thông báo tường trình ở trên], tên logic của trình kết nối [$ sudo podman pod create --name=dbz --publish "9092,3306,8083"
$ sudo podman run -it --rm --name zookeeper --pod dbz quay.io/debezium/zookeeper:2.1
37 ở trên] và hoạt động của trình kết nối [$ sudo podman pod create --name=dbz --publish "9092,3306,8083"
$ sudo podman run -it --rm --name zookeeper --pod dbz quay.io/debezium/zookeeper:2.1
38, $ sudo podman pod create --name=dbz --publish "9092,3306,8083"
$ sudo podman run -it --rm --name zookeeper --pod dbz quay.io/debezium/zookeeper:2.1
39 và $ sudo podman pod create --name=dbz --publish "9092,3306,8083"
$ sudo podman run -it --rm --name zookeeper --pod dbz quay.io/debezium/zookeeper:2.1
13]Trong đầu ra nhật ký ở trên, một vài dòng đầu tiên liên quan đến hoạt động
$ sudo podman pod create --name=dbz --publish "9092,3306,8083"
$ sudo podman run -it --rm --name zookeeper --pod dbz quay.io/debezium/zookeeper:2.1
38 của trình kết nối và báo cáo một số thông tin sổ sách kế toán [trong trường hợp này, trình kết nối đã được bắt đầu mà không có phần bù trước]. Ba dòng tiếp theo liên quan đến hoạt động $ sudo podman pod create --name=dbz --publish "9092,3306,8083"
$ sudo podman run -it --rm --name zookeeper --pod dbz quay.io/debezium/zookeeper:2.1
39 của trình kết nối và báo cáo rằng ảnh chụp nhanh đang được bắt đầu bằng cách sử dụng người dùng MySQL $ sudo podman pod create --name=dbz --publish "9092,3306,8083"
$ sudo podman run -it --rm --name zookeeper --pod dbz quay.io/debezium/zookeeper:2.1
43 cùng với các khoản trợ cấp MySQL được liên kết với người dùng đóNếu trình kết nối không thể kết nối hoặc nếu nó không nhìn thấy bất kỳ bảng nào hoặc
$ sudo podman pod create --name=dbz --publish "9092,3306,8083"
$ sudo podman run -it --rm --name zookeeper --pod dbz quay.io/debezium/zookeeper:2.1
13, hãy kiểm tra các khoản trợ cấp này để đảm bảo rằng tất cả những điều được liệt kê ở trên đều được bao gồmTiếp theo, trình kết nối báo cáo các bước tạo nên thao tác chụp nhanh
$ docker run -it --rm --name kafka -p 9092:9092 --link zookeeper:zookeeper quay.io/debezium/kafka:2.1
0Mỗi bước trong số này báo cáo những gì trình kết nối đang thực hiện để thực hiện ảnh chụp nhanh nhất quán. Ví dụ: Bước 6 liên quan đến kỹ thuật đảo ngược các câu lệnh DDL
$ sudo podman pod create --name=dbz --publish "9092,3306,8083"
$ sudo podman run -it --rm --name zookeeper --pod dbz quay.io/debezium/zookeeper:2.1
45 cho các bảng đang được ghi lại và khóa ghi toàn cầu chỉ 1 giây sau khi lấy được nó và Bước 7 đọc tất cả các hàng trong mỗi bảng và báo cáo thời gian đã thực hiện và . Trong trường hợp này, trình kết nối đã hoàn thành ảnh chụp nhanh nhất quán chỉ trong chưa đầy 1 giâyQuá trình chụp nhanh sẽ mất nhiều thời gian hơn với cơ sở dữ liệu của bạn, nhưng trình kết nối xuất ra đủ thông báo bản ghi để bạn có thể theo dõi xem nó đang làm việc trên cái gì, ngay cả khi các bảng có nhiều hàng. Và mặc dù khóa ghi độc quyền được sử dụng khi bắt đầu quá trình chụp nhanh, nhưng nó sẽ không tồn tại lâu ngay cả đối với cơ sở dữ liệu lớn. Điều này là do khóa được giải phóng trước khi bất kỳ dữ liệu nào được sao chép. Để biết thêm thông tin, hãy xem
Tiếp theo, Kafka Connect báo cáo một số "lỗi". Tuy nhiên, bạn có thể yên tâm bỏ qua những cảnh báo này. những thông báo này chỉ có nghĩa là các chủ đề Kafka mới đã được tạo và Kafka phải chỉ định một người lãnh đạo mới cho mỗi chủ đề
$ docker run -it --rm --name kafka -p 9092:9092 --link zookeeper:zookeeper quay.io/debezium/kafka:2.1
1Cuối cùng, đầu ra nhật ký cho thấy trình kết nối đã chuyển từ chế độ ảnh chụp nhanh sang chế độ đọc liên tục
$ sudo podman pod create --name=dbz --publish "9092,3306,8083"
$ sudo podman run -it --rm --name zookeeper --pod dbz quay.io/debezium/zookeeper:2.1
13 của máy chủ MySQL$ docker run -it --rm --name kafka -p 9092:9092 --link zookeeper:zookeeper quay.io/debezium/kafka:2.1
2Xem sự kiện thay đổi
Sau khi triển khai trình kết nối Debezium MySQL, nó bắt đầu theo dõi cơ sở dữ liệu
...
2017-09-21 07:16:59,085 - INFO [main-EventThread:ZkClient@713] - zookeeper state changed [SyncConnected]
2017-09-21 07:16:59,218 - INFO [main:Logging$class@70] - Cluster ID = LPtcBFxzRvOzDSXhc6AamA
...
2017-09-21 07:16:59,649 - INFO [main:Logging$class@70] - [Kafka Server 1], started [1]
7 để biết các sự kiện thay đổi dữ liệuKhi bạn xem trình kết nối khởi động, bạn sẽ thấy rằng các sự kiện được viết cho các chủ đề sau với tiền tố
$ sudo podman pod create --name=dbz --publish "9092,3306,8083"
$ sudo podman run -it --rm --name zookeeper --pod dbz quay.io/debezium/zookeeper:2.1
37 [tên của trình kết nối]$ sudo podman pod create --name=dbz --publish "9092,3306,8083"
$ sudo podman run -it --rm --name zookeeper --pod dbz quay.io/debezium/zookeeper:2.1
37Nơi mà tất cả các câu lệnh DDL được viết
$ sudo podman pod create --name=dbz --publish "9092,3306,8083"
$ sudo podman run -it --rm --name zookeeper --pod dbz quay.io/debezium/zookeeper:2.1
50Nắm bắt các sự kiện thay đổi cho bảng
$ sudo podman pod create --name=dbz --publish "9092,3306,8083"
$ sudo podman run -it --rm --name zookeeper --pod dbz quay.io/debezium/zookeeper:2.1
51 trong cơ sở dữ liệu ...
2017-09-21 07:16:59,085 - INFO [main-EventThread:ZkClient@713] - zookeeper state changed [SyncConnected]
2017-09-21 07:16:59,218 - INFO [main:Logging$class@70] - Cluster ID = LPtcBFxzRvOzDSXhc6AamA
...
2017-09-21 07:16:59,649 - INFO [main:Logging$class@70] - [Kafka Server 1], started [1]
7$ sudo podman pod create --name=dbz --publish "9092,3306,8083"
$ sudo podman run -it --rm --name zookeeper --pod dbz quay.io/debezium/zookeeper:2.1
53Nắm bắt các sự kiện thay đổi cho bảng
$ sudo podman pod create --name=dbz --publish "9092,3306,8083"
$ sudo podman run -it --rm --name zookeeper --pod dbz quay.io/debezium/zookeeper:2.1
54 trong cơ sở dữ liệu ...
2017-09-21 07:16:59,085 - INFO [main-EventThread:ZkClient@713] - zookeeper state changed [SyncConnected]
2017-09-21 07:16:59,218 - INFO [main:Logging$class@70] - Cluster ID = LPtcBFxzRvOzDSXhc6AamA
...
2017-09-21 07:16:59,649 - INFO [main:Logging$class@70] - [Kafka Server 1], started [1]
7$ sudo podman pod create --name=dbz --publish "9092,3306,8083"
$ sudo podman run -it --rm --name zookeeper --pod dbz quay.io/debezium/zookeeper:2.1
56Nắm bắt các sự kiện thay đổi cho bảng
$ sudo podman pod create --name=dbz --publish "9092,3306,8083"
$ sudo podman run -it --rm --name zookeeper --pod dbz quay.io/debezium/zookeeper:2.1
57 trong cơ sở dữ liệu ...
2017-09-21 07:16:59,085 - INFO [main-EventThread:ZkClient@713] - zookeeper state changed [SyncConnected]
2017-09-21 07:16:59,218 - INFO [main:Logging$class@70] - Cluster ID = LPtcBFxzRvOzDSXhc6AamA
...
2017-09-21 07:16:59,649 - INFO [main:Logging$class@70] - [Kafka Server 1], started [1]
7$ sudo podman pod create --name=dbz --publish "9092,3306,8083"
$ sudo podman run -it --rm --name zookeeper --pod dbz quay.io/debezium/zookeeper:2.1
59Nắm bắt các sự kiện thay đổi cho bảng
$ sudo podman pod create --name=dbz --publish "9092,3306,8083"
$ sudo podman run -it --rm --name zookeeper --pod dbz quay.io/debezium/zookeeper:2.1
60 trong cơ sở dữ liệu ...
2017-09-21 07:16:59,085 - INFO [main-EventThread:ZkClient@713] - zookeeper state changed [SyncConnected]
2017-09-21 07:16:59,218 - INFO [main:Logging$class@70] - Cluster ID = LPtcBFxzRvOzDSXhc6AamA
...
2017-09-21 07:16:59,649 - INFO [main:Logging$class@70] - [Kafka Server 1], started [1]
7Đối với hướng dẫn này, bạn sẽ khám phá chủ đề
$ sudo podman pod create --name=dbz --publish "9092,3306,8083"
$ sudo podman run -it --rm --name zookeeper --pod dbz quay.io/debezium/zookeeper:2.1
56. Trong chủ đề này, bạn sẽ thấy các loại sự kiện thay đổi khác nhau để xem cách trình kết nối nắm bắt chúngXem một sự kiện tạo
Bằng cách xem chủ đề
$ sudo podman pod create --name=dbz --publish "9092,3306,8083"
$ sudo podman run -it --rm --name zookeeper --pod dbz quay.io/debezium/zookeeper:2.1
56, bạn có thể thấy cách trình kết nối MySQL đã chụp tạo sự kiện trong cơ sở dữ liệu ...
2017-09-21 07:16:59,085 - INFO [main-EventThread:ZkClient@713] - zookeeper state changed [SyncConnected]
2017-09-21 07:16:59,218 - INFO [main:Logging$class@70] - Cluster ID = LPtcBFxzRvOzDSXhc6AamA
...
2017-09-21 07:16:59,649 - INFO [main:Logging$class@70] - [Kafka Server 1], started [1]
7. Trong trường hợp này, sự kiện tạo nắm bắt khách hàng mới được thêm vào cơ sở dữ liệuThủ tục
Mở một thiết bị đầu cuối mới và sử dụng nó để khởi động tiện ích
65 để xem chủ đề$ sudo podman pod create --name=dbz --publish "9092,3306,8083" $ sudo podman run -it --rm --name zookeeper --pod dbz quay.io/debezium/zookeeper:2.1
56 từ đầu chủ đề$ sudo podman pod create --name=dbz --publish "9092,3306,8083" $ sudo podman run -it --rm --name zookeeper --pod dbz quay.io/debezium/zookeeper:2.1
Tiện ích
65 rất đơn giản và hạn chế về chức năng. Nó không được ứng dụng sử dụng để tiêu thụ các sự kiện. Trong trường hợp đó, thay vào đó, bạn sẽ sử dụng người tiêu dùng Kafka và các thư viện người tiêu dùng hiện hành cung cấp đầy đủ chức năng và tính linh hoạt$ sudo podman pod create --name=dbz --publish "9092,3306,8083" $ sudo podman run -it --rm --name zookeeper --pod dbz quay.io/debezium/zookeeper:2.1
Lệnh này chạy tiện ích
65 trong vùng chứa mới bằng cách sử dụng 2. 1 phiên bản của hình ảnh$ sudo podman pod create --name=dbz --publish "9092,3306,8083" $ sudo podman run -it --rm --name zookeeper --pod dbz quay.io/debezium/zookeeper:2.1
69$ sudo podman pod create --name=dbz --publish "9092,3306,8083" $ sudo podman run -it --rm --name zookeeper --pod dbz quay.io/debezium/zookeeper:2.1
3$ docker run -it --rm --name kafka -p 9092:9092 --link zookeeper:zookeeper quay.io/debezium/kafka:2.1
70$ sudo podman pod create --name=dbz --publish "9092,3306,8083" $ sudo podman run -it --rm --name zookeeper --pod dbz quay.io/debezium/zookeeper:2.1
Theo dõi tất cả các sự kiện kể từ khi chủ đề được tạo. Nếu không có tùy chọn này,
65 sẽ chỉ hiển thị các sự kiện được ghi lại sau khi bạn bắt đầu xem$ sudo podman pod create --name=dbz --publish "9092,3306,8083" $ sudo podman run -it --rm --name zookeeper --pod dbz quay.io/debezium/zookeeper:2.1
72$ sudo podman pod create --name=dbz --publish "9092,3306,8083" $ sudo podman run -it --rm --name zookeeper --pod dbz quay.io/debezium/zookeeper:2.1
Chỉ định rằng đầu ra phải bao gồm khóa của sự kiện. Trong trường hợp này, nó chứa khóa chính của hàng
Nếu bạn sử dụng Podman, hãy chạy lệnh sau
4$ docker run -it --rm --name kafka -p 9092:9092 --link zookeeper:zookeeper quay.io/debezium/kafka:2.1
Tiện ích
65 trả về các bản ghi sự kiện từ bảng$ sudo podman pod create --name=dbz --publish "9092,3306,8083" $ sudo podman run -it --rm --name zookeeper --pod dbz quay.io/debezium/zookeeper:2.1
57. Có bốn sự kiện, một sự kiện cho mỗi hàng trong bảng. Mỗi sự kiện được định dạng bằng JSON, vì đó là cách bạn định cấu hình dịch vụ Kafka Connect. Có hai tài liệu JSON cho mỗi sự kiện. một cho khóa và một cho giá trị$ sudo podman pod create --name=dbz --publish "9092,3306,8083" $ sudo podman run -it --rm --name zookeeper --pod dbz quay.io/debezium/zookeeper:2.1
Bạn sẽ thấy đầu ra tương tự như sau
5$ docker run -it --rm --name kafka -p 9092:9092 --link zookeeper:zookeeper quay.io/debezium/kafka:2.1
Tiện ích này tiếp tục theo dõi chủ đề, vì vậy mọi sự kiện mới sẽ tự động xuất hiện miễn là tiện ích đang chạy
Đối với sự kiện cuối cùng, hãy xem lại chi tiết của khóa
Dưới đây là chi tiết về khóa của sự kiện cuối cùng [được định dạng để dễ đọc]
6$ docker run -it --rm --name kafka -p 9092:9092 --link zookeeper:zookeeper quay.io/debezium/kafka:2.1
Sự kiện có hai phần. một
75 và một$ sudo podman pod create --name=dbz --publish "9092,3306,8083" $ sudo podman run -it --rm --name zookeeper --pod dbz quay.io/debezium/zookeeper:2.1
76.$ sudo podman pod create --name=dbz --publish "9092,3306,8083" $ sudo podman run -it --rm --name zookeeper --pod dbz quay.io/debezium/zookeeper:2.1
75 chứa lược đồ Kafka Connect mô tả nội dung trong tải trọng. Trong trường hợp này, tải trọng là một$ sudo podman pod create --name=dbz --publish "9092,3306,8083" $ sudo podman run -it --rm --name zookeeper --pod dbz quay.io/debezium/zookeeper:2.1
78 có tên là$ sudo podman pod create --name=dbz --publish "9092,3306,8083" $ sudo podman run -it --rm --name zookeeper --pod dbz quay.io/debezium/zookeeper:2.1
79 không phải là tùy chọn và có một trường bắt buộc [$ sudo podman pod create --name=dbz --publish "9092,3306,8083" $ sudo podman run -it --rm --name zookeeper --pod dbz quay.io/debezium/zookeeper:2.1
80 thuộc loại$ sudo podman pod create --name=dbz --publish "9092,3306,8083" $ sudo podman run -it --rm --name zookeeper --pod dbz quay.io/debezium/zookeeper:2.1
81]$ sudo podman pod create --name=dbz --publish "9092,3306,8083" $ sudo podman run -it --rm --name zookeeper --pod dbz quay.io/debezium/zookeeper:2.1
76 có một trường$ sudo podman pod create --name=dbz --publish "9092,3306,8083" $ sudo podman run -it --rm --name zookeeper --pod dbz quay.io/debezium/zookeeper:2.1
80 duy nhất, với giá trị là$ sudo podman pod create --name=dbz --publish "9092,3306,8083" $ sudo podman run -it --rm --name zookeeper --pod dbz quay.io/debezium/zookeeper:2.1
84$ sudo podman pod create --name=dbz --publish "9092,3306,8083" $ sudo podman run -it --rm --name zookeeper --pod dbz quay.io/debezium/zookeeper:2.1
Bằng cách xem lại khóa của sự kiện, bạn có thể thấy rằng sự kiện này áp dụng cho hàng trong bảng
85 có cột khóa chính$ sudo podman pod create --name=dbz --publish "9092,3306,8083" $ sudo podman run -it --rm --name zookeeper --pod dbz quay.io/debezium/zookeeper:2.1
80 có giá trị là$ sudo podman pod create --name=dbz --publish "9092,3306,8083" $ sudo podman run -it --rm --name zookeeper --pod dbz quay.io/debezium/zookeeper:2.1
84$ sudo podman pod create --name=dbz --publish "9092,3306,8083" $ sudo podman run -it --rm --name zookeeper --pod dbz quay.io/debezium/zookeeper:2.1
Xem lại chi tiết giá trị của cùng một sự kiện
Giá trị của sự kiện cho biết rằng hàng đã được tạo và mô tả nội dung của hàng đó [trong trường hợp này là
80,$ sudo podman pod create --name=dbz --publish "9092,3306,8083" $ sudo podman run -it --rm --name zookeeper --pod dbz quay.io/debezium/zookeeper:2.1
89,$ sudo podman pod create --name=dbz --publish "9092,3306,8083" $ sudo podman run -it --rm --name zookeeper --pod dbz quay.io/debezium/zookeeper:2.1
90 và$ sudo podman pod create --name=dbz --publish "9092,3306,8083" $ sudo podman run -it --rm --name zookeeper --pod dbz quay.io/debezium/zookeeper:2.1
91 của hàng được chèn]$ sudo podman pod create --name=dbz --publish "9092,3306,8083" $ sudo podman run -it --rm --name zookeeper --pod dbz quay.io/debezium/zookeeper:2.1
Dưới đây là chi tiết về giá trị của sự kiện cuối cùng [được định dạng để dễ đọc]
7$ docker run -it --rm --name kafka -p 9092:9092 --link zookeeper:zookeeper quay.io/debezium/kafka:2.1
Phần này của sự kiện dài hơn nhiều, nhưng giống như chìa khóa của sự kiện, nó cũng có một
75 và một$ sudo podman pod create --name=dbz --publish "9092,3306,8083" $ sudo podman run -it --rm --name zookeeper --pod dbz quay.io/debezium/zookeeper:2.1
76.$ sudo podman pod create --name=dbz --publish "9092,3306,8083" $ sudo podman run -it --rm --name zookeeper --pod dbz quay.io/debezium/zookeeper:2.1
75 chứa lược đồ Kafka Connect có tên$ sudo podman pod create --name=dbz --publish "9092,3306,8083" $ sudo podman run -it --rm --name zookeeper --pod dbz quay.io/debezium/zookeeper:2.1
95 [phiên bản 1] có thể chứa năm trường$ sudo podman pod create --name=dbz --publish "9092,3306,8083" $ sudo podman run -it --rm --name zookeeper --pod dbz quay.io/debezium/zookeeper:2.1
96$ sudo podman pod create --name=dbz --publish "9092,3306,8083" $ sudo podman run -it --rm --name zookeeper --pod dbz quay.io/debezium/zookeeper:2.1
Trường bắt buộc chứa giá trị chuỗi mô tả loại thao tác. Các giá trị cho trình kết nối MySQL là
97 để tạo [hoặc chèn],$ sudo podman pod create --name=dbz --publish "9092,3306,8083" $ sudo podman run -it --rm --name zookeeper --pod dbz quay.io/debezium/zookeeper:2.1
98 để cập nhật,$ sudo podman pod create --name=dbz --publish "9092,3306,8083" $ sudo podman run -it --rm --name zookeeper --pod dbz quay.io/debezium/zookeeper:2.1
99 để xóa và$ sudo podman pod create --name=dbz --publish "9092,3306,8083" $ sudo podman run -it --rm --name zookeeper --pod dbz quay.io/debezium/zookeeper:2.1
00 để đọc [trong trường hợp ảnh chụp nhanh]Starting up in standalone mode ZooKeeper JMX enabled by default Using config: /zookeeper/conf/zoo.cfg 2017-09-21 07:15:55,417 - INFO [main:QuorumPeerConfig@134] - Reading configuration from: /zookeeper/conf/zoo.cfg 2017-09-21 07:15:55,419 - INFO [main:DatadirCleanupManager@78] - autopurge.snapRetainCount set to 3 2017-09-21 07:15:55,419 - INFO [main:DatadirCleanupManager@79] - autopurge.purgeInterval set to 1 ... port 0.0.0.0/0.0.0.0:2181 [1]
01Starting up in standalone mode ZooKeeper JMX enabled by default Using config: /zookeeper/conf/zoo.cfg 2017-09-21 07:15:55,417 - INFO [main:QuorumPeerConfig@134] - Reading configuration from: /zookeeper/conf/zoo.cfg 2017-09-21 07:15:55,419 - INFO [main:DatadirCleanupManager@78] - autopurge.snapRetainCount set to 3 2017-09-21 07:15:55,419 - INFO [main:DatadirCleanupManager@79] - autopurge.purgeInterval set to 1 ... port 0.0.0.0/0.0.0.0:2181 [1]
Một trường tùy chọn, nếu có, chứa trạng thái của hàng trước khi sự kiện xảy ra. Cấu trúc sẽ được mô tả bằng lược đồ
02 Kafka Connect, mà trình kết nốiStarting up in standalone mode ZooKeeper JMX enabled by default Using config: /zookeeper/conf/zoo.cfg 2017-09-21 07:15:55,417 - INFO [main:QuorumPeerConfig@134] - Reading configuration from: /zookeeper/conf/zoo.cfg 2017-09-21 07:15:55,419 - INFO [main:DatadirCleanupManager@78] - autopurge.snapRetainCount set to 3 2017-09-21 07:15:55,419 - INFO [main:DatadirCleanupManager@79] - autopurge.purgeInterval set to 1 ... port 0.0.0.0/0.0.0.0:2181 [1]
37 sử dụng cho tất cả các hàng trong bảng$ sudo podman pod create --name=dbz --publish "9092,3306,8083" $ sudo podman run -it --rm --name zookeeper --pod dbz quay.io/debezium/zookeeper:2.1
85$ sudo podman pod create --name=dbz --publish "9092,3306,8083" $ sudo podman run -it --rm --name zookeeper --pod dbz quay.io/debezium/zookeeper:2.1
05Starting up in standalone mode ZooKeeper JMX enabled by default Using config: /zookeeper/conf/zoo.cfg 2017-09-21 07:15:55,417 - INFO [main:QuorumPeerConfig@134] - Reading configuration from: /zookeeper/conf/zoo.cfg 2017-09-21 07:15:55,419 - INFO [main:DatadirCleanupManager@78] - autopurge.snapRetainCount set to 3 2017-09-21 07:15:55,419 - INFO [main:DatadirCleanupManager@79] - autopurge.purgeInterval set to 1 ... port 0.0.0.0/0.0.0.0:2181 [1]
Một trường tùy chọn, nếu có, chứa trạng thái của hàng sau khi sự kiện xảy ra. Cấu trúc được mô tả bởi cùng một lược đồ
02 Kafka Connect được sử dụng trongStarting up in standalone mode ZooKeeper JMX enabled by default Using config: /zookeeper/conf/zoo.cfg 2017-09-21 07:15:55,417 - INFO [main:QuorumPeerConfig@134] - Reading configuration from: /zookeeper/conf/zoo.cfg 2017-09-21 07:15:55,419 - INFO [main:DatadirCleanupManager@78] - autopurge.snapRetainCount set to 3 2017-09-21 07:15:55,419 - INFO [main:DatadirCleanupManager@79] - autopurge.purgeInterval set to 1 ... port 0.0.0.0/0.0.0.0:2181 [1]
01Starting up in standalone mode ZooKeeper JMX enabled by default Using config: /zookeeper/conf/zoo.cfg 2017-09-21 07:15:55,417 - INFO [main:QuorumPeerConfig@134] - Reading configuration from: /zookeeper/conf/zoo.cfg 2017-09-21 07:15:55,419 - INFO [main:DatadirCleanupManager@78] - autopurge.snapRetainCount set to 3 2017-09-21 07:15:55,419 - INFO [main:DatadirCleanupManager@79] - autopurge.purgeInterval set to 1 ... port 0.0.0.0/0.0.0.0:2181 [1]
08Starting up in standalone mode ZooKeeper JMX enabled by default Using config: /zookeeper/conf/zoo.cfg 2017-09-21 07:15:55,417 - INFO [main:QuorumPeerConfig@134] - Reading configuration from: /zookeeper/conf/zoo.cfg 2017-09-21 07:15:55,419 - INFO [main:DatadirCleanupManager@78] - autopurge.snapRetainCount set to 3 2017-09-21 07:15:55,419 - INFO [main:DatadirCleanupManager@79] - autopurge.purgeInterval set to 1 ... port 0.0.0.0/0.0.0.0:2181 [1]
Trường bắt buộc chứa cấu trúc mô tả siêu dữ liệu nguồn cho sự kiện, trong trường hợp của MySQL, chứa một số trường. tên trình kết nối, tên của tệp
13 nơi sự kiện được ghi lại, vị trí trong tệp$ sudo podman pod create --name=dbz --publish "9092,3306,8083" $ sudo podman run -it --rm --name zookeeper --pod dbz quay.io/debezium/zookeeper:2.1
13 nơi sự kiện xuất hiện, hàng trong sự kiện [nếu có nhiều hơn một], tên của cơ sở dữ liệu bị ảnh hưởng và bảng,$ sudo podman pod create --name=dbz --publish "9092,3306,8083" $ sudo podman run -it --rm --name zookeeper --pod dbz quay.io/debezium/zookeeper:2.1
11Starting up in standalone mode ZooKeeper JMX enabled by default Using config: /zookeeper/conf/zoo.cfg 2017-09-21 07:15:55,417 - INFO [main:QuorumPeerConfig@134] - Reading configuration from: /zookeeper/conf/zoo.cfg 2017-09-21 07:15:55,419 - INFO [main:DatadirCleanupManager@78] - autopurge.snapRetainCount set to 3 2017-09-21 07:15:55,419 - INFO [main:DatadirCleanupManager@79] - autopurge.purgeInterval set to 1 ... port 0.0.0.0/0.0.0.0:2181 [1]
Một trường tùy chọn, nếu có, chứa thời gian [sử dụng đồng hồ hệ thống trong JVM đang chạy tác vụ Kafka Connect] mà tại đó trình kết nối đã xử lý sự kiện
Các biểu diễn JSON của các sự kiện dài hơn nhiều so với các hàng mà chúng mô tả. Điều này là do, với mọi khóa và giá trị sự kiện, Kafka Connect gửi lược đồ mô tả tải trọng. Theo thời gian, cấu trúc này có thể thay đổi. Tuy nhiên, việc có các lược đồ cho khóa và giá trị trong chính sự kiện giúp việc sử dụng các ứng dụng hiểu thông báo dễ dàng hơn nhiều, đặc biệt là khi chúng phát triển theo thời gian
Trình kết nối Debezium MySQL xây dựng các lược đồ này dựa trên cấu trúc của các bảng cơ sở dữ liệu. Nếu bạn sử dụng các câu lệnh DDL để thay đổi định nghĩa bảng trong cơ sở dữ liệu MySQL, trình kết nối sẽ đọc các câu lệnh DDL này và cập nhật các lược đồ Kafka Connect của nó. Đây là cách duy nhất mà mỗi sự kiện được cấu trúc chính xác như bảng nơi nó bắt nguồn vào thời điểm sự kiện xảy ra. Tuy nhiên, chủ đề Kafka chứa tất cả các sự kiện cho một bảng có thể có các sự kiện tương ứng với từng trạng thái của định nghĩa bảng
Trình chuyển đổi JSON bao gồm các lược đồ khóa và giá trị trong mọi thông báo, do đó, nó tạo ra các sự kiện dài dòng. Ngoài ra, bạn có thể sử dụng Apache Avro làm định dạng tuần tự hóa, dẫn đến các thông báo sự kiện nhỏ hơn nhiều. Điều này là do nó chuyển đổi từng lược đồ Kafka Connect thành lược đồ Avro và lưu trữ các lược đồ Avro trong một dịch vụ Schema Registry riêng biệt. Do đó, khi bộ chuyển đổi Avro tuần tự hóa một thông báo sự kiện, nó chỉ đặt một mã định danh duy nhất cho lược đồ cùng với biểu diễn nhị phân được mã hóa Avro của giá trị. Do đó, các tin nhắn được đánh số thứ tự được truyền qua dây và được lưu trữ trong Kafka nhỏ hơn nhiều so với những gì bạn đã thấy ở đây. Trên thực tế, Bộ chuyển đổi Avro có thể sử dụng các kỹ thuật tiến hóa lược đồ Avro để duy trì lịch sử của từng lược đồ trong Sổ đăng ký lược đồ
So sánh lược đồ khóa và giá trị của sự kiện với trạng thái của cơ sở dữ liệu
7. Trong thiết bị đầu cuối đang chạy máy khách dòng lệnh MySQL, hãy chạy câu lệnh sau... 2017-09-21 07:16:59,085 - INFO [main-EventThread:ZkClient@713] - zookeeper state changed [SyncConnected] 2017-09-21 07:16:59,218 - INFO [main:Logging$class@70] - Cluster ID = LPtcBFxzRvOzDSXhc6AamA ... 2017-09-21 07:16:59,649 - INFO [main:Logging$class@70] - [Kafka Server 1], started [1]
4$ sudo podman pod create --name=dbz --publish "9092,3306,8083" $ sudo podman run -it --rm --name zookeeper --pod dbz quay.io/debezium/zookeeper:2.1
Điều này cho thấy rằng các bản ghi sự kiện mà bạn đã xem xét khớp với các bản ghi trong cơ sở dữ liệu
Cập nhật cơ sở dữ liệu và xem sự kiện cập nhật
Bây giờ bạn đã thấy cách trình kết nối Debezium MySQL nắm bắt các sự kiện tạo trong cơ sở dữ liệu
...
2017-09-21 07:16:59,085 - INFO [main-EventThread:ZkClient@713] - zookeeper state changed [SyncConnected]
2017-09-21 07:16:59,218 - INFO [main:Logging$class@70] - Cluster ID = LPtcBFxzRvOzDSXhc6AamA
...
2017-09-21 07:16:59,649 - INFO [main:Logging$class@70] - [Kafka Server 1], started [1]
7, bây giờ bạn sẽ thay đổi một trong các bản ghi và xem cách trình kết nối nắm bắt nóBằng cách hoàn thành quy trình này, bạn sẽ học cách tìm chi tiết về những gì đã thay đổi trong một cam kết cơ sở dữ liệu và cách bạn có thể so sánh các sự kiện thay đổi để xác định thời điểm thay đổi xảy ra so với các thay đổi khác
Thủ tục
Trong thiết bị đầu cuối đang chạy máy khách dòng lệnh MySQL, hãy chạy câu lệnh sau
9$ docker run -it --rm --name kafka -p 9092:9092 --link zookeeper:zookeeper quay.io/debezium/kafka:2.1
Xem bảng
57 được cập nhật$ sudo podman pod create --name=dbz --publish "9092,3306,8083" $ sudo podman run -it --rm --name zookeeper --pod dbz quay.io/debezium/zookeeper:2.1
0$ sudo podman run -it --rm --name kafka --pod dbz quay.io/debezium/kafka:2.1
Chuyển sang thiết bị đầu cuối đang chạy
65 để xem sự kiện thứ năm mới$ sudo podman pod create --name=dbz --publish "9092,3306,8083" $ sudo podman run -it --rm --name zookeeper --pod dbz quay.io/debezium/zookeeper:2.1
Bằng cách thay đổi một bản ghi trong bảng
57, trình kết nối Debezium MySQL đã tạo ra một sự kiện mới. Bạn sẽ thấy hai tài liệu JSON mới. một cho khóa của sự kiện và một cho giá trị của sự kiện mới$ sudo podman pod create --name=dbz --publish "9092,3306,8083" $ sudo podman run -it --rm --name zookeeper --pod dbz quay.io/debezium/zookeeper:2.1
Dưới đây là chi tiết về khóa cho sự kiện cập nhật [được định dạng để dễ đọc]
1$ sudo podman run -it --rm --name kafka --pod dbz quay.io/debezium/kafka:2.1
Khóa này giống với khóa cho các sự kiện trước đó
Đây là giá trị của sự kiện mới đó. Không có thay đổi nào trong phần
75, vì vậy chỉ có phần$ sudo podman pod create --name=dbz --publish "9092,3306,8083" $ sudo podman run -it --rm --name zookeeper --pod dbz quay.io/debezium/zookeeper:2.1
76 được hiển thị [được định dạng để dễ đọc]$ sudo podman pod create --name=dbz --publish "9092,3306,8083" $ sudo podman run -it --rm --name zookeeper --pod dbz quay.io/debezium/zookeeper:2.1
2$ sudo podman run -it --rm --name kafka --pod dbz quay.io/debezium/kafka:2.1
1 Trường
01 hiện có trạng thái của hàng với các giá trị trước khi xác nhận cơ sở dữ liệu. 2TrườngStarting up in standalone mode ZooKeeper JMX enabled by default Using config: /zookeeper/conf/zoo.cfg 2017-09-21 07:15:55,417 - INFO [main:QuorumPeerConfig@134] - Reading configuration from: /zookeeper/conf/zoo.cfg 2017-09-21 07:15:55,419 - INFO [main:DatadirCleanupManager@78] - autopurge.snapRetainCount set to 3 2017-09-21 07:15:55,419 - INFO [main:DatadirCleanupManager@79] - autopurge.purgeInterval set to 1 ... port 0.0.0.0/0.0.0.0:2181 [1]
05 hiện có trạng thái cập nhật của hàng và giá trịStarting up in standalone mode ZooKeeper JMX enabled by default Using config: /zookeeper/conf/zoo.cfg 2017-09-21 07:15:55,417 - INFO [main:QuorumPeerConfig@134] - Reading configuration from: /zookeeper/conf/zoo.cfg 2017-09-21 07:15:55,419 - INFO [main:DatadirCleanupManager@78] - autopurge.snapRetainCount set to 3 2017-09-21 07:15:55,419 - INFO [main:DatadirCleanupManager@79] - autopurge.purgeInterval set to 1 ... port 0.0.0.0/0.0.0.0:2181 [1]
89 hiện là$ sudo podman pod create --name=dbz --publish "9092,3306,8083" $ sudo podman run -it --rm --name zookeeper --pod dbz quay.io/debezium/zookeeper:2.1
22. 3Cấu trúc trườngStarting up in standalone mode ZooKeeper JMX enabled by default Using config: /zookeeper/conf/zoo.cfg 2017-09-21 07:15:55,417 - INFO [main:QuorumPeerConfig@134] - Reading configuration from: /zookeeper/conf/zoo.cfg 2017-09-21 07:15:55,419 - INFO [main:DatadirCleanupManager@78] - autopurge.snapRetainCount set to 3 2017-09-21 07:15:55,419 - INFO [main:DatadirCleanupManager@79] - autopurge.purgeInterval set to 1 ... port 0.0.0.0/0.0.0.0:2181 [1]
08 có nhiều giá trị giống như trước đây, ngoại trừ trườngStarting up in standalone mode ZooKeeper JMX enabled by default Using config: /zookeeper/conf/zoo.cfg 2017-09-21 07:15:55,417 - INFO [main:QuorumPeerConfig@134] - Reading configuration from: /zookeeper/conf/zoo.cfg 2017-09-21 07:15:55,419 - INFO [main:DatadirCleanupManager@78] - autopurge.snapRetainCount set to 3 2017-09-21 07:15:55,419 - INFO [main:DatadirCleanupManager@79] - autopurge.purgeInterval set to 1 ... port 0.0.0.0/0.0.0.0:2181 [1]
24 vàStarting up in standalone mode ZooKeeper JMX enabled by default Using config: /zookeeper/conf/zoo.cfg 2017-09-21 07:15:55,417 - INFO [main:QuorumPeerConfig@134] - Reading configuration from: /zookeeper/conf/zoo.cfg 2017-09-21 07:15:55,419 - INFO [main:DatadirCleanupManager@78] - autopurge.snapRetainCount set to 3 2017-09-21 07:15:55,419 - INFO [main:DatadirCleanupManager@79] - autopurge.purgeInterval set to 1 ... port 0.0.0.0/0.0.0.0:2181 [1]
25 đã thay đổi [trườngStarting up in standalone mode ZooKeeper JMX enabled by default Using config: /zookeeper/conf/zoo.cfg 2017-09-21 07:15:55,417 - INFO [main:QuorumPeerConfig@134] - Reading configuration from: /zookeeper/conf/zoo.cfg 2017-09-21 07:15:55,419 - INFO [main:DatadirCleanupManager@78] - autopurge.snapRetainCount set to 3 2017-09-21 07:15:55,419 - INFO [main:DatadirCleanupManager@79] - autopurge.purgeInterval set to 1 ... port 0.0.0.0/0.0.0.0:2181 [1]
26 có thể đã thay đổi trong các trường hợp khác]. 4Giá trị trườngStarting up in standalone mode ZooKeeper JMX enabled by default Using config: /zookeeper/conf/zoo.cfg 2017-09-21 07:15:55,417 - INFO [main:QuorumPeerConfig@134] - Reading configuration from: /zookeeper/conf/zoo.cfg 2017-09-21 07:15:55,419 - INFO [main:DatadirCleanupManager@78] - autopurge.snapRetainCount set to 3 2017-09-21 07:15:55,419 - INFO [main:DatadirCleanupManager@79] - autopurge.purgeInterval set to 1 ... port 0.0.0.0/0.0.0.0:2181 [1]
96 hiện là$ sudo podman pod create --name=dbz --publish "9092,3306,8083" $ sudo podman run -it --rm --name zookeeper --pod dbz quay.io/debezium/zookeeper:2.1
98, biểu thị rằng hàng này đã thay đổi do cập nhật. 5Trường$ sudo podman pod create --name=dbz --publish "9092,3306,8083" $ sudo podman run -it --rm --name zookeeper --pod dbz quay.io/debezium/zookeeper:2.1
11 hiển thị dấu thời gian khi Debezium xử lý sự kiện nàyStarting up in standalone mode ZooKeeper JMX enabled by default Using config: /zookeeper/conf/zoo.cfg 2017-09-21 07:15:55,417 - INFO [main:QuorumPeerConfig@134] - Reading configuration from: /zookeeper/conf/zoo.cfg 2017-09-21 07:15:55,419 - INFO [main:DatadirCleanupManager@78] - autopurge.snapRetainCount set to 3 2017-09-21 07:15:55,419 - INFO [main:DatadirCleanupManager@79] - autopurge.purgeInterval set to 1 ... port 0.0.0.0/0.0.0.0:2181 [1]
Bằng cách xem phần
76, bạn có thể tìm hiểu một số điều quan trọng về sự kiện cập nhật$ sudo podman pod create --name=dbz --publish "9092,3306,8083" $ sudo podman run -it --rm --name zookeeper --pod dbz quay.io/debezium/zookeeper:2.1
Bằng cách so sánh các cấu trúc
01 vàStarting up in standalone mode ZooKeeper JMX enabled by default Using config: /zookeeper/conf/zoo.cfg 2017-09-21 07:15:55,417 - INFO [main:QuorumPeerConfig@134] - Reading configuration from: /zookeeper/conf/zoo.cfg 2017-09-21 07:15:55,419 - INFO [main:DatadirCleanupManager@78] - autopurge.snapRetainCount set to 3 2017-09-21 07:15:55,419 - INFO [main:DatadirCleanupManager@79] - autopurge.purgeInterval set to 1 ... port 0.0.0.0/0.0.0.0:2181 [1]
05, bạn có thể xác định điều gì đã thực sự thay đổi trong hàng bị ảnh hưởng do cam kếtStarting up in standalone mode ZooKeeper JMX enabled by default Using config: /zookeeper/conf/zoo.cfg 2017-09-21 07:15:55,417 - INFO [main:QuorumPeerConfig@134] - Reading configuration from: /zookeeper/conf/zoo.cfg 2017-09-21 07:15:55,419 - INFO [main:DatadirCleanupManager@78] - autopurge.snapRetainCount set to 3 2017-09-21 07:15:55,419 - INFO [main:DatadirCleanupManager@79] - autopurge.purgeInterval set to 1 ... port 0.0.0.0/0.0.0.0:2181 [1]
Bằng cách xem xét cấu trúc
08, bạn có thể tìm thấy thông tin về bản ghi thay đổi của MySQL [cung cấp khả năng truy xuất nguồn gốc]Starting up in standalone mode ZooKeeper JMX enabled by default Using config: /zookeeper/conf/zoo.cfg 2017-09-21 07:15:55,417 - INFO [main:QuorumPeerConfig@134] - Reading configuration from: /zookeeper/conf/zoo.cfg 2017-09-21 07:15:55,419 - INFO [main:DatadirCleanupManager@78] - autopurge.snapRetainCount set to 3 2017-09-21 07:15:55,419 - INFO [main:DatadirCleanupManager@79] - autopurge.purgeInterval set to 1 ... port 0.0.0.0/0.0.0.0:2181 [1]
Bằng cách so sánh phần
76 của một sự kiện với các sự kiện khác trong cùng một chủ đề [hoặc một chủ đề khác], bạn có thể xác định xem sự kiện đó xảy ra trước, sau hay là một phần của cùng một cam kết MySQL với một sự kiện khác$ sudo podman pod create --name=dbz --publish "9092,3306,8083" $ sudo podman run -it --rm --name zookeeper --pod dbz quay.io/debezium/zookeeper:2.1
Xóa một bản ghi trong cơ sở dữ liệu và xem sự kiện xóa
Bây giờ bạn đã thấy cách trình kết nối Debezium MySQL nắm bắt các sự kiện tạo và cập nhật trong cơ sở dữ liệu
...
2017-09-21 07:16:59,085 - INFO [main-EventThread:ZkClient@713] - zookeeper state changed [SyncConnected]
2017-09-21 07:16:59,218 - INFO [main:Logging$class@70] - Cluster ID = LPtcBFxzRvOzDSXhc6AamA
...
2017-09-21 07:16:59,649 - INFO [main:Logging$class@70] - [Kafka Server 1], started [1]
7, bây giờ bạn sẽ xóa một trong các bản ghi và xem cách trình kết nối nắm bắt nóBằng cách hoàn thành quy trình này, bạn sẽ tìm hiểu cách tìm thông tin chi tiết về các sự kiện xóa và cách Kafka sử dụng tính năng nén nhật ký để giảm số lượng các sự kiện xóa trong khi vẫn cho phép người tiêu dùng nhận được tất cả các sự kiện
Thủ tục
Trong thiết bị đầu cuối đang chạy máy khách dòng lệnh MySQL, hãy chạy câu lệnh sau
3$ sudo podman run -it --rm --name kafka --pod dbz quay.io/debezium/kafka:2.1
Nếu lệnh trên không thành công do vi phạm ràng buộc khóa ngoài, thì bạn phải xóa tham chiếu địa chỉ khách hàng khỏi bảng địa chỉ bằng cách sử dụng câu lệnh sau
4$ sudo podman run -it --rm --name kafka --pod dbz quay.io/debezium/kafka:2.1
Chuyển sang thiết bị đầu cuối đang chạy
65 để xem hai sự kiện mới$ sudo podman pod create --name=dbz --publish "9092,3306,8083" $ sudo podman run -it --rm --name zookeeper --pod dbz quay.io/debezium/zookeeper:2.1
Bằng cách xóa một hàng trong bảng
57, trình kết nối Debezium MySQL đã tạo ra hai sự kiện mới$ sudo podman pod create --name=dbz --publish "9092,3306,8083" $ sudo podman run -it --rm --name zookeeper --pod dbz quay.io/debezium/zookeeper:2.1
Xem lại khóa và giá trị cho sự kiện mới đầu tiên
Dưới đây là chi tiết về khóa cho sự kiện mới đầu tiên [được định dạng để dễ đọc]
5$ sudo podman run -it --rm --name kafka --pod dbz quay.io/debezium/kafka:2.1
Khóa này giống với khóa trong hai sự kiện trước mà bạn đã xem
Đây là giá trị của sự kiện mới đầu tiên [được định dạng để dễ đọc]
6$ sudo podman run -it --rm --name kafka --pod dbz quay.io/debezium/kafka:2.1
1 Trường
01 hiện có trạng thái của hàng đã bị xóa với cam kết cơ sở dữ liệu. 2 TrườngStarting up in standalone mode ZooKeeper JMX enabled by default Using config: /zookeeper/conf/zoo.cfg 2017-09-21 07:15:55,417 - INFO [main:QuorumPeerConfig@134] - Reading configuration from: /zookeeper/conf/zoo.cfg 2017-09-21 07:15:55,419 - INFO [main:DatadirCleanupManager@78] - autopurge.snapRetainCount set to 3 2017-09-21 07:15:55,419 - INFO [main:DatadirCleanupManager@79] - autopurge.purgeInterval set to 1 ... port 0.0.0.0/0.0.0.0:2181 [1]
05 làStarting up in standalone mode ZooKeeper JMX enabled by default Using config: /zookeeper/conf/zoo.cfg 2017-09-21 07:15:55,417 - INFO [main:QuorumPeerConfig@134] - Reading configuration from: /zookeeper/conf/zoo.cfg 2017-09-21 07:15:55,419 - INFO [main:DatadirCleanupManager@78] - autopurge.snapRetainCount set to 3 2017-09-21 07:15:55,419 - INFO [main:DatadirCleanupManager@79] - autopurge.purgeInterval set to 1 ... port 0.0.0.0/0.0.0.0:2181 [1]
40 vì hàng không còn tồn tại. 3Cấu trúc trườngStarting up in standalone mode ZooKeeper JMX enabled by default Using config: /zookeeper/conf/zoo.cfg 2017-09-21 07:15:55,417 - INFO [main:QuorumPeerConfig@134] - Reading configuration from: /zookeeper/conf/zoo.cfg 2017-09-21 07:15:55,419 - INFO [main:DatadirCleanupManager@78] - autopurge.snapRetainCount set to 3 2017-09-21 07:15:55,419 - INFO [main:DatadirCleanupManager@79] - autopurge.purgeInterval set to 1 ... port 0.0.0.0/0.0.0.0:2181 [1]
08 có nhiều giá trị giống như trước đây, ngoại trừ trườngStarting up in standalone mode ZooKeeper JMX enabled by default Using config: /zookeeper/conf/zoo.cfg 2017-09-21 07:15:55,417 - INFO [main:QuorumPeerConfig@134] - Reading configuration from: /zookeeper/conf/zoo.cfg 2017-09-21 07:15:55,419 - INFO [main:DatadirCleanupManager@78] - autopurge.snapRetainCount set to 3 2017-09-21 07:15:55,419 - INFO [main:DatadirCleanupManager@79] - autopurge.purgeInterval set to 1 ... port 0.0.0.0/0.0.0.0:2181 [1]
24 vàStarting up in standalone mode ZooKeeper JMX enabled by default Using config: /zookeeper/conf/zoo.cfg 2017-09-21 07:15:55,417 - INFO [main:QuorumPeerConfig@134] - Reading configuration from: /zookeeper/conf/zoo.cfg 2017-09-21 07:15:55,419 - INFO [main:DatadirCleanupManager@78] - autopurge.snapRetainCount set to 3 2017-09-21 07:15:55,419 - INFO [main:DatadirCleanupManager@79] - autopurge.purgeInterval set to 1 ... port 0.0.0.0/0.0.0.0:2181 [1]
25 đã thay đổi [trườngStarting up in standalone mode ZooKeeper JMX enabled by default Using config: /zookeeper/conf/zoo.cfg 2017-09-21 07:15:55,417 - INFO [main:QuorumPeerConfig@134] - Reading configuration from: /zookeeper/conf/zoo.cfg 2017-09-21 07:15:55,419 - INFO [main:DatadirCleanupManager@78] - autopurge.snapRetainCount set to 3 2017-09-21 07:15:55,419 - INFO [main:DatadirCleanupManager@79] - autopurge.purgeInterval set to 1 ... port 0.0.0.0/0.0.0.0:2181 [1]
26 có thể đã thay đổi trong các trường hợp khác]. 4Giá trị trườngStarting up in standalone mode ZooKeeper JMX enabled by default Using config: /zookeeper/conf/zoo.cfg 2017-09-21 07:15:55,417 - INFO [main:QuorumPeerConfig@134] - Reading configuration from: /zookeeper/conf/zoo.cfg 2017-09-21 07:15:55,419 - INFO [main:DatadirCleanupManager@78] - autopurge.snapRetainCount set to 3 2017-09-21 07:15:55,419 - INFO [main:DatadirCleanupManager@79] - autopurge.purgeInterval set to 1 ... port 0.0.0.0/0.0.0.0:2181 [1]
96 bây giờ là$ sudo podman pod create --name=dbz --publish "9092,3306,8083" $ sudo podman run -it --rm --name zookeeper --pod dbz quay.io/debezium/zookeeper:2.1
99, có nghĩa là hàng này đã bị xóa. 5Trường$ sudo podman pod create --name=dbz --publish "9092,3306,8083" $ sudo podman run -it --rm --name zookeeper --pod dbz quay.io/debezium/zookeeper:2.1
11 hiển thị dấu thời gian khi Debezium xử lý sự kiện nàyStarting up in standalone mode ZooKeeper JMX enabled by default Using config: /zookeeper/conf/zoo.cfg 2017-09-21 07:15:55,417 - INFO [main:QuorumPeerConfig@134] - Reading configuration from: /zookeeper/conf/zoo.cfg 2017-09-21 07:15:55,419 - INFO [main:DatadirCleanupManager@78] - autopurge.snapRetainCount set to 3 2017-09-21 07:15:55,419 - INFO [main:DatadirCleanupManager@79] - autopurge.purgeInterval set to 1 ... port 0.0.0.0/0.0.0.0:2181 [1]
Do đó, sự kiện này cung cấp cho người tiêu dùng thông tin cần thiết để xử lý việc xóa hàng. Các giá trị cũ cũng được cung cấp vì một số người tiêu dùng có thể yêu cầu họ xử lý việc xóa đúng cách
Xem lại khóa và giá trị cho sự kiện mới thứ hai
Đây là chìa khóa cho sự kiện mới thứ hai [được định dạng để dễ đọc]
1$ sudo podman run -it --rm --name kafka --pod dbz quay.io/debezium/kafka:2.1
Một lần nữa, khóa này hoàn toàn giống với khóa trong ba sự kiện trước mà bạn đã xem
Đây là giá trị của cùng một sự kiện đó [được định dạng để dễ đọc]
8$ sudo podman run -it --rm --name kafka --pod dbz quay.io/debezium/kafka:2.1
Nếu Kafka được thiết lập để nén nhật ký, nó sẽ xóa các thư cũ hơn khỏi chủ đề nếu có ít nhất một thư sau đó trong chủ đề có cùng khóa. Sự kiện cuối cùng này được gọi là sự kiện Tombstone, bởi vì nó có một khóa và một giá trị trống. Điều này có nghĩa là Kafka sẽ xóa tất cả các tin nhắn trước đó bằng cùng một khóa. Mặc dù các tin nhắn trước đó sẽ bị xóa nhưng sự kiện Tombstone có nghĩa là người tiêu dùng vẫn có thể đọc chủ đề từ đầu và không bỏ lỡ bất kỳ sự kiện nào
Khởi động lại dịch vụ Kafka Connect
Bây giờ bạn đã thấy cách trình kết nối Debezium MySQL nắm bắt các sự kiện tạo, cập nhật và xóa, bây giờ bạn sẽ thấy cách nó có thể nắm bắt các sự kiện thay đổi ngay cả khi nó không chạy
Dịch vụ Kafka Connect tự động quản lý các tác vụ cho các trình kết nối đã đăng ký của nó. Do đó, nếu nó ngoại tuyến, khi khởi động lại, nó sẽ bắt đầu mọi tác vụ không chạy. Điều này có nghĩa là ngay cả khi Debezium không chạy, nó vẫn có thể báo cáo các thay đổi trong cơ sở dữ liệu
Trong quy trình này, bạn sẽ dừng Kafka Connect, thay đổi một số dữ liệu trong cơ sở dữ liệu, sau đó khởi động lại Kafka Connect để xem các sự kiện thay đổi
Thủ tục
Mở một thiết bị đầu cuối mới và sử dụng nó để dừng bộ chứa
07 đang chạy dịch vụ Kafka Connect$ sudo podman pod create --name=dbz --publish "9092,3306,8083" $ sudo podman run -it --rm --name zookeeper --pod dbz quay.io/debezium/zookeeper:2.1
9$ sudo podman run -it --rm --name kafka --pod dbz quay.io/debezium/kafka:2.1
Vùng chứa
07 bị dừng và dịch vụ Kafka Connect tắt một cách duyên dáng$ sudo podman pod create --name=dbz --publish "9092,3306,8083" $ sudo podman run -it --rm --name zookeeper --pod dbz quay.io/debezium/zookeeper:2.1
Vì bạn đã chạy vùng chứa với tùy chọn
3, Docker sẽ xóa vùng chứa sau khi nó dừng$ docker run -it --rm --name mysql -p 3306:3306 -e MYSQL_ROOT_PASSWORD=debezium -e MYSQL_USER=mysqluser -e MYSQL_PASSWORD=mysqlpw quay.io/debezium/example-mysql:2.1
Trong khi dịch vụ ngừng hoạt động, hãy chuyển sang thiết bị đầu cuối cho máy khách dòng lệnh MySQL và thêm một vài bản ghi
0... 2017-09-21 07:16:59,085 - INFO [main-EventThread:ZkClient@713] - zookeeper state changed [SyncConnected] 2017-09-21 07:16:59,218 - INFO [main:Logging$class@70] - Cluster ID = LPtcBFxzRvOzDSXhc6AamA ... 2017-09-21 07:16:59,649 - INFO [main:Logging$class@70] - [Kafka Server 1], started [1]
Các bản ghi được thêm vào cơ sở dữ liệu. Tuy nhiên, vì Kafka Connect không chạy nên
65 không ghi lại bất kỳ cập nhật nào$ sudo podman pod create --name=dbz --publish "9092,3306,8083" $ sudo podman run -it --rm --name zookeeper --pod dbz quay.io/debezium/zookeeper:2.1
Trong hệ thống sản xuất, bạn sẽ có đủ người môi giới để xử lý người sản xuất và người tiêu dùng, đồng thời duy trì số lượng bản sao không đồng bộ tối thiểu cho mỗi chủ đề. Do đó, nếu đủ người môi giới thất bại đến mức không còn số lượng ISR tối thiểu, Kafka sẽ không khả dụng. Trong trường hợp này, các nhà sản xuất [như trình kết nối Debezium] và người tiêu dùng sẽ đợi cụm hoặc mạng Kafka phục hồi. Điều này có nghĩa là, tạm thời, người tiêu dùng của bạn có thể không thấy bất kỳ sự kiện thay đổi nào khi dữ liệu được thay đổi trong cơ sở dữ liệu. Điều này là do không có sự kiện thay đổi nào được tạo ra. Ngay sau khi cụm Kafka được khởi động lại hoặc mạng phục hồi, Debezium sẽ tiếp tục tạo các sự kiện thay đổi và người tiêu dùng của bạn sẽ tiếp tục sử dụng các sự kiện mà họ đã dừng lại
Mở một thiết bị đầu cuối mới và sử dụng nó để khởi động lại dịch vụ Kafka Connect trong vùng chứa
Lệnh này khởi động Kafka Connect bằng các tùy chọn giống như bạn đã sử dụng khi khởi động lần đầu
1... 2017-09-21 07:16:59,085 - INFO [main-EventThread:ZkClient@713] - zookeeper state changed [SyncConnected] 2017-09-21 07:16:59,218 - INFO [main:Logging$class@70] - Cluster ID = LPtcBFxzRvOzDSXhc6AamA ... 2017-09-21 07:16:59,649 - INFO [main:Logging$class@70] - [Kafka Server 1], started [1]
Dịch vụ Kafka Connect bắt đầu, kết nối với Kafka, đọc cấu hình của dịch vụ trước đó và khởi động các trình kết nối đã đăng ký sẽ tiếp tục ở nơi chúng dừng lại lần cuối
Đây là một vài dòng cuối cùng từ dịch vụ được khởi động lại này
2... 2017-09-21 07:16:59,085 - INFO [main-EventThread:ZkClient@713] - zookeeper state changed [SyncConnected] 2017-09-21 07:16:59,218 - INFO [main:Logging$class@70] - Cluster ID = LPtcBFxzRvOzDSXhc6AamA ... 2017-09-21 07:16:59,649 - INFO [main:Logging$class@70] - [Kafka Server 1], started [1]
Những dòng này cho thấy rằng dịch vụ đã tìm thấy các phần bù được ghi lại trước đó bởi tác vụ cuối cùng trước khi nó bị tắt, được kết nối với cơ sở dữ liệu MySQL, bắt đầu đọc
13 từ vị trí đó và tạo ra các sự kiện từ bất kỳ thay đổi nào trong cơ sở dữ liệu MySQL kể từ thời điểm đó$ sudo podman pod create --name=dbz --publish "9092,3306,8083" $ sudo podman run -it --rm --name zookeeper --pod dbz quay.io/debezium/zookeeper:2.1
Chuyển sang thiết bị đầu cuối đang chạy
65 để xem các sự kiện cho hai bản ghi mới mà bạn đã tạo khi Kafka Connect ngoại tuyến$ sudo podman pod create --name=dbz --publish "9092,3306,8083" $ sudo podman run -it --rm --name zookeeper --pod dbz quay.io/debezium/zookeeper:2.1
3... 2017-09-21 07:16:59,085 - INFO [main-EventThread:ZkClient@713] - zookeeper state changed [SyncConnected] 2017-09-21 07:16:59,218 - INFO [main:Logging$class@70] - Cluster ID = LPtcBFxzRvOzDSXhc6AamA ... 2017-09-21 07:16:59,649 - INFO [main:Logging$class@70] - [Kafka Server 1], started [1]
Những sự kiện này là sự kiện tạo tương tự như những sự kiện bạn đã thấy trước đây. Như bạn thấy, Debezium vẫn báo cáo tất cả các thay đổi trong cơ sở dữ liệu ngay cả khi nó không chạy [miễn là nó được khởi động lại trước khi cơ sở dữ liệu MySQL xóa khỏi
13 các cam kết bị bỏ lỡ]$ sudo podman pod create --name=dbz --publish "9092,3306,8083" $ sudo podman run -it --rm --name zookeeper --pod dbz quay.io/debezium/zookeeper:2.1
Dọn dẹp
Sau khi hoàn thành hướng dẫn, bạn có thể sử dụng Docker để dừng tất cả các container đang chạy
Thủ tục
Dừng từng container
4... 2017-09-21 07:16:59,085 - INFO [main-EventThread:ZkClient@713] - zookeeper state changed [SyncConnected] 2017-09-21 07:16:59,218 - INFO [main:Logging$class@70] - Cluster ID = LPtcBFxzRvOzDSXhc6AamA ... 2017-09-21 07:16:59,649 - INFO [main:Logging$class@70] - [Kafka Server 1], started [1]
Docker dừng từng container. Vì bạn đã sử dụng tùy chọn
3 khi khởi động chúng nên Docker cũng loại bỏ chúng$ docker run -it --rm --name mysql -p 3306:3306 -e MYSQL_ROOT_PASSWORD=debezium -e MYSQL_USER=mysqluser -e MYSQL_PASSWORD=mysqlpw quay.io/debezium/example-mysql:2.1
Nếu bạn sử dụng Podman, hãy chạy lệnh sau
...
2017-09-21 07:16:59,085 - INFO [main-EventThread:ZkClient@713] - zookeeper state changed [SyncConnected]
2017-09-21 07:16:59,218 - INFO [main:Logging$class@70] - Cluster ID = LPtcBFxzRvOzDSXhc6AamA
...
2017-09-21 07:16:59,649 - INFO [main:Logging$class@70] - [Kafka Server 1], started [1]
5Xác minh rằng tất cả các quy trình đã dừng và đã bị xóa
6... 2017-09-21 07:16:59,085 - INFO [main-EventThread:ZkClient@713] - zookeeper state changed [SyncConnected] 2017-09-21 07:16:59,218 - INFO [main:Logging$class@70] - Cluster ID = LPtcBFxzRvOzDSXhc6AamA ... 2017-09-21 07:16:59,649 - INFO [main:Logging$class@70] - [Kafka Server 1], started [1]
Nếu bất kỳ quy trình nào vẫn đang chạy, hãy dừng chúng bằng cách sử dụng
56 hoặcStarting up in standalone mode ZooKeeper JMX enabled by default Using config: /zookeeper/conf/zoo.cfg 2017-09-21 07:15:55,417 - INFO [main:QuorumPeerConfig@134] - Reading configuration from: /zookeeper/conf/zoo.cfg 2017-09-21 07:15:55,419 - INFO [main:DatadirCleanupManager@78] - autopurge.snapRetainCount set to 3 2017-09-21 07:15:55,419 - INFO [main:DatadirCleanupManager@79] - autopurge.purgeInterval set to 1 ... port 0.0.0.0/0.0.0.0:2181 [1]
57Starting up in standalone mode ZooKeeper JMX enabled by default Using config: /zookeeper/conf/zoo.cfg 2017-09-21 07:15:55,417 - INFO [main:QuorumPeerConfig@134] - Reading configuration from: /zookeeper/conf/zoo.cfg 2017-09-21 07:15:55,419 - INFO [main:DatadirCleanupManager@78] - autopurge.snapRetainCount set to 3 2017-09-21 07:15:55,419 - INFO [main:DatadirCleanupManager@79] - autopurge.purgeInterval set to 1 ... port 0.0.0.0/0.0.0.0:2181 [1]
Bước tiếp theo
Sau khi hoàn thành hướng dẫn, hãy xem xét các bước tiếp theo sau
Khám phá hướng dẫn thêm
Sử dụng ứng dụng khách dòng lệnh MySQL để thêm, sửa đổi và xóa các hàng trong bảng cơ sở dữ liệu và xem tác động đối với các chủ đề. Bạn có thể cần chạy một lệnh
65 riêng cho từng chủ đề. Hãy nhớ rằng bạn không thể xóa một hàng được tham chiếu bởi khóa ngoại$ sudo podman pod create --name=dbz --publish "9092,3306,8083" $ sudo podman run -it --rm --name zookeeper --pod dbz quay.io/debezium/zookeeper:2.1
Hãy thử chạy hướng dẫn với trình kết nối Debezium cho Postgres, MongoDB, SQL Server và Oracle
Bạn có thể sử dụng phiên bản Docker Compose của hướng dẫn này nằm trong kho ví dụ Debezium. Các tệp Docker Compose được cung cấp để chạy hướng dẫn với MySQL, Postgres, MongoDB, SQL Server và Oracle