갑골문에서 카프카까지 — Docker에서 Confluent의 새 Oracle CDC 소스 커넥터 사용
갑골문에서 카프카까지 — Docker에서 Confluent의 새 Oracle CDC 소스 커넥터 사용
Oracle 데이터를 카프카로 스트리밍할 수 있는 새로운 옵션이 제공되어 매우 기쁩니다.Confluent가'Oracle CDC Source Premium Connector'를 발표하면서 데이터 캡처(CDC)를 변경해 Oracle RDBMS에 추가하거나 업데이트하거나 삭제한 데이터를 캡처하는 새로운 방법이 생겼다.이것은 Oracle 데이터와 패턴 변경을 Kafka와 패턴 등록표로 전송하는 저접촉 방식으로 볼 수 있습니다.
I put together some examples so you can play with this entire pipeline in Docker. Docker is an easy-way to run a an end to end pipeline on your machine. I hope this demo gives you a glimpse of how Oracle CDC to Kafka works.
⚠️ 일부 구성 요소는 유료 제품입니다.💰 생산용으로 제공하다.Oracle과 Confluent 허가증은 모두 당신에게 무료 허가를 수여하고 개발자로서 30일 동안 사용할 수 있습니다. (면책성명: 저는 변호사도 아니고 텔레비전에서도 놀지 않습니다)
🛠 코드: https://github.com/saubury/kafka-connect-oracle-cdc
카프카 연결, CDC - 이게 뭐야?
Kafka Connect은 Apache Kafka와 다른 데이터 시스템(예를 들어 데이터베이스) 사이에서 데이터를 전송하는 소스 프레임워크입니다.Confluent의 Oracle CDC Source Connector는 Kafka Connect의 플러그인으로 Oracle을 원본으로 Kafka에 연결하는 것을 목표로 한다.
이 연결기는 Oracle LogMiner 인터페이스를 사용하여 온라인과 압축 파일의 재작업 로그 파일을 조회합니다.이것은 데이터베이스 재작업에서 DML과 DDL을 직접 전송할 수 있는 Oracle 고유의 방법입니다.이것은 Debezium 프로젝트가 Postgres 미리 쓰기 로그나 MySQL binlog를 읽는 방식과 유사합니다.
Oracle JDBC 소스 커넥터를 직접 사용하지 않는 이유는 무엇입니까?
로빈 모파트(Robin Moffatt)는 How to Integrate Your Databases with Apache Kafka에 데이터베이스(예를 들어 Oracle)에서 데이터를 읽는 JDBC 커넥터와 변경 사항을 추출하는 로그 기반 변경 데이터 캡처(CDC) 도구 간의 차이점에 대해 좋은 글을 썼다.
Oracle JDBC 커넥터는 테이블의 스냅샷을 잘 가져올 수 있습니다.그러나 변경되거나 삭제된 줄을 JDBC 연결기로 식별하는 것은 고통스럽다.예를 들면, 당신은 곧 어두운 세계에 빠지게 될 것이다. 책상 위에 트리거를 놓아 어떤 변화가 일어났는지 확인할 것이다. 아무도 이렇게 하려고 하지 않는다.
한편, Oracle CDC 소스 커넥터는 데이터베이스의 복구 재작업 세그먼트를 실제로 수신합니다.이것은 대부분의 DML (삽입, 업데이트, 삭제) 과 일부 DDL (변경표) 데이터베이스 이벤트를 Oracle 데이터베이스에 포착하여 Kafka와 모드 등록표에 생성할 수 있도록 합니다.
Oracle 버전
강조할 점은 이 블로그를 작성할 때 연결기는 Oracle 11g, 12c, 18c와 함께 사용하지만 Oracle 19c와는 맞지 않는다는 것이다.이 프레젠테이션에서는 Oracle 12c에 플러그 가능한 데이터베이스를 사용합니다.
우리 놀자.
복제 이 환매 프로토콜
git clone [https://github.com/saubury/kafka-connect-oracle-cdc](https://github.com/saubury/kafka-connect-oracle-cdc)
cd kafka-connect-oracle-cdc
Oracle CDC 소스 커넥터 가져오기
Confluent Oracle CDC Source Connector의 라이센스 및 download zip 파일을 확인하십시오.
confluentinc kafka connectoracle cdc로 압축하기 (모든 후속 버전 번호 삭제)
unzip ~/Downloads/confluentinc-kafka-connect-oracle-cdc-1.0.3.zip
mv confluentinc-kafka-connect-oracle-cdc-1.0.3 confluentinc-kafka-connect-oracle-cdc
Oracle Docker 찾기
감사 Stackoverflow은 Oracle을 Docker에서 어떻게 일하게 하는지 설명했습니다(적어도 2021년 2월)
I put together some examples so you can play with this entire pipeline in Docker. Docker is an easy-way to run a an end to end pipeline on your machine. I hope this demo gives you a glimpse of how Oracle CDC to Kafka works.
git clone [https://github.com/saubury/kafka-connect-oracle-cdc](https://github.com/saubury/kafka-connect-oracle-cdc)
cd kafka-connect-oracle-cdc
unzip ~/Downloads/confluentinc-kafka-connect-oracle-cdc-1.0.3.zip
mv confluentinc-kafka-connect-oracle-cdc-1.0.3 confluentinc-kafka-connect-oracle-cdc
이제 Oracle Docker 이미지를 다운로드할 수 있습니다.
docker login --username YourDockerUserName --password-stdin
<<Enter your password>>
docker pull store/oracle/database-enterprise:12.2.0.1
Docker 초창기 회사
플랫폼을 시작할 준비가 되어 있습니다(Oracle, Kafka, Kafka Connect, Schema registry 등).
docker-compose up -d
Oracle Docker 설치
Oracle 데이터베이스가 실행되면 스크립트를 실행하여 일부 설정을 수행해야 합니다.이 SQL은 ARCHIVELOG 모드를 열고 일부 사용자를 만들고 권한을 설정합니다.
우선 데이터베이스가 시작된 것처럼 보이도록 (docker compose logs-f oracle) 확인하고 다음 동작을 실행합니다(궁금한 것은 SQL 스크립트는 here)
docker-compose exec oracle /scripts/go_sqlplus.sh /scripts/oracle_setup_docker
샘플 데이터
이 SQL 스크립트는 EMP 테이블을 만들고 직원 4명을 추가했습니다.
EMP 표
커넥터 구성
OracleCdcSourceConnector 소스 플러그인을 사용할 수 있는지 확인
curl -s -X GET -H 'Content-Type: application/json' http://localhost:8083/connector-plugins | jq '.'
클래스: "io.confluent.connect.oracle.cdc.OraclecdcSourceConnector"모든 것이 정상적이다. - 이제는 Simple Oracle CDC 연결기를 세울 때다.이 구성은 먼저 EMP 테이블을 스냅샷한 다음 테이블에 따라 모든 명령복구 작업(DML 및 DDL)을 검색합니다.
curl -s -X POST -H 'Content-Type: application/json' --data @SimpleOracleCDC.json http://localhost:8083/connectors | jq
조인트의 상태를 확인합니다.상태를 표시하려면 1분 정도 기다려야 할 수 있습니다curl -s -X GET -H 'Content-Type: application/json' http://localhost:8083/connectors/SimpleOracleCDC/status | jq
테마 확인
카프카 도구가 로컬에 설치되어 있는 경우 아래와 같이 AVRO를 반서열화할 수 있습니다
kafka-avro-console-consumer --bootstrap-server localhost:9092 --topic ORCLCDB.C__MYUSER.EMP --from-beginning
또는, Kafka 도구를 설치하지 않은 경우, 다음 용기를 통해 Kafka avro console consumer를 시작할 수 있습니다. (예, 모두 한 줄입니다.)docker-compose exec kafka-connect kafka-avro-console-consumer --bootstrap-server kafka:29092 --property schema.registry.url="http://schema-registry:8081" --topic ORCLCDB.C__MYUSER.EMP --from-beginning
kafka avro console consumer의 (간소화) 출력은 다음과 같습니다.표의 최초의 네 줄은 카프카의 네 가지 기록이다{"I":"\u0001","NAME":{"string":"Bob"}}
{"I":"\u0002","NAME":{"string":"Jane"}}
{"I":"\u0003","NAME":{"string":"Mary"}}
{"I":"\u0004","NAME":{"string":"Alice"}}
패턴
EMP 테이블에 등록된 모델을 살펴보겠습니다.
curl -s -X GET http://localhost:8081/subjects/ORCLCDB.C__MYUSER.EMP-value/versions/1 | jq -r .schema | jq .
이외에 모드의 버전 1이 이렇게 등록되어 있는 것을 보실 수 있습니다"fields": [
{
"name": "I",
"type": {
"type": "bytes"
},
{
"name": "NAME",
"type": [
"string"
]
}
일부 데이터 삽입, 업데이트 및 삭제
이제 더 많은 데이터를 삽입하고 업데이트와 삭제를 시도해 봅시다.
docker compose exec oracle/scripts/go sqlplus를 실행합니다.sh 뒤에 이 SQL.
insert into C##MYUSER.emp (name) values ('Dale');
insert into C##MYUSER.emp (name) values ('Emma');
update C##MYUSER.emp set name = 'Robert' where name = 'Bob';
delete C##MYUSER.emp where name = 'Jane';
commit;
exit
샘플 데이터 업데이트
그러면 EMP 테이블에 두 줄이 추가되고 한 줄이 업데이트되며 한 줄이 삭제됩니다.
업데이트된 EMP 표
kafka avro console consumer의 출력은 다음과 같습니다
{"I":"\u0005","NAME":{"string":"Dale"},"op_type":{"string":"I"}}
{"I":"\u0006","NAME":{"string":"Emma"},"op_type":{"string":"I"}}
{"I":"\u0001","NAME":{"string":"Robert"},"op_type":{"string":"U"}}
{"I":"\u0002","NAME":{"string":"Jane"},"op_type":{"string":"D"}
DDL
지금까지 DML이 테이블에 적용되는 것을 보았습니다.이제 시계를 수정하기 위해 DDL을 시도해 봅시다.
docker compose exec oracle/scripts/go sqlplus를 실행합니다.sh 뒤에 이 SQL.
ALTER TABLE C##MYUSER.EMP ADD (SURNAME VARCHAR2(100));
insert into C##MYUSER.emp (name, surname) values ('Mickey', 'Mouse');
commit;
샘플 데이터 업데이트
우리의 새 줄은 아래와 같다. (새 성씨 열에 주의하라.)
DDL은 EMP 테이블에 적용됨
패턴 돌변
우리가 지금 어떤 모델을 등록했는지 보여 주세요.
curl -s -X GET http://localhost:8081/subjects/ORCLCDB.C__MYUSER.EMP-value/versions
[1,2] - 두 가지 버전의 모드를 사용할 수 있음을 나타냅니다.우리는 모델의 버전 1과 버전 2에 따라 데이터를 등록했다curl -s -X GET http://localhost:8081/subjects/ORCLCDB.C__MYUSER.EMP-value/versions/2 | jq -r .schema | jq .
모드 버전 2에 이 기능이 추가되었습니다{
"name": "SURNAME",
"type": [
"null",
"string"
],
"default": null
}
허물다
용기를 뜯다
docker-compose down
결론
Oracle 데이터베이스의 데이터를 Kafka에 캡처하는 것은 매우 일반적인 요청입니다.Oracle 데이터와 패턴 변경 흐름을 Kafka와 패턴 레지스트리로 전송하는 저접촉 방식이 필요할 때, 융합 지원되는 CDC 원본 연결기를 사용하는 것이 좋습니다.
오, Docker 정말 좋아요!
도구책
Reference
이 문제에 관하여(갑골문에서 카프카까지 — Docker에서 Confluent의 새 Oracle CDC 소스 커넥터 사용), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/saubury/oracle-to-kafka-playing-with-confluent-s-new-oracle-cdc-source-connector-in-docker-5ab6텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)