Kafka Connect JDBC와 Debezium CDC

오펙 호드

JDBC 커넥터Debezium SQL Server CDC 커넥터 (또는 기타 관계형 데이터베이스 커넥터) 의 차이점은 무엇 이며 언제 두 관계형 데이터베이스간에 동기화 할 솔루션을 검색하면서 서로를 선택해야합니까?

이 토론이 Debezium SQL Server CDC 커넥터가 아닌 CDC 대 JDBC 커넥터에 관한 것인지, 아니면 나중에 편집을 기대하는 Debezium에 대한 것인지 확실하지 않은 것은 주어진 답변에 달려 있습니다 (내 경우는 SQL Server 싱크에 관한 것입니다).

이 주제에 대한 내 연구를 공유하여 질문을 유도했습니다 (답변으로)

오펙 호드

이 설명은 DebeziumCDC 에 대한보다 일반적인 해석과 함께 Debezium SQL Server CDC 커넥터JDBC 커넥터 간의 차이점에 중점을 둡니다 .

tl; dr- 아래로 스크롤 :)


여기에 이미지 설명 입력

데베 지움

Debezium은 소스 커넥터로만 사용되며 모든 행 수준 변경 사항을 기록합니다.
Debezium 문서 내용 :

Debezium은 데이터베이스의 변경 사항을 캡처하여 응용 프로그램이 이러한 변경 사항을 확인하고 이에 대응할 수 있도록하는 분산 서비스 집합입니다. Debezium은 각 데이터베이스 테이블 내의 모든 행 수준 변경 사항을 변경 이벤트 스트림에 기록하고 응용 프로그램은 이러한 스트림을 읽고 변경 이벤트가 발생한 순서대로 변경 이벤트를 확인합니다.

SQL Server 용 Debezium 커넥터는 먼저 데이터베이스의 스냅 샷을 기록한 다음 행 수준 변경 레코드를 Kafka로 보내고 각 테이블은 서로 다른 Kafka 항목으로 보냅니다.
SQL Server 용 Debezium 커넥터 설명서 내용 :

Debezium의 SQL Server 커넥터는 SQL Server 데이터베이스 스키마의 행 수준 변경 사항을 모니터링하고 기록 할 수 있습니다.

SQL Server 데이터베이스 / 클러스터에 처음 연결할 때 모든 스키마의 일관된 스냅 샷을 읽습니다. 해당 스냅 샷이 완료되면 커넥터는 SQL Server에 커밋 된 변경 사항을 지속적으로 스트리밍하고 해당 삽입, 업데이트 및 삭제 이벤트를 생성합니다. 각 테이블에 대한 모든 이벤트는 별도의 Kafka 주제에 기록되며 애플리케이션과 서비스에서 쉽게 사용할 수 있습니다.


여기에 이미지 설명 입력

Kafka Connect JDBC

Kafka Connect JDBC는 Kafka에 대한 소스 또는 싱크 커넥터로 사용할 수 있으며 JDBC 드라이버가있는 모든 데이터베이스를 지원합니다.
JDBC 커넥터 문서 내용 :

Kafka Connect JDBC 소스 커넥터를 사용하여 JDBC 드라이버가있는 관계형 데이터베이스에서 Apache Kafka® 주제로 데이터를 가져올 수 있습니다. JDBC 싱크 커넥터를 사용하여 Kafka 주제의 데이터를 JDBC 드라이버가있는 관계형 데이터베이스로 내보낼 수 있습니다. JDBC 커넥터는 각각에 대한 사용자 정의 코드를 요구하지 않고 다양한 데이터베이스를 지원합니다.

여기에는 Microsoft SQL Server에 설치하는 데 대한 몇 가지 사양 이 있지만 이 토론과 관련이 없습니다.

따라서 JDBC 커넥터가 소스와 싱크를 모두 지원하고 Debezium이 소스 (싱크 아님) 만 지원하는 경우 Kafka에서 JDBC 드라이버 (싱크)를 사용하여 데이터베이스에 데이터를 쓰려면 JDBC 커넥터가 사용 방법입니다 (SQL 포함). 섬기는 사람).

이제 비교는 소스 필드로만 좁혀 져야합니다.
JDBC 소스 커넥터 문서 는 첫눈에 더 많은 것을 말하지 않습니다.

주기적으로 SQL 쿼리를 실행하고 결과 집합의 각 행에 대한 출력 레코드를 생성하여 데이터를로드합니다. 기본적으로 데이터베이스의 모든 테이블은 각각 ​​자체 출력 항목에 복사됩니다. 데이터베이스는 새 테이블 또는 삭제 된 테이블을 모니터링하고 자동으로 조정됩니다. 테이블에서 데이터를 복사 할 때 커넥터는 새 데이터 또는 수정 된 데이터를 감지하는 데 사용할 열을 지정하여 새 행이나 수정 된 행만로드 할 수 있습니다.


차이점을 이해하기 위해 조금 더 검색하면 Debezium MySQL Connector를 소스로 사용하고 JDBC Connector를 싱크로 사용하는 Debezium 블로그 에 둘 사이의 차이점에 대한 설명이 있으며 일반적으로 Debezium이 레코드를 제공 한다는 것을 알려줍니다. 데이터베이스 변경에 대한 자세한 정보를 제공하는 반면 JDBC 커넥터는 데이터베이스 변경을 간단한 insert / upsert 명령으로 변환하는 데 더 중점을 둔 레코드를 제공합니다 .

Debezium MySQL 커넥터는 특별히 데이터베이스 변경 사항을 캡처하고 각 행의 새로운 상태를 넘어 이러한 이벤트에 대한 가능한 많은 정보를 제공하도록 설계되었습니다. 한편 Confluent JDBC Sink Connector는 메시지 구조에 따라 각 메시지를 데이터베이스 삽입 / 업서 트로 간단히 변환하도록 설계되었습니다. 따라서 두 커넥터는 메시지에 대해 서로 다른 구조를 갖지만 서로 다른 주제 명명 규칙과 삭제 된 레코드를 나타내는 동작을 사용합니다.

또한 주제 이름과 삭제 방법이 다릅니다.

Debezium은 관리하는 각 테이블을 나타내는 대상 주제에 대해 정규화 된 이름 지정을 사용합니다. 이름 지정은 [논리 이름]. [데이터베이스 이름]. [테이블 이름] 패턴을 따릅니다. Kafka Connect JDBC 커넥터는 간단한 이름 [테이블 이름]으로 작동합니다.

...

Debezium 커넥터가 행이 삭제되었음을 감지하면 삭제 이벤트와 삭제 표시 메시지라는 두 가지 이벤트 메시지를 작성합니다. 삭제 메시지에는 이전 필드에 삭제 된 행의 상태가있는 봉투와 널인 이후 필드가 있습니다. 삭제 표시 메시지에는 삭제 메시지와 동일한 키가 포함되어 있지만 전체 메시지 값은 null이며 Kafka의 로그 압축은이를 활용하여 동일한 키를 가진 이전 메시지를 제거 할 수 있음을 확인합니다. Confluent의 JDBC Sink Connector를 포함한 많은 싱크 커넥터는 이러한 메시지를 예상하지 않으며 대신 두 종류의 메시지가 표시되면 실패합니다.

Confluent 블로그 는 CDC 및 JDBC 커넥터가 작동하는 방식에 대해 자세히 설명합니다. 고정 된 간격마다 소스 데이터베이스에 대한 쿼리를 실행하는이 (JDBC 커넥터) CDC는 데이터베이스 트랜잭션 로그에서 스트리밍하는 빈도가 높은 반면 확장 성이 뛰어난 솔루션은 아닙니다 .

커넥터는 소스 데이터베이스에 대해 JDBC를 통해 쿼리를 실행하여 작동합니다. 모든 행 (대량) 또는 이전 이후 변경된 행 (증분)을 가져 오기 위해이 작업을 수행합니다. 이 쿼리는 poll.interval.ms에 정의 된 간격으로 실행됩니다. 관련된 데이터 볼륨, 물리적 데이터베이스 설계 (인덱싱 등) 및 데이터베이스의 기타 워크로드에 따라 가장 확장 가능한 옵션이 아닐 수 있습니다.

...

올바르게 완료되면 CDC는 기본적으로 데이터베이스의 모든 단일 이벤트를 Kafka로 스트리밍 할 수 있습니다. 일반적으로 관계형 데이터베이스는 데이터베이스의 모든 이벤트가 기록되는 트랜잭션 로그 (DB 유형에 따라 binlog 또는 redo 로그라고도 함)를 사용합니다. 행 업데이트, 행 삽입, 행 삭제 – 모두 데이터베이스의 트랜잭션 로그로 이동합니다. CDC 도구는 일반적으로이 트랜잭션 로그를 활용하여 매우 짧은 대기 시간으로 추출하고 데이터베이스 (또는 그 안의 스키마 / 테이블)에서 발생하는 이벤트에 영향을주지 않습니다.

이 블로그는 또한 CDC와 JDBC 커넥터의 차이점에 대해 설명합니다. 주로 JDBC 커넥터는 삭제 된 레코드 동기화를 지원하지 않으므로 프로토 타이핑에 적합하고 CDC는보다 성숙한 시스템에 적합합니다 .

JDBC 커넥터는 삭제 된 행을 페치 할 수 없습니다. 존재하지 않는 데이터를 어떻게 쿼리합니까?

...

CDC 대 JDBC에 대한 나의 일반적인 조종사는 JDBC가 프로토 타이핑 및 미세한 소량 워크로드에 적합하다는 것입니다. JDBC 커넥터를 사용하는 경우 고려할 사항 :

진정한 CDC를 제공하지 않음 (레코드 삭제 캡처, 레코드 이전 / 이후 버전 필요) 새 이벤트 감지 지연 시간 소스 데이터베이스를 지속적으로 폴링하는 영향 (그리고 원하는 지연 시간과 균형을 이룰 때) 테이블에서 대량 가져 오기를 수행하지 않는 한 , 새 레코드를 찾는 데 사용할 수있는 ID 및 / 또는 타임 스탬프가 있어야합니다. 스키마를 소유하지 않으면 문제가됩니다.


tl; dr 결론

Debezium과 JDBC 커넥터의 주요 차이점은 다음과 같습니다.

  1. Debezium은 Kafka 소스로만 사용되며 JDBC Connector는 Kafka 소스 및 싱크로 사용할 수 있습니다.

출처 :

  1. JDBC 커넥터는 삭제 된 레코드 동기화를 지원하지 않지만 Debezium은 지원합니다.
  2. JDBC 커넥터는 고정 된 간격마다 데이터베이스를 쿼리합니다. 이는 확장 성이 뛰어난 솔루션이 아닌 반면 CDC는 데이터베이스 트랜잭션 로그에서 스트리밍되는 빈도가 더 높습니다.
  3. Debezium은 데이터베이스 변경 사항에 대한 자세한 정보를 레코드에 제공하고 JDBC 커넥터는 데이터베이스 변경 사항을 간단한 insert / upsert 명령으로 변환하는 데 더 중점을 둔 레코드를 제공합니다.
  4. 다른 주제 이름 지정.

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

WorkerSinkTask 오류를 발생시키는 Kafka Connect JDBC 싱크 커넥터

분류에서Dev

Amazon MSK와 Kafka Connect

분류에서Dev

Kafka Connect Standalone : ConnectException : 커넥터를 구현하는 클래스와 ElasticsearchSinkConnector와 일치하는 이름을 찾지 못했습니다.

분류에서Dev

Debezium Kafka 커넥터 mongodb : kafka 커넥터를 mongodb에 연결하는 동안 오류가 발생했습니다.

분류에서Dev

Postgres Debezium CDC는 Kafka에 변경 사항을 게시하지 않습니다.

분류에서Dev

Kafka Connect 로그에서 마스킹?

분류에서Dev

Kafka 2.0-Kafka Connect Sink-Kafka 생산자 만들기

분류에서Dev

kafka 연결의 debezium 소스 커넥터가 kafka에 생성하지 못하면 어떻게해야합니까?

분류에서Dev

Debezium SQL Server 소스 커넥터 세트 Kafka 브로커

분류에서Dev

Debezium Kafka Connect에 SqlServer 커넥터를 올바르게 등록하는 방법-연결이 거부되었습니다.

분류에서Dev

Kafka Connect에서 JDBC 싱크 커넥터를 사용하여 레코드를 삭제할 수없는 이유

분류에서Dev

Kafka Connect MQTT 커넥터가있는 ClassNotFoundException

분류에서Dev

Kafka Connect JDBC 싱크 quote.sql.identifiers가 작동하지 않습니다.

분류에서Dev

Kafka 및 Spark를 사용한 스트림 CDC 변경은 여전히 일괄 적으로 처리하지만 각 레코드를 처리하려고합니다.

분류에서Dev

Kafka Connect JDBC db.timezone 구성

분류에서Dev

Kafka 헤더 필드를 추가하는 Kafka Connect SMT

분류에서Dev

Debezium 및 Kafka Connect JDBC 싱크 커넥터를 사용하여 데이터베이스를 동기화 할 때 기본 키의 이름을 바꾸는 방법은 무엇입니까?

분류에서Dev

ERROR 오류로 인해 중지 중 (org.apache.kafka.connect.cli.ConnectDistributed) java.lang.NoClassDefFoundError : io / debezium / util / IoUtil

분류에서Dev

Kafka Connect JDBC 커넥터 쿼리 + 초기 폴링에서 대규모 데이터 세트로 증가 모드 초크

분류에서Dev

Kafka 및 Kafka Connect 배포 환경

분류에서Dev

Kafka connect: The configuration XXX was supplied but isn't a known config in AdminClientConfig

분류에서Dev

java.lang.NoClassDefFoundError : org / apache / kafka / connect / header / ConnectHeaders

분류에서Dev

debezium kafka connect에서받은 CDC 이벤트에서 테이블 이름과 데이터베이스 이름을 가져 오는 방법

분류에서Dev

Kafka-Connect JDBC 싱크가 upsert 중에 null ID를보고합니다.

분류에서Dev

Kafka connect docker image-Connector를 구현하는 클래스와 ElasticsearchSinkConnector와 일치하는 이름을 찾지 못했습니다.

분류에서Dev

Kafka와 Koa-kafka.connect ()를 생성 할 수 없습니다.

분류에서Dev

Streaminsight 대 CDC

분류에서Dev

Kafka Connect to MSSQL Server Decimal 변환

분류에서Dev

Debezium에서 table_name => kafka 토픽 매핑을 구성하는 것이 가능합니까?

Related 관련 기사

  1. 1

    WorkerSinkTask 오류를 발생시키는 Kafka Connect JDBC 싱크 커넥터

  2. 2

    Amazon MSK와 Kafka Connect

  3. 3

    Kafka Connect Standalone : ConnectException : 커넥터를 구현하는 클래스와 ElasticsearchSinkConnector와 일치하는 이름을 찾지 못했습니다.

  4. 4

    Debezium Kafka 커넥터 mongodb : kafka 커넥터를 mongodb에 연결하는 동안 오류가 발생했습니다.

  5. 5

    Postgres Debezium CDC는 Kafka에 변경 사항을 게시하지 않습니다.

  6. 6

    Kafka Connect 로그에서 마스킹?

  7. 7

    Kafka 2.0-Kafka Connect Sink-Kafka 생산자 만들기

  8. 8

    kafka 연결의 debezium 소스 커넥터가 kafka에 생성하지 못하면 어떻게해야합니까?

  9. 9

    Debezium SQL Server 소스 커넥터 세트 Kafka 브로커

  10. 10

    Debezium Kafka Connect에 SqlServer 커넥터를 올바르게 등록하는 방법-연결이 거부되었습니다.

  11. 11

    Kafka Connect에서 JDBC 싱크 커넥터를 사용하여 레코드를 삭제할 수없는 이유

  12. 12

    Kafka Connect MQTT 커넥터가있는 ClassNotFoundException

  13. 13

    Kafka Connect JDBC 싱크 quote.sql.identifiers가 작동하지 않습니다.

  14. 14

    Kafka 및 Spark를 사용한 스트림 CDC 변경은 여전히 일괄 적으로 처리하지만 각 레코드를 처리하려고합니다.

  15. 15

    Kafka Connect JDBC db.timezone 구성

  16. 16

    Kafka 헤더 필드를 추가하는 Kafka Connect SMT

  17. 17

    Debezium 및 Kafka Connect JDBC 싱크 커넥터를 사용하여 데이터베이스를 동기화 할 때 기본 키의 이름을 바꾸는 방법은 무엇입니까?

  18. 18

    ERROR 오류로 인해 중지 중 (org.apache.kafka.connect.cli.ConnectDistributed) java.lang.NoClassDefFoundError : io / debezium / util / IoUtil

  19. 19

    Kafka Connect JDBC 커넥터 쿼리 + 초기 폴링에서 대규모 데이터 세트로 증가 모드 초크

  20. 20

    Kafka 및 Kafka Connect 배포 환경

  21. 21

    Kafka connect: The configuration XXX was supplied but isn't a known config in AdminClientConfig

  22. 22

    java.lang.NoClassDefFoundError : org / apache / kafka / connect / header / ConnectHeaders

  23. 23

    debezium kafka connect에서받은 CDC 이벤트에서 테이블 이름과 데이터베이스 이름을 가져 오는 방법

  24. 24

    Kafka-Connect JDBC 싱크가 upsert 중에 null ID를보고합니다.

  25. 25

    Kafka connect docker image-Connector를 구현하는 클래스와 ElasticsearchSinkConnector와 일치하는 이름을 찾지 못했습니다.

  26. 26

    Kafka와 Koa-kafka.connect ()를 생성 할 수 없습니다.

  27. 27

    Streaminsight 대 CDC

  28. 28

    Kafka Connect to MSSQL Server Decimal 변환

  29. 29

    Debezium에서 table_name => kafka 토픽 매핑을 구성하는 것이 가능합니까?

뜨겁다태그

보관