Biến môi trường mysql

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

    ...
    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)
    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
    $ 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
    0. Để biết thêm thông tin, hãy xem tài liệu Docker

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

  1. 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ố

    $ 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
    1 hình ảnh

    $ docker run -it --rm --name zookeeper -p 2181:2181 -p 2888:2888 -p 3888:3888 quay.io/debezium/zookeeper:2.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

    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

    $ 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
    3

    Vùng chứa sẽ bị xóa khi 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
    4

    Tên của thùng chứa

    $ 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
    5

    Á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

  1. Xác minh rằng ZooKeeper đã bắt đầu và đang lắng nghe trên cổ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
    6

    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

  1. 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

    $ 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
    7

    $ docker run -it --rm --name kafka -p 9092:9092 --link zookeeper:zookeeper quay.io/debezium/kafka:2.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

    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

    $ 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
    3

    Vùng chứa sẽ bị xóa khi dừng

    $ 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
    0

    Tên của thùng chứa

    $ 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
    1

    Bản đồ cổng

    $ 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
    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

    Báo cho vùng chứa rằng nó có thể tìm thấy ZooKeeper trong vùng chứa

    $ 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
    4 đang chạy trên cùng một máy chủ Docker

    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

    $ 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
    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)

  2. 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

  1. 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

    ...
    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

    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

    $ 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
    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
    ...
    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

    $ 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 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

    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

    $ 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
    3

    Vùng chứa sẽ bị xóa khi dừng

    ...
    [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
    3

    Tên của thùng chứa

    ...
    [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
    4

    Bản đồ cổng

    ...
    [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
    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

    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

  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ẫu

Thủ tục

  1. 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"'

    $ 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

    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

    $ 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
    3

    Vùng chứa sẽ bị xóa khi dừ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"'
    0

    Tên của thùng chứa

    $ 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"'
    1

    Liên kết vùng chứa với vùng chứa

    $ 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

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
0

  1. Xá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

    $ 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
    1

  2. Tại dấu nhắc lệnh

    $ 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"'
    3, hãy chuyển sang cơ sở dữ liệu hàng tồn kho

    $ 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

  3. Liệt kê các bảng 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
    3

  4. 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ụ

    $ 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
    4

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 MySQL

Thủ tục

  1. 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

    $ 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
    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
    2

    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

    $ 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
    3

    Vùng chứa sẽ bị xóa khi dừ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"'
    8

    Tên của thùng chứa

    $ 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"'
    9

    Bản đồ cổ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
    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

    Đặt các biến môi trường theo yêu cầu của hình ảnh Debezium

    $ 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
    02

    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
6

Nế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ện

  1. Xá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

    $ 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

  2. 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

    $ 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
    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)

    Các lệnh này sử 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
    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

    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

      $ 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
      8

      1Phản hồi cho thấy Kafka Connect phiên bản 3. 3. 1 đang chạy

    2. Kiểm tra danh sách các trình kết nối đã đăng ký với 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

      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ải

  • Sau khi trình kết nối được đăng ký, nó sẽ bắt đầu theo dõ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
    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

  • 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

    $ 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

Đă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

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 đổi

Trong 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

  1. 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

    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)
    0

    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

    $ 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, 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 (
    $ 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 đ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
    $ 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
    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
    ...
    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ớ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
    $ 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 khi trình kết nối bắt đầu đọc

    Để 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")

  1. Mở một thiết bị đầu cuối mới và sử dụng 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
    06 để đăng ký trình kết nối Debezium MySQL

    Lệnh này sử dụng API của dịch vụ Kafka Connect để gửi yêu cầ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
    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)

    Lệnh này sử 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
    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

    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)
    1

    Người dùng Windows có thể cần thoát khỏi dấu ngoặc kép. Ví dụ

    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)
    2

    Nếu không, bạn có thể thấy lỗi 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)
    3

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)
4

  1. Xác minh rằ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
    26 được bao gồm trong danh sách các 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)
    5

  2. Xem lại nhiệm vụ của 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)
    6

    Bạn sẽ thấy một phản hồi tương tự như sau (được định dạng để dễ đọ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)
    7

    1 Trình kết nối đang chạy một tác vụ duy nhất (tác 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
    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

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ủ MySQL

Sau 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ối

Mộ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 đầu

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)
8

Xa 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ồm

Tiế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
0

Mỗ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ây

Quá 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
1

Cuố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
2

Xem 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ệu

Khi 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
37

Nơ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
50

Nắ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
53

Nắ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
56

Nắ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
59

Nắ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úng

Xem 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ệu

Thủ tục

  1. Mở một thiết bị đầu cuối mới và sử dụng nó để khởi động tiện í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
    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ủ đề

    Tiện í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
    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

    Lệnh này chạy tiện í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
    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

    $ docker run -it --rm --name kafka -p 9092:9092 --link zookeeper:zookeeper quay.io/debezium/kafka:2.1
    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
    70

    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,

    $ 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
    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

    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

    $ docker run -it --rm --name kafka -p 9092:9092 --link zookeeper:zookeeper quay.io/debezium/kafka:2.1
    4

    Tiện í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
    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ị

    Bạn sẽ thấy đầu ra tương tự như sau

    $ docker run -it --rm --name kafka -p 9092:9092 --link zookeeper:zookeeper quay.io/debezium/kafka:2.1
    5

    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

  2. Đố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)

    $ docker run -it --rm --name kafka -p 9092:9092 --link zookeeper:zookeeper quay.io/debezium/kafka:2.1
    6

    Sự kiện có hai phần. 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
    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

    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

    $ 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 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

  3. 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à

    $ 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,
    $ 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)

    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)

    $ docker run -it --rm --name kafka -p 9092:9092 --link zookeeper:zookeeper quay.io/debezium/kafka:2.1
    7

    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

    $ 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 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

    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à

    $ 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
    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à
    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)
    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)
    01

    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 đồ

    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)
    02 Kafka Connect, mà 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 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

    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

    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 đồ

    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)
    02 Kafka Connect được sử dụng trong
    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)
    01

    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)
    08

    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

    $ 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 đượ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,

    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)
    11

    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 đồ

  4. 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

    ...
    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 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

    $ 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
    4

    Đ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

  1. 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

    $ docker run -it --rm --name kafka -p 9092:9092 --link zookeeper:zookeeper quay.io/debezium/kafka:2.1
    9

  2. Xem 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 cập nhật

    $ sudo podman run -it --rm --name kafka --pod dbz quay.io/debezium/kafka:2.1
    0

  3. Chuyển sang thiết bị đầu cuối đang chạy

    $ 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
    65 để xem sự kiện thứ năm mới

    Bằng cách thay đổi một bản ghi 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
    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

    Dưới đây là chi tiết về khóa cho sự kiện cập nhật (được định dạng để dễ đọc)

    $ sudo podman run -it --rm --name kafka --pod dbz quay.io/debezium/kafka:2.1
    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

    $ 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, 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 run -it --rm --name kafka --pod dbz quay.io/debezium/kafka:2.1
    2

    1 Trường

    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)
    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ường
    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 hiện có trạng thái cập nhật của hàng và 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
    89 hiện 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)
    22. 3Cấu trúc trường
    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)
    08 có nhiều giá trị giống như trước đây, ngoại trừ trường
    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)
    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ường
    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)
    26 có thể đã thay đổi trong các trường hợp khác). 4Giá trị 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 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
    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)
    11 hiển thị dấu thời gian khi Debezium xử lý sự kiện này

    Bằng cách xem 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, bạn có thể tìm hiểu một số điều quan trọng về sự kiện cập nhật

    • Bằng cách so sánh các cấu trú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)
      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ết

    • Bằng cách xem xét cấu trú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)
      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)

    • Bằng cách so sánh 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ủ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

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

  1. 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

    $ sudo podman run -it --rm --name kafka --pod dbz quay.io/debezium/kafka:2.1
    3

    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

    $ sudo podman run -it --rm --name kafka --pod dbz quay.io/debezium/kafka:2.1
    4

  2. Chuyển sang thiết bị đầu cuối đang chạy

    $ 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
    65 để xem hai sự kiện mới

    Bằng cách xóa một 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
    57, trình kết nối Debezium MySQL đã tạo ra hai sự kiện mới

  3. 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)

    $ sudo podman run -it --rm --name kafka --pod dbz quay.io/debezium/kafka:2.1
    5

    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)

    $ sudo podman run -it --rm --name kafka --pod dbz quay.io/debezium/kafka:2.1
    6

    1 Trường

    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)
    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ường
    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 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ường
    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)
    08 có nhiều giá trị giống như trước đây, ngoại trừ trường
    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)
    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ường
    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)
    26 có thể đã thay đổi trong các trường hợp khác). 4Giá trị 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 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
    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)
    11 hiển thị dấu thời gian khi Debezium xử lý sự kiện này

    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

  4. 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)

    $ sudo podman run -it --rm --name kafka --pod dbz quay.io/debezium/kafka:2.1
    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)

    $ sudo podman run -it --rm --name kafka --pod dbz quay.io/debezium/kafka:2.1
    8

    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

  1. Mở một thiết bị đầu cuối mới và sử dụng nó để dừng bộ 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 đang chạy dịch vụ Kafka Connect

    $ sudo podman run -it --rm --name kafka --pod dbz quay.io/debezium/kafka:2.1
    9

    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 bị dừng và dịch vụ Kafka Connect tắt một cách duyên dáng

    Vì bạn đã chạy vùng chứa với tùy chọn

    $ 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
    3, Docker sẽ xóa vùng chứa sau khi nó dừng

  2. 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

    ...
    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

    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

    $ 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
    65 không ghi lại bất kỳ cập nhật nào

    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

  3. 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

    ...
    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)
    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

    ...
    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)
    2

    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

    $ 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 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 đó

  4. Chuyển sang thiết bị đầu cuối đang chạy

    $ 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
    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

    ...
    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)
    3

    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

    $ 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ác cam kết bị bỏ lỡ)

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

  1. Dừng từng container

    ...
    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

    Docker dừng từng container. Vì bạn đã sử dụng tùy chọn

    $ 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
    3 khi khởi động chúng nên Docker cũng loại bỏ chúng

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)
5

  1. Xác minh rằng tất cả các quy trình đã dừng và đã bị xóa

    ...
    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)
    6

    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

    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)
    56 hoặ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)
    57

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

    $ 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
    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

  • 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