4장. 변경 이벤트 보기
Debezium MySQL 커넥터를 배포한 후 인벤토리 데이터베이스에 대한 변경 사항 캡처를 시작합니다.
커넥터가 시작되면 MySQL 데이터베이스의 테이블 중 하나를 나타내는 Apache Kafka 주제 집합에 이벤트를 씁니다. 각 항목의 이름은 데이터베이스 서버 dbserver1 의 이름으로 시작됩니다.
커넥터는 다음 Kafka 항목에 씁니다.
dbserver1- 변경 사항이 캡처되는 테이블에 적용되는 DDL 문을 작성하는 스키마 변경 주제입니다.
dbserver1.inventory.products-
inventory데이터베이스의products테이블에 대한 변경 이벤트 레코드를 수신합니다. dbserver1.inventory.products_on_hand-
inventory데이터베이스의products_on_hand테이블에 대한 변경 이벤트 레코드를 수신합니다. dbserver1.inventory.customers-
inventory데이터베이스의customers테이블에 대한 변경 이벤트 레코드를 받습니다. dbserver1.inventory.orders-
inventory데이터베이스의orders테이블에 대한 변경 이벤트 레코드를 수신합니다.
이 튜토리얼의 나머지 부분에서는 dbserver1.inventory.customers Kafka 주제를 검사합니다. 주제를 더 자세히 살펴보면 다양한 유형의 변경 이벤트를 나타내는 방법을 확인하고 각 이벤트가 캡처된 커넥터에 대한 정보를 찾을 수 있습니다.
이 튜토리얼에는 다음 섹션이 포함되어 있습니다.
4.1. 생성 이벤트 보기 링크 복사링크가 클립보드에 복사되었습니다!
dbserver1.inventory.customers 주제를 보면 MySQL 커넥터가 inventory 데이터베이스에서 생성 이벤트를 캡처하는 방법을 확인할 수 있습니다. 이 경우 생성 이벤트는 데이터베이스에 추가되는 새 고객을 캡처합니다.
절차
새 터미널을 열고
kafka-console-consumer를 사용하여 주제 시작부터dbserver1.inventory.customers주제를 사용합니다.이 명령은 Kafka(
my-cluster-kafka-0)를 실행하는 Pod에서 간단한 소비자()를 실행합니다.kafka-console-consumer.shoc exec -it my-cluster-kafka-0 -- /opt/kafka/bin/kafka-console-consumer.sh \ --bootstrap-server localhost:9092 \ --from-beginning \ --property print.key=true \ --topic dbserver1.inventory.customers
$ oc exec -it my-cluster-kafka-0 -- /opt/kafka/bin/kafka-console-consumer.sh \ --bootstrap-server localhost:9092 \ --from-beginning \ --property print.key=true \ --topic dbserver1.inventory.customersCopy to Clipboard Copied! Toggle word wrap Toggle overflow 소비자는
customers테이블의 각 행에 대해 4개의 메시지(JSON 형식)를 반환합니다. 각 메시지에는 해당 테이블 행에 대한 이벤트 레코드가 포함되어 있습니다.각 이벤트에는 키 와 값 의 두 개의 JSON 문서가 있습니다. 키는 행의 기본 키에 해당하고, 값은 행의 세부 정보(행이 포함된 필드, 각 필드의 값, 행에서 수행된 작업 유형)를 표시합니다.
마지막 이벤트의 경우 키 의 세부 정보를 검토합니다.
다음은 마지막 이벤트의 키 (읽성을 위해 포맷됨)에 대한 세부 정보입니다.
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 이벤트에는
스키마와페이로드의 두 부분이 있습니다.스키마에는 페이로드에 있는 내용을 설명하는 Kafka Connect 스키마가 포함되어 있습니다. 이 경우 페이로드는 선택 사항이 아니며 필수 필드(int32유형의id)가 있는dbserver1.inventory.customers.Key라는 구조입니다.페이로드에는 값이1004인 단일id필드가 있습니다.이벤트 키 를 검토하면
id기본 키 열에 값이1004인inventory.customers테이블의 행에 이 이벤트가 적용되는 것을 확인할 수 있습니다.동일한 이벤트의 값 의 세부 사항을 검토합니다.
이벤트 값은 행이 생성되었으며 포함된 내용(이 경우
id,first_name,last_name, 삽입된 행의이메일)을 설명합니다.다음은 마지막 이벤트의 값 (읽성을 위해 포맷됨)에 대한 세부 정보입니다.
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 이벤트의 이 부분은 훨씬 길지만 이벤트의 키 처럼
스키마와페이로드도 있습니다.스키마에는 5개의 필드를 포함할 수 있는dbserver1.inventory.customers.Envelope(버전 1)라는 Kafka Connect 스키마가 포함되어 있습니다.op-
작업 유형을 설명하는 문자열 값이 포함된 필수 필드입니다. MySQL 커넥터의 값은 생성(또는 삽입), update의 경우
u, delete는d, 읽기(스냅샷의 경우)는r입니다. before-
이벤트가 발생하기 전에 행의 상태를 포함하는 선택적 필드입니다. 이 구조는
dbserver1커넥터가inventory.customers테이블의 모든 행에 사용하는dbserver1.inventory.customers.ValueKafka Connect 스키마로 설명합니다. 후-
이벤트가 발생한 후 행의 상태를 포함하는 선택적 필드입니다. 구조는
이전에사용된 것과 동일한dbserver1.inventory.customers.ValueKafka Connect 스키마로 설명되어 있습니다. source-
이벤트에 대한 소스 메타데이터를 설명하는 구조를 포함하는 필수 필드에는 MySQL의 경우 커넥터 이름, 이벤트가 기록된 binlog 파일의 이름, 이벤트가 표시된 해당
파일의 위치, 이벤트 내의 행(두 개 이상 있는 경우), 영향을 받는 데이터베이스 및 테이블의 이름, 영향을 받는 데이터베이스 및 테이블의 이름이 포함되어 있습니다. MySQL 스레드 ID(이 이벤트가 스냅샷의 일부인지 여부), 사용 가능한 경우 MySQL 서버 ID 및 타임스탬프(초)입니다.binlog ts_ms- 커넥터가 이벤트를 처리한 경우 Kafka Connect 작업을 실행하는 JVM에서 시스템 시계를 사용하는 선택적 필드입니다.
참고이벤트의 JSON 표현은 설명하는 행보다 훨씬 길습니다. 이는 모든 이벤트 키와 값과 함께 Kafka Connect가 페이로드 를 설명하는 스키마 를 제공하기 때문입니다. 시간이 지남에 따라 이 구조는 변경될 수 있습니다. 그러나 이벤트 자체의 키와 값에 대한 스키마를 보유하면 특히 시간이 지남에 따라 발전할 때 애플리케이션을 사용하는 것이 메시지를 훨씬 쉽게 이해할 수 있습니다.
Debezium MySQL 커넥터는 데이터베이스 테이블 구조에 따라 이러한 스키마를 구성합니다. DDL 문을 사용하여 MySQL 데이터베이스의 테이블 정의를 변경하는 경우 커넥터는 이러한 DDL 문을 읽고 Kafka Connect 스키마를 업데이트합니다. 이는 각 이벤트가 이벤트가 발생한 시점에서 시작된 테이블과 정확히 동일하게 구조화되는 유일한 방법입니다. 그러나 단일 테이블에 대한 모든 이벤트를 포함하는 Kafka 항목에 테이블 정의의 각 상태에 해당하는 이벤트가 있을 수 있습니다.
JSON 컨버터에는 모든 메시지에 키 및 값 스키마가 포함되어 있으므로 매우 자세한 이벤트를 생성합니다.
이벤트의 키 와 값 스키마를
inventory데이터베이스의 상태와 비교합니다. MySQL 명령줄 클라이언트를 실행하는 터미널에서 다음 문을 실행합니다.Copy to Clipboard Copied! Toggle word wrap Toggle overflow 이는 검토한 이벤트 레코드가 데이터베이스의 레코드와 일치함을 보여줍니다.