OpenShift에 Debezium 설치
OpenShift Container Platform에서 Red Hat build of Debezium 2.1.4와 함께 사용할 수 있습니다.
초록
머리말
보다 포괄적 수용을 위한 오픈 소스 용어 교체
Red Hat은 코드, 문서, 웹 속성에서 문제가 있는 용어를 교체하기 위해 최선을 다하고 있습니다. 먼저 마스터(master), 슬레이브(slave), 블랙리스트(blacklist), 화이트리스트(whitelist) 등 네 가지 용어를 교체하고 있습니다. 이러한 변경 작업은 작업 범위가 크므로 향후 여러 릴리스에 걸쳐 점차 구현할 예정입니다. 자세한 내용은 CTO Chris Wright의 메시지를 참조하십시오.
1장. Debezium 개요
Debezium for Red Hat Integration은 데이터베이스 작업을 캡처하고, 행 수준 작업에 대한 데이터 변경 이벤트 레코드를 생성하고, 이벤트 레코드를 Apache Kafka 주제로 변경하는 분산 플랫폼입니다. Debezium은 Apache Kafka를 기반으로 하며 AMQ Streams와 배포 및 통합됩니다.
Debezium은 데이터베이스 테이블에 대한 행 수준 변경 사항을 캡처하고 해당 변경 이벤트를 AMQ Streams에 전달합니다. 애플리케이션은 이러한 변경 이벤트 스트림을 읽고 발생한 순서대로 변경 이벤트에 액세스할 수 있습니다.
Debezium 은 Debezium for Red Hat Integration의 업스트림 커뮤니티 프로젝트입니다.
Debezium에는 다음과 같은 여러 용도가 있습니다.
- 데이터 복제
- 캐시 및 검색 인덱스 업데이트
- 모놀리식 애플리케이션 간소화
- 데이터 통합
- 스트리밍 쿼리 활성화
Debezium에서는 다음과 같은 일반적인 데이터베이스에 대한 Apache Kafka Connect 커넥터를 제공합니다.
2장. Debezium 커넥터 설치
커넥터 플러그인으로 Kafka Connect를 확장하여 AMQ Streams를 통해 Debezium 커넥터를 설치합니다. AMQ Streams를 배포한 후 Kafka Connect를 통해 Debezium을 커넥터 구성으로 배포할 수 있습니다.
2.1. Kafka 주제 생성 권장 사항
Debezium은 여러 Apache Kafka 항목에 데이터를 저장합니다. 항목은 관리자가 미리 만들거나 자동으로 주제를 구성하도록 Kafka Connect를 구성할 수 있어야 합니다.
다음 목록에서는 주제를 만들 때 고려해야 할 제한 사항 및 권장 사항에 대해 설명합니다.
- Debezium Db2, MySQL, Oracle 및 SQL Server 커넥터에 대한 데이터베이스 스키마 기록 항목
위의 각 커넥터에는 데이터베이스 스키마 기록 항목이 필요합니다. 데이터베이스 스키마 기록 항목을 수동으로 생성하거나 Kafka 브로커를 사용하여 항목을 자동으로 생성하거나 Kafka Connect를 사용하여 주제를 만들 든, 다음 설정으로 주제를 구성해야 합니다.
- 무한 또는 매우 긴 유지.
- 프로덕션 환경에서 3개 이상의 복제 요인.
- 단일 파티션.
- 기타 주제
지정된 레코드에 대한 마지막 변경 이벤트만 저장되도록 Kafka 로그 압축 을 활성화하면 Apache Kafka에서 다음 항목 속성을 설정합니다.
-
min.compaction.lag.ms
주제 소비자가 모든 이벤트를 수신하고 마커를 삭제하기에 충분한 시간을 가지려면 싱크 커넥터에 대해 예상되는 최대 다운타임보다 큰 이전 속성의 값을 지정합니다. 예를 들어 싱크 커넥터에 업데이트를 적용할 때 발생할 수 있는 다운타임을 고려하십시오.
-
- 프로덕션 환경에서 복제됩니다.
단일 파티션.
단일 파티션 규칙을 완화할 수 있지만 애플리케이션은 데이터베이스의 다른 행에 대한 순서 외 이벤트를 처리해야 합니다. 한 줄에 대한 이벤트는 여전히 완전히 주문됩니다. 여러 파티션을 사용하는 경우 기본 동작은 Kafka가 키를 해시하여 파티션을 결정하는 것입니다. 다른 파티션 전략에서는 단일 메시지 변환(SMT)을 사용하여 각 레코드의 파티션 번호를 설정해야 합니다.
2.2. AMQ Streams에 Debezium 배포
Red Hat OpenShift Container Platform에서 Debezium에 대한 커넥터를 설정하려면 AMQ Streams를 사용하여 사용하려는 각 커넥터에 대한 커넥터 플러그인이 포함된 Kafka Connect 컨테이너 이미지를 빌드합니다. 커넥터가 시작되면 구성된 데이터베이스에 연결되고 삽입, 업데이트 및 삭제된 행 또는 문서에 대한 변경 이벤트 레코드를 생성합니다.
Debezium 1.7부터 Debezium 커넥터를 배포하는 데 권장되는 방법은 AMQ Streams를 사용하여 커넥터 플러그인을 포함하는 Kafka Connect 컨테이너 이미지를 빌드하는 것입니다.
배포 프로세스 중에 다음 사용자 정의 리소스(CR)를 생성하고 사용합니다.
-
Kafka Connect
인스턴스를 정의하고 이미지에 커넥터 아티팩트에 대한 정보를 포함하는 KafkaConnect CR입니다. -
커넥터가 소스 데이터베이스에 액세스하는 데 사용하는 정보를 포함하는 상세 정보를 제공하는
KafkaConnector
CR입니다. AMQ Streams가 Kafka Connect Pod를 시작한 후KafkaConnector
CR을 적용하여 커넥터를 시작합니다.
Kafka Connect 이미지의 빌드 사양에서 배포할 수 있는 커넥터를 지정할 수 있습니다. 각 커넥터 플러그인에 대해 배포에 사용할 수 있도록 다른 구성 요소를 지정할 수도 있습니다. 예를 들어 Apicurio Registry 아티팩트 또는 Debezium 스크립팅 구성 요소를 추가할 수 있습니다. AMQ Streams가 Kafka Connect 이미지를 빌드하면 지정된 아티팩트를 다운로드하여 이미지에 통합합니다.
KafkaConnect
CR의 spec.build.output
매개변수는 결과 Kafka Connect 컨테이너 이미지를 저장할 위치를 지정합니다. 컨테이너 이미지는 Docker 레지스트리 또는 OpenShift ImageStream에 저장할 수 있습니다. ImageStream에 이미지를 저장하려면 Kafka Connect를 배포하기 전에 ImageStream을 생성해야 합니다. 이미지 스트림은 자동으로 생성되지 않습니다.
KafkaConnect
리소스를 사용하여 클러스터를 생성하는 경우 나중에 Kafka Connect REST API를 사용하여 커넥터를 생성하거나 업데이트할 수 없습니다. REST API를 사용하여 정보를 검색할 수 있습니다.
추가 리소스
- OpenShift에서 AMQ Streams를 사용하여 Kafka Connect 구성.
- OpenShift에서 AMQ Streams 배포 및 업그레이드에 AMQ Streams를 사용하여 새 컨테이너 이미지를 자동으로 생성합니다.
2.2.1. AMQ Streams를 사용하여 Debezium 배포
동일한 단계를 수행하여 각 유형의 Debezium 커넥터를 배포합니다. 다음 섹션에서는 Debezium MySQL 커넥터를 배포하는 방법을 설명합니다.
이전 버전의 AMQ Streams에서 OpenShift에 Debezium 커넥터를 배포하려면 먼저 커넥터에 대한 Kafka Connect 이미지를 빌드해야 했습니다. 현재 OpenShift에 커넥터를 배포하는 데 권장되는 방법은 AMQ Streams의 빌드 구성을 사용하여 사용하려는 Debezium 커넥터 플러그인이 포함된 Kafka Connect 컨테이너 이미지를 자동으로 빌드하는 것입니다.
빌드 프로세스 중에 AMQ Streams Operator는 Debezium 커넥터 정의를 비롯한 KafkaConnect
사용자 정의 리소스의 입력 매개변수를 Kafka Connect 컨테이너 이미지로 변환합니다. 빌드는 Red Hat Maven 리포지토리 또는 다른 구성된 HTTP 서버에서 필요한 아티팩트를 다운로드합니다.
새로 생성된 컨테이너는 .spec.build.output
에 지정된 컨테이너 레지스트리로 푸시되며 Kafka Connect 클러스터를 배포하는 데 사용됩니다. AMQ Streams가 Kafka Connect 이미지를 빌드한 후 KafkaConnector
사용자 정의 리소스를 생성하여 빌드에 포함된 커넥터를 시작합니다.
사전 요구 사항
- 클러스터 Operator가 설치된 OpenShift 클러스터에 액세스할 수 있습니다.
- AMQ Streams Operator가 실행 중입니다.
- Apache Kafka 클러스터는 OpenShift에서 AMQ Streams 배포 및 업그레이드에 설명된 대로 배포됩니다.
- Kafka Connect가 AMQ Streams에 배포
- Debezium의 Red Hat 빌드 라이센스가 있습니다.
-
OpenShift
oc
CLI 클라이언트가 설치되었거나 OpenShift Container Platform 웹 콘솔에 액세스할 수 있습니다. Kafka Connect 빌드 이미지를 저장하는 방법에 따라 레지스트리 권한이 필요하거나 ImageStream 리소스를 생성해야 합니다.
- Red Hat Quay.io 또는 Docker Hub와 같은 이미지 레지스트리에 빌드 이미지를 저장하려면 다음을 수행합니다.
- 레지스트리에서 이미지를 생성하고 관리하는 계정 및 권한입니다.
- 빌드 이미지를 네이티브 OpenShift ImageStream으로 저장하려면 다음을 수행합니다.
- ImageStream 리소스가 클러스터에 배포됩니다. 클러스터의 ImageStream을 명시적으로 생성해야 합니다. 이미지 스트림은 기본적으로 사용할 수 없습니다. ImageStreams에 대한 자세한 내용은 OpenShift Container Platform의 이미지 스트림 관리를 참조하십시오.
절차
- OpenShift 클러스터에 로그인합니다.
커넥터에 대한
KafkaConnect
사용자 정의 리소스(CR)를 생성하거나 기존 리소스를 수정합니다. 예를 들어metadata.annotations
및spec.build
속성을 지정하는dbz-connect.yaml
이라는 이름으로KafkaConnect
CR을 생성합니다. 다음 예제는KafkaConnect
사용자 정의 리소스를 설명하는dbz-connect.yaml
파일에서 발췌한 내용을 보여줍니다.
예 2.1. Debezium 커넥터를 포함하는
KafkaConnect
사용자 정의 리소스를 정의하는dbz-connect.yaml
파일다음 예제에서 사용자 정의 리소스는 다음 아티팩트를 다운로드하도록 구성됩니다.
- Debezium 커넥터 아카이브입니다.
- Red Hat 빌드 Apicurio Registry 아카이브. Apicurio 레지스트리는 선택적 구성 요소입니다. 커넥터와 함께 Avro serialization을 사용하려는 경우에만 Apicurio Registry 구성 요소를 추가합니다.
- Debezium 스크립팅 SMT 아카이브 및 Debezium 커넥터와 함께 사용하려는 관련 스크립팅 엔진입니다. SMT 아카이브 및 스크립팅 언어 종속성은 선택적 구성 요소입니다. Debezium 콘텐츠 기반 라우팅 SMT를 사용하거나 SMT 를 필터링 하려는 경우에만 이러한 구성 요소를 추가합니다.
Copy to Clipboard Copied! Toggle word wrap Toggle overflow apiVersion: kafka.strimzi.io/v1beta2 kind: KafkaConnect metadata: name: debezium-kafka-connect-cluster annotations: strimzi.io/use-connector-resources: "true" spec: version: 3.3.1 build: output: type: imagestream image: debezium-streams-connect:latest plugins: - name: debezium-connector-mysql artifacts: - type: zip url: https://maven.repository.redhat.com/ga/io/debezium/debezium-connector-mysql/2.1.4.Final-redhat-00001/debezium-connector-mysql-2.1.4.Final-redhat-00001-plugin.zip - type: zip url: https://maven.repository.redhat.com/ga/io/apicurio/apicurio-registry-distro-connect-converter/2.3.0.Final-redhat-<build-number>/apicurio-registry-distro-connect-converter-2.3.0.Final-redhat-<build-number>.zip - type: zip url: https://maven.repository.redhat.com/ga/io/debezium/debezium-scripting/2.1.4.Final-redhat-00001/debezium-scripting-2.1.4.Final-redhat-00001.zip - type: jar url: https://repo1.maven.org/maven2/org/codehaus/groovy/groovy/3.0.11/groovy-3.0.11.jar - type: jar url: https://repo1.maven.org/maven2/org/codehaus/groovy/groovy-jsr223/3.0.11/groovy-jsr223-3.0.11.jar - type: jar url: https://repo1.maven.org/maven2/org/codehaus/groovy/groovy-json3.0.11/groovy-json-3.0.11.jar bootstrapServers: debezium-kafka-cluster-kafka-bootstrap:9093 ...
apiVersion: kafka.strimzi.io/v1beta2 kind: KafkaConnect metadata: name: debezium-kafka-connect-cluster annotations: strimzi.io/use-connector-resources: "true"
1 spec: version: 3.3.1 build:
2 output:
3 type: imagestream
4 image: debezium-streams-connect:latest plugins:
5 - name: debezium-connector-mysql artifacts: - type: zip
6 url: https://maven.repository.redhat.com/ga/io/debezium/debezium-connector-mysql/2.1.4.Final-redhat-00001/debezium-connector-mysql-2.1.4.Final-redhat-00001-plugin.zip
7 - type: zip url: https://maven.repository.redhat.com/ga/io/apicurio/apicurio-registry-distro-connect-converter/2.3.0.Final-redhat-<build-number>/apicurio-registry-distro-connect-converter-2.3.0.Final-redhat-<build-number>.zip
8 - type: zip url: https://maven.repository.redhat.com/ga/io/debezium/debezium-scripting/2.1.4.Final-redhat-00001/debezium-scripting-2.1.4.Final-redhat-00001.zip
9 - type: jar url: https://repo1.maven.org/maven2/org/codehaus/groovy/groovy/3.0.11/groovy-3.0.11.jar
10 - type: jar url: https://repo1.maven.org/maven2/org/codehaus/groovy/groovy-jsr223/3.0.11/groovy-jsr223-3.0.11.jar - type: jar url: https://repo1.maven.org/maven2/org/codehaus/groovy/groovy-json3.0.11/groovy-json-3.0.11.jar bootstrapServers: debezium-kafka-cluster-kafka-bootstrap:9093 ...
표 2.1. Kafka Connect 구성 설정에 대한 설명 항목 설명 1
Cluster Operator가
KafkaConnector
리소스를 사용하여 이 Kafka Connect 클러스터에서 커넥터를 구성할 수 있도록strimzi.io/use-connector-resources
주석을"true"
로 설정합니다.2
spec.build
구성은 빌드 이미지를 저장할 위치를 지정하고 플러그인 아티팩트의 위치와 함께 이미지에 포함할 플러그인을 나열합니다.3
build.output
은 새로 빌드된 이미지가 저장된 레지스트리를 지정합니다.4
이미지 출력의 이름과 이미지 이름을 지정합니다.
output.type
에 유효한 값은 Docker Hub 또는 Quay와 같은 컨테이너 레지스트리로 푸시하거나 이미지를 내부 OpenShift ImageStream으로 푸시하는 이미지스트림
입니다.ImageStream을 사용하려면 ImageStream 리소스를 클러스터에 배포해야 합니다. KafkaConnect 구성에서
build.output
을 지정하는 방법에 대한 자세한 내용은 OpenShift에서 AMQ Streams 구성의 AMQ Streams 빌드 스키마 참조 를 참조하십시오.5
plugins
구성에는 Kafka Connect 이미지에 포함하려는 모든 커넥터가 나열됩니다. 목록의 각 항목에 대해 플러그인이름을
지정하고 커넥터를 빌드하는 데 필요한 아티팩트에 대한 정보를 지정합니다. 선택적으로 각 커넥터 플러그인에 대해 커넥터와 함께 사용할 수 있는 다른 구성 요소를 포함할 수 있습니다. 예를 들어 서비스 레지스트리 아티팩트 또는 Debezium 스크립팅 구성 요소를 추가할 수 있습니다.6
artifacts.type
값은artifacts.url
에 지정된 아티팩트의 파일 유형을 지정합니다. 유효한 유형은zip
,tgz
, 또는 10.0.0.1입니다
. Debezium 커넥터 아카이브는.zip
파일 형식으로 제공됩니다.type
값은url
필드에서 참조되는 파일의 유형과 일치해야 합니다.7
artifacts.url
값은 커넥터 아티팩트의 파일을 저장하는 Maven 리포지토리와 같은 HTTP 서버의 주소를 지정합니다. Debezium 커넥터 아티팩트는 Red Hat Maven 리포지토리에서 사용할 수 있습니다. OpenShift 클러스터는 지정된 서버에 액세스할 수 있어야 합니다.8
(선택 사항) Apicurio Registry 구성 요소를 다운로드하는 아티팩트
유형
및URL
을 지정합니다. 커넥터가 Apache Avro를 사용하여 기본 JSON 변환기를 사용하는 대신 Apicurio Registry Registry의 Red Hat 빌드를 사용하여 이벤트 키와 값을 직렬화하도록 하려는 경우에만 Apicurio Registry 아티팩트를 포함합니다.9
(선택 사항) Debezium 스크립팅 SMT 아카이브의 아티팩트
유형
및URL
을 Debezium 커넥터와 함께 사용합니다. 스크립팅 SMT를 사용하려면 Debezium 콘텐츠 기반 라우팅 SMT 를 사용하거나 SMT를 필터링 하려면 groovy와 같은 gRPC 223 호환 스크립팅 구현도 배포해야 합니다.10
(선택 사항) Debezium 스크립팅 SMT에 필요한 skopeo 223- 호환 스크립팅 구현의 JAR 파일에 대한 아티팩트
유형
및URL
을 지정합니다.중요AMQ Streams를 사용하여 Kafka Connect 이미지에 커넥터 플러그인을 통합하는 경우 필요한 스크립팅 언어 구성 요소
artifacts.url
마다 JAR 파일의 위치를 지정해야 하며artifacts.type
값도 gRPC 로 설정해야 합니다.잘못된 값을 사용하면 런타임에 커넥터가 실패합니다.
SMT 스크립팅과 함께 Apache Groovy 언어를 사용하려면 예제의 사용자 지정 리소스는 다음 라이브러리에서 JAR 파일을 검색합니다.
-
groovy
-
groovy-jsr223
(스크립트 에이전트) -
groovy-json
(JSON 문자열 구문 분석 모듈)
다른 방법으로 Debezium 스크립팅 SMT는 GraalVM JavaScript의 skopeo 223 구현도 지원합니다.
다음 명령을 입력하여
KafkaConnect
빌드 사양을 OpenShift 클러스터에 적용합니다.Copy to Clipboard Copied! Toggle word wrap Toggle overflow oc create -f dbz-connect.yaml
oc create -f dbz-connect.yaml
사용자 정의 리소스에 지정된 구성에 따라 Streams Operator는 배포할 Kafka Connect 이미지를 준비합니다.
빌드가 완료되면 Operator에서 이미지를 지정된 레지스트리 또는 ImageStream으로 푸시하고 Kafka Connect 클러스터를 시작합니다. 구성에 나열된 커넥터 아티팩트는 클러스터에서 사용할 수 있습니다.KafkaConnector
리소스를 생성하여 배포하려는 각 커넥터의 인스턴스를 정의합니다.
예를 들어 다음KafkaConnector
CR을 생성하고mysql-inventory-connector.yaml
로 저장합니다.예 2.2. Debezium
커넥터의
파일KafkaConnector
사용자 정의 리소스를 정의하는 MySQL-inventory-connector.yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow apiVersion: kafka.strimzi.io/v1beta2 kind: KafkaConnector metadata: labels: strimzi.io/cluster: debezium-kafka-connect-cluster name: inventory-connector-mysql spec: class: io.debezium.connector.mysql.MySqlConnector tasksMax: 1 config: schema.history.internal.kafka.bootstrap.servers: debezium-kafka-cluster-kafka-bootstrap.debezium.svc.cluster.local:9092 schema.history.internal.kafka.topic: schema-changes.inventory database.hostname: mysql.debezium-mysql.svc.cluster.local database.port: 3306 database.user: debezium database.password: dbz database.server.id: 184054 topic.prefix: inventory-connector-mysql table.include.list: inventory.* ...
apiVersion: kafka.strimzi.io/v1beta2 kind: KafkaConnector metadata: labels: strimzi.io/cluster: debezium-kafka-connect-cluster name: inventory-connector-mysql
1 spec: class: io.debezium.connector.mysql.MySqlConnector
2 tasksMax: 1
3 config:
4 schema.history.internal.kafka.bootstrap.servers: debezium-kafka-cluster-kafka-bootstrap.debezium.svc.cluster.local:9092 schema.history.internal.kafka.topic: schema-changes.inventory database.hostname: mysql.debezium-mysql.svc.cluster.local
5 database.port: 3306
6 database.user: debezium
7 database.password: dbz
8 database.server.id: 184054
9 topic.prefix: inventory-connector-mysql
10 table.include.list: inventory.*
11 ...
표 2.2. 커넥터 구성 설정에 대한 설명 항목 설명 1
Kafka Connect 클러스터에 등록할 커넥터의 이름입니다.
2
커넥터 클래스의 이름입니다.
3
동시에 작동할 수 있는 작업 수입니다.
4
커넥터의 구성입니다.
5
호스트 데이터베이스 인스턴스의 주소입니다.
6
데이터베이스 인스턴스의 포트 번호입니다.
7
Debezium에서 데이터베이스에 연결하는 데 사용하는 계정의 이름입니다.
8
Debezium에서 데이터베이스 사용자 계정에 연결하는 데 사용하는 암호입니다.
9
커넥터의 고유한 숫자 ID입니다.
10
데이터베이스 인스턴스 또는 클러스터의 주제 접두사입니다.
지정된 이름은 영숫자 또는 밑줄로만 작성되어야 합니다.
주제 접두사는 이 커넥터에서 변경 이벤트를 수신하는 Kafka 항목의 접두사로 사용되므로 이름은 클러스터의 커넥터 간에 고유해야 합니다.
이 네임스페이스는 커넥터를 Avro 커넥터와 통합하는 경우 관련 Kafka Connect 스키마의 이름과 해당 Avro 스키마의 네임스페이스에서도 사용됩니다. https://access.redhat.com/documentation/en-us/red_hat_build_of_debezium/2.1.4/html-single/debezium_user_guide/index#avro-serialization11
커넥터가 변경 이벤트를 캡처하는 테이블 목록입니다.
다음 명령을 실행하여 커넥터 리소스를 생성합니다.
Copy to Clipboard Copied! Toggle word wrap Toggle overflow oc create -n <namespace> -f <kafkaConnector>.yaml
oc create -n <namespace> -f <kafkaConnector>.yaml
예를 들면 다음과 같습니다.
Copy to Clipboard Copied! Toggle word wrap Toggle overflow oc create -n debezium -f mysql-inventory-connector.yaml
oc create -n debezium -f mysql-inventory-connector.yaml
커넥터는 Kafka Connect 클러스터에 등록되며
KafkaConnector
CR에서spec.config.database.dbname
에 지정된 데이터베이스에 대해 실행되기 시작합니다. 커넥터 Pod가 준비되면 Debezium이 실행됩니다.
이제 Debezium 배포를 확인할 준비가 되었습니다.
2.2.2. Debezium 커넥터가 실행 중인지 확인
커넥터가 오류 없이 올바르게 시작되면 커넥터가 캡처하도록 구성된 각 테이블에 대해 항목이 생성됩니다. 다운스트림 애플리케이션은 이러한 주제를 구독하여 소스 데이터베이스에서 발생하는 정보 이벤트를 검색할 수 있습니다.
커넥터가 실행 중인지 확인하려면 OpenShift Container Platform 웹 콘솔 또는 OpenShift CLI 툴(oc)에서 다음 작업을 수행합니다.
- 커넥터 상태를 확인합니다.
- 커넥터가 주제를 생성하는지 확인합니다.
- 커넥터가 각 테이블의 초기 스냅샷 중에 생성하는 읽기 작업("op":"r")에 대해 주제가 채워지는지 확인합니다.
사전 요구 사항
- Debezium 커넥터는 OpenShift의 AMQ Streams에 배포됩니다.
-
OpenShift
oc
CLI 클라이언트가 설치되어 있어야 합니다. - OpenShift Container Platform 웹 콘솔에 액세스할 수 있습니다.
절차
다음 방법 중 하나를 사용하여
KafkaConnector
리소스의 상태를 확인합니다.OpenShift Container Platform 웹 콘솔에서 다음을 수행합니다.
- 홈 → 검색으로 이동합니다.
-
검색 페이지에서 리소스를 클릭하여 리소스 선택 상자를 연 다음
KafkaConnector
를 입력합니다. - KafkaConnectors 목록에서 확인할 커넥터 이름을 클릭합니다(예: inventory-connector-mysql ).
- Conditions 섹션에서 Type 및 Status 열의 값이 Ready 및 True 로 설정되어 있는지 확인합니다.
터미널 창에서 다음을 수행합니다.
다음 명령을 실행합니다.
Copy to Clipboard Copied! Toggle word wrap Toggle overflow oc describe KafkaConnector <connector-name> -n <project>
oc describe KafkaConnector <connector-name> -n <project>
예를 들면 다음과 같습니다.
Copy to Clipboard Copied! Toggle word wrap Toggle overflow oc describe KafkaConnector inventory-connector-mysql -n debezium
oc describe KafkaConnector inventory-connector-mysql -n debezium
이 명령은 다음 출력과 유사한 상태 정보를 반환합니다.
예 2.3.
KafkaConnector
리소스 상태Copy to Clipboard Copied! Toggle word wrap Toggle overflow Name: inventory-connector-mysql Namespace: debezium Labels: strimzi.io/cluster=debezium-kafka-connect-cluster Annotations: <none> API Version: kafka.strimzi.io/v1beta2 Kind: KafkaConnector ... Status: Conditions: Last Transition Time: 2021-12-08T17:41:34.897153Z Status: True Type: Ready Connector Status: Connector: State: RUNNING worker_id: 10.131.1.124:8083 Name: inventory-connector-mysql Tasks: Id: 0 State: RUNNING worker_id: 10.131.1.124:8083 Type: source Observed Generation: 1 Tasks Max: 1 Topics: inventory-connector-mysql.inventory inventory-connector-mysql.inventory.addresses inventory-connector-mysql.inventory.customers inventory-connector-mysql.inventory.geom inventory-connector-mysql.inventory.orders inventory-connector-mysql.inventory.products inventory-connector-mysql.inventory.products_on_hand Events: <none>
Name: inventory-connector-mysql Namespace: debezium Labels: strimzi.io/cluster=debezium-kafka-connect-cluster Annotations: <none> API Version: kafka.strimzi.io/v1beta2 Kind: KafkaConnector ... Status: Conditions: Last Transition Time: 2021-12-08T17:41:34.897153Z Status: True Type: Ready Connector Status: Connector: State: RUNNING worker_id: 10.131.1.124:8083 Name: inventory-connector-mysql Tasks: Id: 0 State: RUNNING worker_id: 10.131.1.124:8083 Type: source Observed Generation: 1 Tasks Max: 1 Topics: inventory-connector-mysql.inventory inventory-connector-mysql.inventory.addresses inventory-connector-mysql.inventory.customers inventory-connector-mysql.inventory.geom inventory-connector-mysql.inventory.orders inventory-connector-mysql.inventory.products inventory-connector-mysql.inventory.products_on_hand Events: <none>
커넥터가 Kafka 주제를 생성했는지 확인합니다.
OpenShift Container Platform 웹 콘솔에서 다음을 수행합니다.
- 홈 → 검색으로 이동합니다.
-
검색 페이지에서 리소스를 클릭하여 리소스 선택 상자를 연 다음
KafkaTopic
을 입력합니다. -
KafkaTopics 목록에서 inventory
-connector-mysql.inventory.orders--ac5e98ac6a5d91e04d8ec0dc9078a1ece439081d
와 같은 항목을 클릭합니다. - Conditions 섹션에서 Type 및 Status 열의 값이 Ready 및 True 로 설정되어 있는지 확인합니다.
터미널 창에서 다음을 수행합니다.
다음 명령을 실행합니다.
Copy to Clipboard Copied! Toggle word wrap Toggle overflow oc get kafkatopics
oc get kafkatopics
이 명령은 다음 출력과 유사한 상태 정보를 반환합니다.
예 2.4.
KafkaTopic
리소스 상태Copy to Clipboard Copied! Toggle word wrap Toggle overflow NAME CLUSTER PARTITIONS REPLICATION FACTOR READY connect-cluster-configs debezium-kafka-cluster 1 1 True connect-cluster-offsets debezium-kafka-cluster 25 1 True connect-cluster-status debezium-kafka-cluster 5 1 True consumer-offsets---84e7a678d08f4bd226872e5cdd4eb527fadc1c6a debezium-kafka-cluster 50 1 True inventory-connector-mysql--a96f69b23d6118ff415f772679da623fbbb99421 debezium-kafka-cluster 1 1 True inventory-connector-mysql.inventory.addresses---1b6beaf7b2eb57d177d92be90ca2b210c9a56480 debezium-kafka-cluster 1 1 True inventory-connector-mysql.inventory.customers---9931e04ec92ecc0924f4406af3fdace7545c483b debezium-kafka-cluster 1 1 True inventory-connector-mysql.inventory.geom---9f7e136091f071bf49ca59bf99e86c713ee58dd5 debezium-kafka-cluster 1 1 True inventory-connector-mysql.inventory.orders---ac5e98ac6a5d91e04d8ec0dc9078a1ece439081d debezium-kafka-cluster 1 1 True inventory-connector-mysql.inventory.products---df0746db116844cee2297fab611c21b56f82dcef debezium-kafka-cluster 1 1 True inventory-connector-mysql.inventory.products_on_hand---8649e0f17ffcc9212e266e31a7aeea4585e5c6b5 debezium-kafka-cluster 1 1 True schema-changes.inventory debezium-kafka-cluster 1 1 True strimzi-store-topic---effb8e3e057afce1ecf67c3f5d8e4e3ff177fc55 debezium-kafka-cluster 1 1 True strimzi-topic-operator-kstreams-topic-store-changelog---b75e702040b99be8a9263134de3507fc0cc4017b debezium-kafka-cluster 1 1 True
NAME CLUSTER PARTITIONS REPLICATION FACTOR READY connect-cluster-configs debezium-kafka-cluster 1 1 True connect-cluster-offsets debezium-kafka-cluster 25 1 True connect-cluster-status debezium-kafka-cluster 5 1 True consumer-offsets---84e7a678d08f4bd226872e5cdd4eb527fadc1c6a debezium-kafka-cluster 50 1 True inventory-connector-mysql--a96f69b23d6118ff415f772679da623fbbb99421 debezium-kafka-cluster 1 1 True inventory-connector-mysql.inventory.addresses---1b6beaf7b2eb57d177d92be90ca2b210c9a56480 debezium-kafka-cluster 1 1 True inventory-connector-mysql.inventory.customers---9931e04ec92ecc0924f4406af3fdace7545c483b debezium-kafka-cluster 1 1 True inventory-connector-mysql.inventory.geom---9f7e136091f071bf49ca59bf99e86c713ee58dd5 debezium-kafka-cluster 1 1 True inventory-connector-mysql.inventory.orders---ac5e98ac6a5d91e04d8ec0dc9078a1ece439081d debezium-kafka-cluster 1 1 True inventory-connector-mysql.inventory.products---df0746db116844cee2297fab611c21b56f82dcef debezium-kafka-cluster 1 1 True inventory-connector-mysql.inventory.products_on_hand---8649e0f17ffcc9212e266e31a7aeea4585e5c6b5 debezium-kafka-cluster 1 1 True schema-changes.inventory debezium-kafka-cluster 1 1 True strimzi-store-topic---effb8e3e057afce1ecf67c3f5d8e4e3ff177fc55 debezium-kafka-cluster 1 1 True strimzi-topic-operator-kstreams-topic-store-changelog---b75e702040b99be8a9263134de3507fc0cc4017b debezium-kafka-cluster 1 1 True
주제 콘텐츠를 확인합니다.
- 터미널 창에서 다음 명령을 입력합니다.
Copy to Clipboard Copied! Toggle word wrap Toggle overflow oc exec -n <project> -it <kafka-cluster> -- /opt/kafka/bin/kafka-console-consumer.sh \ > --bootstrap-server localhost:9092 \ > --from-beginning \ > --property print.key=true \ > --topic=<topic-name>
oc exec -n <project> -it <kafka-cluster> -- /opt/kafka/bin/kafka-console-consumer.sh \ > --bootstrap-server localhost:9092 \ > --from-beginning \ > --property print.key=true \ > --topic=<topic-name>
예를 들면 다음과 같습니다.
Copy to Clipboard Copied! Toggle word wrap Toggle overflow oc exec -n debezium -it debezium-kafka-cluster-kafka-0 -- /opt/kafka/bin/kafka-console-consumer.sh \ > --bootstrap-server localhost:9092 \ > --from-beginning \ > --property print.key=true \ > --topic=inventory-connector-mysql.inventory.products_on_hand
oc exec -n debezium -it debezium-kafka-cluster-kafka-0 -- /opt/kafka/bin/kafka-console-consumer.sh \ > --bootstrap-server localhost:9092 \ > --from-beginning \ > --property print.key=true \ > --topic=inventory-connector-mysql.inventory.products_on_hand
주제 이름을 지정하는 형식은
oc describe
명령과 1단계에서 반환하는 것과 동일합니다(예:inventory-connector-mysql.inventory.addresses
).주제의 각 이벤트에 대해 명령에서 다음 출력과 유사한 정보를 반환합니다.
예 2.5. Debezium 변경 이벤트의 내용
Copy to Clipboard Copied! Toggle word wrap Toggle overflow {"schema":{"type":"struct","fields":[{"type":"int32","optional":false,"field":"product_id"}],"optional":false,"name":"inventory-connector-mysql.inventory.products_on_hand.Key"},"payload":{"product_id":101}} {"schema":{"type":"struct","fields":[{"type":"struct","fields":[{"type":"int32","optional":false,"field":"product_id"},{"type":"int32","optional":false,"field":"quantity"}],"optional":true,"name":"inventory-connector-mysql.inventory.products_on_hand.Value","field":"before"},{"type":"struct","fields":[{"type":"int32","optional":false,"field":"product_id"},{"type":"int32","optional":false,"field":"quantity"}],"optional":true,"name":"inventory-connector-mysql.inventory.products_on_hand.Value","field":"after"},{"type":"struct","fields":[{"type":"string","optional":false,"field":"version"},{"type":"string","optional":false,"field":"connector"},{"type":"string","optional":false,"field":"name"},{"type":"int64","optional":false,"field":"ts_ms"},{"type":"string","optional":true,"name":"io.debezium.data.Enum","version":1,"parameters":{"allowed":"true,last,false"},"default":"false","field":"snapshot"},{"type":"string","optional":false,"field":"db"},{"type":"string","optional":true,"field":"sequence"},{"type":"string","optional":true,"field":"table"},{"type":"int64","optional":false,"field":"server_id"},{"type":"string","optional":true,"field":"gtid"},{"type":"string","optional":false,"field":"file"},{"type":"int64","optional":false,"field":"pos"},{"type":"int32","optional":false,"field":"row"},{"type":"int64","optional":true,"field":"thread"},{"type":"string","optional":true,"field":"query"}],"optional":false,"name":"io.debezium.connector.mysql.Source","field":"source"},{"type":"string","optional":false,"field":"op"},{"type":"int64","optional":true,"field":"ts_ms"},{"type":"struct","fields":[{"type":"string","optional":false,"field":"id"},{"type":"int64","optional":false,"field":"total_order"},{"type":"int64","optional":false,"field":"data_collection_order"}],"optional":true,"field":"transaction"}],"optional":false,"name":"inventory-connector-mysql.inventory.products_on_hand.Envelope"},"payload":{"before":null,"after":{"product_id":101,"quantity":3},"source":{"version":"2.1.4.Final-redhat-00001","connector":"mysql","name":"inventory-connector-mysql","ts_ms":1638985247805,"snapshot":"true","db":"inventory","sequence":null,"table":"products_on_hand","server_id":0,"gtid":null,"file":"mysql-bin.000003","pos":156,"row":0,"thread":null,"query":null},"op":"r","ts_ms":1638985247805,"transaction":null}}
{"schema":{"type":"struct","fields":[{"type":"int32","optional":false,"field":"product_id"}],"optional":false,"name":"inventory-connector-mysql.inventory.products_on_hand.Key"},"payload":{"product_id":101}} {"schema":{"type":"struct","fields":[{"type":"struct","fields":[{"type":"int32","optional":false,"field":"product_id"},{"type":"int32","optional":false,"field":"quantity"}],"optional":true,"name":"inventory-connector-mysql.inventory.products_on_hand.Value","field":"before"},{"type":"struct","fields":[{"type":"int32","optional":false,"field":"product_id"},{"type":"int32","optional":false,"field":"quantity"}],"optional":true,"name":"inventory-connector-mysql.inventory.products_on_hand.Value","field":"after"},{"type":"struct","fields":[{"type":"string","optional":false,"field":"version"},{"type":"string","optional":false,"field":"connector"},{"type":"string","optional":false,"field":"name"},{"type":"int64","optional":false,"field":"ts_ms"},{"type":"string","optional":true,"name":"io.debezium.data.Enum","version":1,"parameters":{"allowed":"true,last,false"},"default":"false","field":"snapshot"},{"type":"string","optional":false,"field":"db"},{"type":"string","optional":true,"field":"sequence"},{"type":"string","optional":true,"field":"table"},{"type":"int64","optional":false,"field":"server_id"},{"type":"string","optional":true,"field":"gtid"},{"type":"string","optional":false,"field":"file"},{"type":"int64","optional":false,"field":"pos"},{"type":"int32","optional":false,"field":"row"},{"type":"int64","optional":true,"field":"thread"},{"type":"string","optional":true,"field":"query"}],"optional":false,"name":"io.debezium.connector.mysql.Source","field":"source"},{"type":"string","optional":false,"field":"op"},{"type":"int64","optional":true,"field":"ts_ms"},{"type":"struct","fields":[{"type":"string","optional":false,"field":"id"},{"type":"int64","optional":false,"field":"total_order"},{"type":"int64","optional":false,"field":"data_collection_order"}],"optional":true,"field":"transaction"}],"optional":false,"name":"inventory-connector-mysql.inventory.products_on_hand.Envelope"},"payload":{"before":null,"after":{"product_id":101,"quantity":3},"source":{"version":"2.1.4.Final-redhat-00001","connector":"mysql","name":"inventory-connector-mysql","ts_ms":1638985247805,"snapshot":"true","db":"inventory","sequence":null,"table":"products_on_hand","server_id":0,"gtid":null,"file":"mysql-bin.000003","pos":156,"row":0,"thread":null,"query":null},"op":"r","ts_ms":1638985247805,"transaction":null}}
위 예제에서
페이로드
값은 커넥터 스냅샷이 테이블inventory.ECDHE_on_hand
에서 읽기("op" ="r"
) 이벤트를 생성했음을 보여줍니다.product_id
레코드의"before"
상태는 레코드에 이전 값이 없음을 나타내는null
입니다."after"
상태는product_id
101
이 있는 항목에 대한수량
을 표시합니다.
여러 Kafka Connect 서비스 클러스터 및 여러 Kafka 클러스터를 사용하여 Debezium을 실행할 수 있습니다. Kafka Connect 클러스터에 배포할 수 있는 커넥터 수는 데이터베이스 이벤트의 볼륨 및 비율에 따라 달라집니다.
다음 단계
특정 커넥터 배포에 대한 자세한 내용은 Debezium 사용자 가이드의 다음 항목을 참조하십시오.
부록 A. 서브스크립션 사용
Debezium은 소프트웨어 서브스크립션을 통해 제공됩니다. 서브스크립션을 관리하려면 Red Hat 고객 포털에서 계정에 액세스하십시오.
귀하의 계정에 액세스
- access.redhat.com 으로 이동합니다.
- 아직 계정이 없는 경우 계정을 생성합니다.
- 계정에 로그인합니다.
서브스크립션 활성화
- access.redhat.com 으로 이동합니다.
- 내 서브스크립션으로 이동합니다.
- 서브스크립션을 활성화하여 16자리 활성화 번호를 입력합니다.
zip 및 tar 파일 다운로드
zip 또는 tar 파일에 액세스하려면 고객 포털을 사용하여 다운로드할 관련 파일을 찾습니다. RPM 패키지를 사용하는 경우에는 이 단계가 필요하지 않습니다.
- 브라우저를 열고 access.redhat.com/downloads 에서 Red Hat 고객 포털 제품 다운로드 페이지에 로그인합니다.
- 아래로 스크롤하여 INTEGRAT ION 및 AUTOMATION 으로 이동합니다.
- Red Hat Integration 을 클릭하여 Red Hat Integration 다운로드 페이지를 표시합니다.
- 구성 요소에 대한 다운로드 링크를 클릭합니다.
2023-09-19에 최종 업데이트된 문서