แฉแแแก แกแแฅแแแแแแแแจแ แฎแจแแ แแ แแฎแแแแแ แแฎแแ แขแแฅแแแแฃแ แแแแแฌแงแแแขแแแแแแแก/แแ แแแ แแแฃแ แแ แแแฃแฅแขแแแก, แ แแแแแแ แจแแกแแฎแแ แแแคแแ แแแชแแ แกแแแแแแ แแฌแแ แแ แ แฃแกแฃแแแแแแแ แแแขแแ แแแขแจแ. แแ แกแขแแขแแแ แจแแแแชแแแแ แจแแแแแกแ แแ แแ แแกแแแ แฎแแ แแแแ แฉแแแ แแแแแแ แแแแแแแ แแ แแฅแขแแแแก แแแแแแแแแ, แ แแแแกแแช แแญแแ แแแแแแ CDC แแแแแแแแแแก แแแแแแแแแก แแแแคแแแฃแ แแชแแ แแ แ แแแแฃแแแ แฃแแ DBMS-แแแ (PostgreSQL แแ MongoDB) แแแคแแแก แแแแกแขแแ แจแ Debezium-แแก แแแแแงแแแแแแ. แแแแแแแแแแ, แ แแ แแก แแแแแฎแแแแแก แกแขแแขแแ, แ แแแแแแช แแแฌแแฃแแ แกแแแฃแจแแแก แจแแแแแแ แฉแแแก, แกแแกแแ แแแแแ แแฅแแแแ แกแฎแแแแแกแแแแก.
แ แ แแ แแก Debezium แแ CDC แแแแแแแ?
แแแ
แแฃ CDC-แก แจแแแแแแ แแแ แขแ แแแแชแแฃแ แแแแแแแแก (แ แแแแกแแช แแแแแแแชแแ แแแ แแแแแ แแแแฎแฃแแแแก แแแแแชแแแแแก DBMS-แแแ), แแแกแ แแแแแแ แ แฃแแแ แแขแแกแแแแแ แแแแชแแแก แแแแแชแแแแ แชแแแแแแแแก แแแแแแแก แแแแฎแแ แชแแแแแแแก แ แแแแก แแแแแแ แแแแแแ แจแแงแแแแแแแ, แแแฆแแแ แกแแแแแแแแแแ แแ แฎแแแแแกแแฌแแแแแแแแ. แแแแ แแ แ แฌแแ แขแแแ แแแแฆแฌแแแ แแแคแแแก แแแแกแขแแ แแก, แ แแแแ แช CDC แแแแแแแแแแก แกแแชแแแจแ แแแแแงแแแแแแ.
แแแแแ แแ แแ แฃแแแ แแขแแกแแแ แแ แแก แแก แคแแฅแขแ, แ แแ แแ แแ แแแแแแ แแแแแแงแแแแแ แแแแแแแแแแก แจแแกแแแแฎแแ, แแแแขแแ แกแแแแแแ แแแแแแแชแแ แแ แฃแแแ แแแแ แแแฃแแแก แกแฎแแแแแกแฎแแ DBMS-แแแแก แแฃแจแแแแแก แแแฃแแแกแแแแ.
แแ แแแแแก, แจแแขแงแแแแแแแแแแก แแ แแแแ แแก แแแแแงแแแแแ แกแแจแฃแแแแแแก แแซแแแแก แแแแแแแชแแแแก, แ แแแแแแแช แแแแแขแ แแแแแแ แแแแแชแแแแ แชแแแแแแแแแก, แฐแแ แแแแแขแแแฃแ แแ แแแคแแ แแแแแแก. แแแแแแ แแฃแแแ, แแแแแฅแแแแแแ แแแแแชแแแแ แฌแงแแ แแแ แแแแแแฃแแแแแแ แแแงแแแแแแ, แแแแแแแแ แแแแแชแแแแแ แแแแฆแแแ แแ แ แฃแจแฃแแแแ DBMS-แแแ, แแ แแแแ แแแคแแแก แแแแกแขแแ แแแแ.
แแแแแแแฃแแแก แแ แฅแแขแแฅแขแฃแ แแก แจแแกแแฎแแ
Debezium-แแก แแแแแงแแแแแ แแ แแแ แขแแ แกแฅแแแแแแ แแแแแก:
DBMS (แ แแแแ แช แแแแแชแแแแ แฌแงแแ แ) โ แแแแแฅแขแแ แ Kafka Connect-แจแ โ Apache Kafka โ แแแแฎแแแ แแแแแ
แกแแแแฃแกแขแ แแชแแแ, แแฅ แแแชแแแฃแแแ แแแแแ แแแ แแ แแแฅแขแแก แแแแกแแแขแแแแ:
แแฃแแชแ, แแ แแแแแแแแแ แแ แแแแฌแแแก แแก แกแฅแแแ, แ แแแแแ, แ แแแแ แช แฉแแแก, แแฎแแแแ แแแแแ แแก แแแแแฅแขแแ แแก แแแแแงแแแแแแ แจแแกแแซแแแแแแ.
แกแแแแแแแแแแจแ, แกแแขแฃแแชแแ แแแแกแฎแแแแแแฃแแแ: แแฅแแแแ แแแแแชแแแแ แขแแแก แจแแแกแแแ (แแแแ แแแฃแแ แแแแแ แแแชแแแฃแ แแแแแ แแแแจแ) แแก แแ แแ แแก แแแแแแแฃแแแก แแแแแงแแแแแแก แแ แแแแแ แแ แแแ. Apache Kafka-แแ แแแแแแแแแแ แฆแแแแกแซแแแแแแ แจแแแซแแแแ แแแแแงแแแแแฃแ แแฅแแแก แแฅแแแแ แแแแแแแชแแแแแก แแแแ แกแฎแแแแแกแฎแแ แกแแขแฃแแชแแแแแก แแแกแแแแแ แแแแแ. แฒแแแแแแแแ:
- แแ แแ แแแแแแแขแฃแ แ แแแแแชแแแแแแก แแแแฆแแแ แฅแแจแแแแ;
- แจแแขแงแแแแแแแแแแก แแแแแแแแ;
- แกแแซแแแแ แแแแแฅแกแแก แแแแแฎแแแแแแ;
- แแแ แแแแฃแแ แกแแฎแแก แแฃแแแขแแก แแฃแ แแแแ;
- ...
แแ แจแแแแฎแแแแแจแ, แแฃ แแฅแแแ แแแฅแแ Java แแแแแแแชแแ แแ แแ แแ แแก แกแแญแแ แ/แจแแกแแซแแแแแแแ แแแแแแงแแแแก แแแคแแแก แแแแกแขแแ แ, แแกแแแ แแ แกแแแแแก แแฃแจแแแแแก แจแแกแแซแแแแแแแ.
แแก แกแขแแขแแ แแแแแฎแแแแแก แแแแแแแแแ แแแแก แแแแ แ แแแแแแแแแแฃแ แแ แฅแแขแแฅแขแฃแ แแก, แ แแแแแแช แฃแแ แฃแแแแแงแแคแก แจแแชแแแแแแแก แจแแแฌแงแแแ แแแแแแแก แแ แแแกแจแขแแแฃแ แแแแก.
แแแแแฅแขแแ แแก แแแแคแแแฃแ แแชแแ
แแแแกแแแแแก, แ แแ แแแแแฌแงแแ แชแแแแแแแแแแก แแแแแงแฃแ แแก แแแแแแแ แงแแแแแแ แแแแจแแแแแแแแ แแแแจแแแแแแแแจแ - แแแแแชแแแแแจแ - แแแญแแ แแแแ:
- แแแแแชแแแแ แฌแงแแ แ, แ แแแแแแช แจแแแซแแแแ แแงแแก MySQL 5.7 แแแ แกแแแแแ แแแฌแงแแแฃแแ, PostgreSQL 9.6+, MongoDB 3.2+ (
แกแ แฃแแ แกแแ ); - Apache Kafka แแแกแแขแฃแ แ;
- Kafka Connect แแแกแขแแแชแแ (แแแ แกแแแแ 1.x, 2.x);
- แแแแคแแแฃแ แแ แแแฃแแ Debezium แแแแแฅแขแแ แ.
แแแฃแจแแแแ แแแ แแแ แแ แแฃแแฅแขแแ, แ.แ. DBMS-แแกแ แแ Apache Kafka-แก แแแกแขแแแแชแแแก แแ แแชแแกแ แกแชแแแแแแ แกแขแแขแแแก แคแแ แแแแแก. แแฃแแชแ, แแแแแแแก, แแแกแแช แกแฃแ แก แงแแแแแคแ แแก แแแแแแแแแ แฅแแแจแแก แงแฃแแจแ, แแคแแชแแแแฃแ แกแแชแแแก แแแแแแแแแแแ แแฅแแก แแแ
แแแแ แแ แแฃแแฅแขแแ แฃแคแ แ แแแขแแแฃแ แแ แแแกแแฃแแ แแแ.
0. แแแคแแ แแแแแฅแขแ
แแฅ แแ แจแแแแแแ แกแขแแขแแแจแ, แงแแแแ แแแแคแแแฃแ แแชแแแก แแแแแแแแ แแแแแฎแแแแแ Debezium-แแก แแแแแแแแแ แแแแก แแแแ แแแแ แชแแแแแฃแ Docker แแแแแกแแฎแฃแแแแแก แแแแขแแฅแกแขแจแ. แแก แจแแแชแแแก แงแแแแ แกแแญแแ แ แแแแแแแขแแก แคแแแแก (แแแแแฅแขแแ แแแก) แแ แฃแแ แฃแแแแแงแแคแก Kafka Connect-แแก แแแแคแแแฃแ แแชแแแก แแแ แแแแก แชแแแแแแแแก แแแแแงแแแแแแ.
แแฃ แแฅแแแ แแแแ แแแ Kafka Connect-แแก แแแแแงแแแแแแก Confluent-แแแ, แแฅแแแ แแแแแฌแแแ แแแแแฃแแแแแแแแ แแแแแแขแแ แกแแญแแ แ แแแแแฅแขแแ แแแแก แแแแแแแขแแแ แแแแแแแแฃแ แแแ แแฅแขแแ แแแจแ. plugin.path
แแ แแแแงแแแแ แแแ แแแแก แชแแแแแแก แแแจแแแแแแ CLASSPATH
. Kafka Connect แแฃแจแแแแกแ แแ แแแแแฅแขแแ แแแแก แแแ แแแแขแ แแแ แแแแแกแแแฆแแ แแแ แแแแคแแแฃแ แแชแแแก แคแแแแแแแ, แ แแแแแแแช แแ แแฃแแแแขแแแแ แแแแแแชแแแ แแฃแจแแแแก แแแจแแแแแก แแ แซแแแแแแก. แแแฌแแ แแแแแแ แแฎ
Debeizum-แแก แแแแแฅแขแแ แแก แแแ แกแแแจแ แแแงแแแแแแก แแแแแ แแ แแชแแกแ แแ แแขแแแแ แแแแแแแแ แแแแก. แแแแแ แจแแแฎแแแแ แแแแแแฃแ แแแแแแแก:
1. Kafka Connect-แแก แฉแแ แฉแแก แแแงแแแแแ
Apache Kafka แแแแกแขแแ แจแ แแแแแชแแแแแแก แแแแแกแแขแแแแ, แแแคแแ แแแแแฅแขแแก แฉแแ แฉแแจแ แแแงแแแแแฃแแแ แแแแแ แแขแฃแแ แแแ แแแแขแ แแแ, แ แแแแ แแชแแ:
- แแแแกแขแแ แแแ แแแแแแจแแ แแแแก แแแ แแแแขแ แแแ,
- แแแแแแแก แกแแฎแแแแแ, แ แแแแแแจแแช แฃแจแฃแแแแ แจแแแแแฎแแแ แแแแแ แแแแแฅแขแแ แแก แแแแคแแแฃแ แแชแแ,
- แฏแแฃแคแแก แกแแฎแแแ, แ แแแแแจแแช แแฃแจแแแแก แแแแแฅแขแแ แ (แแฃ แแแแแแงแแแแแ แแแแแฌแแแแแฃแแ แ แแแแแ).
แแ แแแฅแขแแก แแคแแชแแแแฃแ แ Docker แกแฃแ แแแ แแฎแแ แก แฃแญแแ แก แแแแคแแแฃแ แแชแแแก แแแ แแแแก แชแแแแแแแแก แแแแแงแแแแแแ - แแก แแ แแก แแก, แ แแกแแช แฉแแแ แแแแแแแงแแแแแ. แแกแ แ แแ, แแแแแแฌแแ แแ แกแฃแ แแแ:
docker pull debezium/connect
แแแแแฅแขแแ แแก แแแกแแจแแแแแ แกแแญแแ แ แแแ แแแ แชแแแแแแแแก แแแแแแแแฃแ แ แแแแ แแแ แจแแแแแแแ:
-
BOOTSTRAP_SERVERS=kafka-1:9092,kafka-2:9092,kafka-3:9092
โ แแแคแแแก แแแแกแขแแ แฃแแ แกแแ แแแ แแแแก แกแแฌแงแแกแ แกแแ แแแแกแขแแ แแก แฌแแแ แแแแก แกแ แฃแแ แกแแแก แแแกแแฆแแแแ; -
OFFSET_STORAGE_TOPIC=connector-offsets
โ แแแแ แแ แแแแแชแแแแแก แจแแกแแแแฎแแ, แกแแแแช แแแแแแแ แแแแแแ แแแแก แแแแแฅแขแแ แ; -
CONNECT_STATUS_STORAGE_TOPIC=connector-status
โ แแแแแฅแขแแ แแก แกแขแแขแฃแกแแกแ แแ แแแกแ แแแแชแแแแแแก แจแแกแแแแฎแ แแแแ; -
CONFIG_STORAGE_TOPIC=connector-config
โ แแแแแฅแขแแ แแก แแแแคแแแฃแ แแชแแแก แแแแแชแแแแแแกแ แแ แแแกแ แแแแชแแแแแแก แจแแกแแแแฎแ แแแแ; -
GROUP_ID=1
โ แแฃแจแแแ แฏแแฃแคแแก แแแแแขแแคแแแแขแแ แ, แ แแแแแแแแแช แจแแกแแซแแแแแแแ แจแแแแแ แแแแแแ แแแแแแแแแก แจแแกแ แฃแแแแ; แแฃแชแแแแแแแแ แแแแแฌแแแแแฃแแ แแแแแงแแแแแแกแแก (แแแแแฌแแแแแฃแแ) แ แแแแแ.
แฉแแแ แแฎแกแแแ แแแแขแแแแแ แก แแ แชแแแแแแแแ:
docker run
-e BOOTSTRAP_SERVERS='kafka-1:9092,kafka-2:9092,kafka-3:9092'
-e GROUP_ID=1
-e CONFIG_STORAGE_TOPIC=my_connect_configs
-e OFFSET_STORAGE_TOPIC=my_connect_offsets
-e STATUS_STORAGE_TOPIC=my_connect_statuses debezium/connect:1.2
แจแแแแจแแแ แแแ แแก แจแแกแแฎแแ
แแแแฃแแแกแฎแแแแแ, Debezium แฌแแ แก แแแแแชแแแแแก JSON แคแแ แแแขแจแ, แ แแช แแแกแแฆแแแแ แฅแแแจแแก แงแฃแแแแแกแแแแก แแ แแชแแ แ แ แแแแแแแแแก แแแแแชแแแแแแกแแแแก, แแแแ แแ แจแแแซแแแแ แแแฎแแแก แแ แแแแแแ แซแแแแแ แแแขแแแ แแฃแ แแแแแชแแแแ แแแแแแจแ. JSON แแแแแแ แขแแ แแก แแแขแแ แแแขแแแ แแ แแก แจแแขแงแแแแแแแแแแก แกแแ แแฃแแ แแแแแงแแแแแ
Avro-แก แแแแแกแแงแแแแแแแ, แแฅแแแ แฃแแแ แแแแแแแแกแแ แชแแแแ
name: CONNECT_VALUE_CONVERTER_SCHEMA_REGISTRY_URL
value: http://kafka-registry-01:8081/
name: CONNECT_KEY_CONVERTER_SCHEMA_REGISTRY_URL
value: http://kafka-registry-01:8081/
name: VALUE_CONVERTER
value: io.confluent.connect.avro.AvroConverter
แแแขแแแแแ Avro-แก แแแแแงแแแแแแกแ แแ แแแกแแ แ แแแกแขแ แแก แแแงแแแแแแก แจแแกแแฎแแ แกแชแแแแแแ แแ แกแขแแขแแแก แคแแ แแแแแก - แจแแแแแแแจแ, แกแแชแฎแแแแกแแแแก, แฉแแแ แแแแแแแงแแแแแ JSON-แก.
2. แแแแแ แแแแแฅแขแแ แแก แแแแคแแแฃแ แแชแแ
แแฎแแ แแฅแแแ แจแแแแซแแแแ แแแ แแแแแ แแแแแฎแแแแแ แแแแแ แแแแแฅแขแแ แแก แแแแคแแแฃแ แแชแแแแ, แ แแแแแแช แฌแแแแแแฎแแแก แแแแแชแแแแแก แฌแงแแ แแแแ.
แแแแแ แจแแแฎแแแแ แแแแแฅแขแแ แแแแก แแแแแแแแก แแ แ DBMS-แแกแแแแก: PostgreSQL แแ MongoDB, แ แแแแแแจแแช แแ แแแฅแแก แแแแแชแแแแแแ แแ แ แแแแแแจแแช แแ แแก แแแแกแฎแแแแแแแแ (แแฃแแชแ แแชแแ แ, แแแแ แแ แแแแแแ แ แจแแแแฎแแแแแจแ แแแแจแแแแแแแแแ!).
แแแแคแแแฃแ แแชแแ แแฆแฌแแ แแแแ JSON แแแขแแชแแแจแ แแ แแแขแแแ แแแแ Kafka Connect-แแ POST แแแแฎแแแแแก แแแแแงแแแแแแ.
2.1. PostgreSQL
แแแแแฅแขแแ แแก แแแแคแแแฃแ แแชแแแก แแแแแแแแ PostgreSQL-แกแแแแก:
{
"name": "pg-connector",
"config": {
"connector.class": "io.debezium.connector.postgresql.PostgresConnector",
"plugin.name": "pgoutput",
"database.hostname": "127.0.0.1",
"database.port": "5432",
"database.user": "debezium",
"database.password": "definitelynotpassword",
"database.dbname" : "dbname",
"database.server.name": "pg-dev",
"table.include.list": "public.(.*)",
"heartbeat.interval.ms": "5000",
"slot.name": "dbname_debezium",
"publication.name": "dbname_publication",
"transforms": "AddPrefix",
"transforms.AddPrefix.type": "org.apache.kafka.connect.transforms.RegexRouter",
"transforms.AddPrefix.regex": "pg-dev.public.(.*)",
"transforms.AddPrefix.replacement": "data.cdc.dbname"
}
}
แแแแแฅแขแแ แแก แแฃแจแแแแแก แแ แแแชแแแ แแ แแแงแแแแแแก แจแแแแแ แกแแแแแแ แแแ แขแแแแ:
- แแแ แแแแแ แแแจแแแแแกแแก, แแก แฃแแ แแแแแ แแแแคแแแฃแ แแชแแแจแ แแแแแแแแฃแ แแแแแชแแแแ แแแแแก แแ แแฌแงแแแ แ แแแแแจแ แกแแฌแงแแกแ แคแแขแแกแฃแ แแแ, แแแคแแแก แฃแแแแแแแก แแแ แแแแแแก แแแแแงแแแแแแ แแแฆแแแฃแแ แแแแแชแแแแแแก แกแแฌแงแแกแ แแแแ แแแแก
SELECT * FROM table_name
. - แแแแชแแแแแแแชแแแก แแแกแ แฃแแแแแก แจแแแแแ, แแแแแฅแขแแ แ แแแแแแแก แ แแแแแจแ, แ แแแ แฌแแแแแแฎแแก แชแแแแแแแแแ PostgreSQL WAL แคแแแแแแแแแ.
แแแแแงแแแแแฃแแ แแแ แแแแขแแแแก แจแแกแแฎแแ:
-
name
- แแแแแฅแขแแ แแก แกแแฎแแแ, แ แแแแแกแแแแกแแช แแแแแแงแแแแแ แฅแแแแแ แแฆแฌแแ แแแ แแแแคแแแฃแ แแชแแ; แแแแแแแแจแ, แแก แกแแฎแแแ แแแแแแงแแแแแ แแแแแฅแขแแ แแแ แแฃแจแแแแแกแแแแก (แแแฃ แกแขแแขแฃแกแแก แแแฎแแ/แแแแแขแแแ แแแ/แแแแคแแแฃแ แแชแแแก แแแแแฎแแแแ) Kafka Connect REST API-แแก แแแจแแแแแแ; -
connector.class
โ DBMS แแแแแฅแขแแ แแก แแแแกแ, แ แแแแแกแแช แแแแแแงแแแแแก แแแแคแแแฃแ แแ แแแฃแแ แแแแแฅแขแแ แ; -
plugin.name
โ แแแแฃแแแก แกแแฎแแแ WAL แคแแแแแแแแแ แแแแแชแแแแแแก แแแแแแฃแ แ แแแจแแคแแ แแกแแแแก. แฎแแแแแกแแฌแแแแแแ แแกแแ แฉแแแแwal2json
,decoderbuffs
ะธpgoutput
. แแแ แแแแ แแ แ แแแแแฎแแแก DBMS-แจแ แจแแกแแแแแแกแ แแแคแแ แแแแแแแแก แแแงแแแแแแก แแpgoutput
PostgreSQL 10 แแ แฃแคแ แ แแแฆแแแ แแแ แกแแแกแแแแก แแ แกแแญแแ แแแแก แแแแแขแแแแ แแแแแแฃแแแชแแแแก; -
database.*
โ แแแแแชแแแแ แแแแแกแแแ แแแแแแจแแ แแแแก แแแ แแแแขแแแ, แกแแแแชdatabase.server.name
โ PostgreSQL แแแกแขแแแชแแแก แกแแฎแแแ, แ แแแแแแช แแแแแแงแแแแแ แแแคแแแก แแแแกแขแแ แจแ แแแแแก แกแแฎแแแแก แจแแกแแฅแแแแแแ; -
table.include.list
โ แชแฎแ แแแแแแก แกแแ, แ แแแแแแจแแช แแแแแแ แแแแแงแฃแ แ แแแแแแแ แชแแแแแแแแแก; แคแแ แแแขแจแ แแแแแแแแฃแแschema.table_name
; แแ แจแแแซแแแแ แแแแแงแแแแแฃแ แแฅแแแก แแ แแแtable.exclude.list
; -
heartbeat.interval.ms
โ แแแขแแ แแแแ (แแแแแฌแแแแแจแ), แ แแแแแแแช แแแแแฅแขแแ แ แแแแแแแแก แแฃแแแกแชแแแแก แจแแขแงแแแแแแแแแก แกแแแชแแแแฃแ แแแแแแ; -
heartbeat.action.query
โ แแแแฎแแแแ, แ แแแแแแช แจแแกแ แฃแแแแแ แงแแแแแ แแฃแแแกแชแแแแก แจแแขแงแแแแแแแแก แแแแแแแแแกแแก (แแคแชแแ แแแแแฉแแแ 1.1 แแแ แกแแแจแ); -
slot.name
โ แ แแแแแแแชแแแก แกแแแขแแก แกแแฎแแแ, แ แแแแแกแแช แแแแแแงแแแแแก แแแแแฅแขแแ แ; publication.name
- แกแแฎแแแแแแแแแแกแแแแก PostgreSQL-แจแ, แ แแแแแกแแช แแแแแฅแขแแ แ แแงแแแแแก. แแฃ แแก แแ แแ แกแแแแแก, Debezium แจแแแชแแแแ แแแก แจแแฅแแแแก. แแฃ แแแแฎแแแ แแแแแก, แ แแแแแก แฅแแแจแแช แฎแแแแ แแแแจแแ แ, แแ แแฅแแก แกแแแแแ แแกแ แฃแคแแแแแแ แแ แแแฅแแแแแแแกแแแแก, แแแแแฅแขแแ แ แจแแชแแแแแ แจแแฌแงแแแแ;-
transforms
แแฃแกแขแแ แแแแกแแแฆแแ แแแก, แแฃ แ แแแแ แฃแแแ แจแแแชแแแแแก แกแแแแแแ แแแแแก แกแแฎแแแ:-
transforms.AddPrefix.type
แแแฃแแแแแแก, แ แแ แฉแแแ แแแแแแแงแแแแแ แ แแแฃแแแ แฃแ แแแแแแแแฅแแแแแแก; -
transforms.AddPrefix.regex
โ แแแฆแแแ, แ แแแแแแช แฎแแแแฎแแ แแแแกแแแฆแแ แแแก แกแแแแแแ แแแแแก แกแแฎแแแก; -
transforms.AddPrefix.replacement
- แแแ แแแแแ แ แแก แแแแแกแแแฆแแ แแแ.
-
แแแขแ แแฃแแแกแชแแแแกแ แแ แแแ แแแฅแแแแแแก แจแแกแแฎแแ
แแแแฃแแแกแฎแแแแแ, แแแแแฅแขแแ แ แแแแแแแแก แแแแแชแแแแแก แแแคแแแก แแแแแแฃแแ แฉแแแแแแแ แขแ แแแแแฅแชแแแกแแแแก แแ แแแกแ LSN (Log Sequence Number) แฉแแแฌแแ แแแ แกแแ แแแกแแก แแแแแจแ. offset
. แแแแ แแ แ แ แแแฎแแแแ, แแฃ แแแแแฅแขแแ แ แแแแคแแแฃแ แแ แแแฃแแแ แแกแ, แ แแ แฌแแแแแแฎแแก แแ แ แแแแแ แแแแแชแแแแ แแแแ, แแ แแแแ แแแกแ แชแฎแ แแแแแแก แแฎแแแแ แแแฌแแแ (แ แแแแแจแแช แแแแแชแแแแ แแแแแฎแแแแแแ แฎแจแแ แแ แแ แฎแแแแ)?
- แแแแแฅแขแแ แ แฌแแแแแแฎแแแก WAL แคแแแแแแก แแ แแ แแฆแแแแฉแแแก แขแ แแแแแฅแชแแแก แแแแแแแฃแแแแแแก แแ แชแฎแ แแแแแแแ, แ แแแแแแกแแช แแแแแขแ แแแแแก.
- แแแแขแแ, แแก แแ แแแแแแฎแแแแก แแแแแก แแแแแแแแแแ แแแแแชแแแก แแ แช แแแแแจแ แแ แแ แช แ แแแแแแแชแแแก แกแแแขแจแ.
- แแก, แแแแแก แแฎแ แแ, แแแแแแฌแแแแก WAL แคแแแแแแแก แจแแแแ แฉแฃแแแแแก แแแกแแแ แแ แกแแแแ แแฃแแแ แแแแแฌแฃแ แแแ แแแกแแแ.
แแ แกแฌแแ แแ แแฅ แแแแแก แแแ แแแแขแแแ แกแแแแจแแแแแจแ. heartbeat.interval.ms
ะธ heartbeat.action.query
. แแ แแคแชแแแแแก แฌแงแแแแแแจแ แแแแแงแแแแแ แจแแกแแซแแแแแแก แฎแแแก แแฃแแแกแชแแแแก แจแแขแงแแแแแแแแก แแแแแแแแแก แงแแแแ แฏแแ แแ แแแแแชแแแแแแก แจแแชแแแแก แแแแฎแแแแแก แจแแกแ แฃแแแแแก แชแแแแ แชแฎแ แแแจแ. แแแ แแแแ, LSN, แ แแแแแแแช แแแแแแแ แแแแแแ แแแแก แแแแแฅแขแแ แ (แ แแแแแแแชแแแก แกแแแขแจแ) แแฃแแแแแแ แแแแแฎแแแแแ. แแก แกแแจแฃแแแแแแก แแซแแแแก DBMS-แก แฌแแจแแแแก WAL แคแแแแแแ, แ แแแแแแแช แแฆแแ แแ แแก แกแแญแแ แ. แแฅแแแ แจแแแแซแแแแ แแแแแแ แแแขแ แแแแก แจแแกแแฎแแ, แแฃ แ แแแแ แแฃแจแแแแก แแแ แแแแขแ แแแ
แแแแแ แแ แแ แแแ แแแแขแ, แ แแแแแแช แงแฃแ แแแฆแแแแก แฆแแ แกแแ transforms
. แแฃแแชแ แแก แฃแคแ แ แแแฎแแ แฎแแแฃแแแแแกแ แแ แกแแแแแแแแก แแฎแแแ...
แแแแฃแแแกแฎแแแแแ, Debezium แฅแแแแก แแแแแแก แจแแแแแแ แแแกแแฎแแแแแแก แแแแแขแแแแก แแแแแงแแแแแแ: serverName.schemaName.tableName
. แแก แจแแแซแแแแ แงแแแแแแแแก แแ แแงแแก แแแกแแฎแแ แฎแแแแแ. แฒแแ แแแแขแ แแแ transforms
แแฅแแแ แจแแแแซแแแแ แแแแแแงแแแแ แ แแแฃแแแ แฃแแ แแแแแแแแฅแแแแแแ แชแฎแ แแแแแแก แกแแแก แแแกแแแแแแแ, แแแแแแแแแ, แ แแแแแแแแแช แกแแญแแ แแ แแแแแ แแขแฃแแ แกแแฎแแแแก แแแแแจแ แแแแแขแแแ.
แฉแแแแก แแแแคแแแฃแ แแชแแแจแ แแแแแแแ transforms
แฎแแแแ แจแแแแแแ: แงแแแแ CDC แแแแแแแ แแแแแขแแ แแแแแก แฅแแแจ แแงแแคแ แแแแแชแแแแ แแแแแแแ แแแแแแ แแแแแจแ แกแแฎแแแฌแแแแแแ data.cdc.dbname
. แฌแแแแแฆแแแแ แจแแแแฎแแแแแจแ (แแ แแแ แแแแขแ แแแแก แแแ แแจแ), Debezium แแแแฃแแแกแฎแแแแแ แจแแฅแแแแก แแแแแก แแแแแแฃแแ แชแฎแ แแแแกแแแแก, แ แแแแ แแชแแ: pg-dev.public.<table_name>
.
แแแแแฅแขแแ แแก แจแแแฆแฃแแแแแ
PostgreSQL-แแก แแแแแฅแขแแ แแก แแแแคแแแฃแ แแชแแแก แแฆแฌแแ แแแแแแก แแแกแแกแ แฃแแแแแแ, แฆแแ แก แกแแฃแแแ แ แแแกแ แแฃแจแแแแแก แจแแแแแ แแแฎแแกแแแแแแแแแแ/แจแแแฆแฃแแแแแแ:
- แแแแแฅแขแแ แแก แคแฃแแฅแชแแแแแ แแแ PostgreSQL-แกแแแแก แแงแ แแแแแ แแแแแแฃแ แ แแแแแแแ แแแแก แแแแชแแคแชแแแก. แแแแขแแ แแก แแ แแแแแขแ แแแแแก แแแแฎแแแแแแก แแแแแชแแแแ แแแแแก แกแขแ แฃแฅแขแฃแ แแก แจแแกแแชแแแแแแ (DDL) - แจแแกแแแแแแกแแ, แแก แแแแแชแแแแแ แแ แแฅแแแแ แแแแแแจแ.
- แแแแก แแแแ, แ แแ แ แแแแแแแชแแแก แกแแแขแแแ แแแแแแงแแแแแ, แแแแแฅแขแแ แแก แแแแแแจแแ แแแ แจแแกแแซแแแแแแแ แแฎแแแแ แฌแแแงแแแแ DBMS แแแกแขแแแชแแแกแแแแก.
- แแฃ แแแแฎแแแ แแแแแก, แ แแแแแกแแช แแแแแฅแขแแ แ แฃแแแแจแแ แแแแ แแแแแชแแแแ แแแแแก, แแฅแแก แแฎแแแแ แฌแแแแแฎแแแก แฃแคแแแแแแ, แแแจแแ แแแ แแแ แแแจแแแแแแแ แแแแแฌแแแ แฎแแแแ แจแแฅแแแแ แ แแแแแแแชแแแก แกแแแขแ แแ แแแแแแฅแแแงแแแ แแแแแชแแแแ แแแแแจแ.
แแแแคแแแฃแ แแชแแแก แแแแแงแแแแแ
แแแจ แแกแ, แฉแแแขแแแ แแแ แฉแแแแ แแแแคแแแฃแ แแชแแ แแแแแฅแขแแ แจแ:
curl -i -X POST -H "Accept:application/json"
-H "Content-Type:application/json" http://localhost:8083/connectors/
-d @pg-con.json
แฉแแแ แแแแแฌแแแแ, แ แแ แฉแแแแขแแแ แแแ แฌแแ แแแขแแแแ แแแกแ แฃแแแ แแ แแแแแฅแขแแ แ แแแแฌแงแ:
$ curl -i http://localhost:8083/connectors/pg-connector/status
HTTP/1.1 200 OK
Date: Thu, 17 Sep 2020 20:19:40 GMT
Content-Type: application/json
Content-Length: 175
Server: Jetty(9.4.20.v20190813)
{"name":"pg-connector","connector":{"state":"RUNNING","worker_id":"172.24.0.5:8083"},"tasks":[{"id":0,"state":"RUNNING","worker_id":"172.24.0.5:8083"}],"type":"source"}
แจแแกแแแแจแแแแแ: แแแงแแแแแฃแแแ แแ แแแแแแ แฌแแกแแกแแแแแแ. แแฎแแ แแแแแ แแแงแแ แแแแฎแแแ แแแแแ แแ แแแแฃแแแแจแแ แแแ แแแคแแแก, แ แแก แจแแแแแแแช แแแแแแแขแแแ แแ แจแแแชแแแแ แฉแแแแฌแแ แก แชแฎแ แแแจแ:
$ kafka/bin/kafka-console-consumer.sh
--bootstrap-server kafka:9092
--from-beginning
--property print.key=true
--topic data.cdc.dbname
postgres=# insert into customers (id, first_name, last_name, email) values (1005, 'foo', 'bar', '[email protected]');
INSERT 0 1
postgres=# update customers set first_name = 'egg' where id = 1005;
UPDATE 1
แฉแแแแก แแแแแจแ แแก แแแแแฉแแแแแ แจแแแแแแแแแ แแ:
แซแแแแแ แแ แซแแแ JSON แฉแแแแ แชแแแแแแแแแแ
{
"schema":{
"type":"struct",
"fields":[
{
"type":"int32",
"optional":false,
"field":"id"
}
],
"optional":false,
"name":"data.cdc.dbname.Key"
},
"payload":{
"id":1005
}
}{
"schema":{
"type":"struct",
"fields":[
{
"type":"struct",
"fields":[
{
"type":"int32",
"optional":false,
"field":"id"
},
{
"type":"string",
"optional":false,
"field":"first_name"
},
{
"type":"string",
"optional":false,
"field":"last_name"
},
{
"type":"string",
"optional":false,
"field":"email"
}
],
"optional":true,
"name":"data.cdc.dbname.Value",
"field":"before"
},
{
"type":"struct",
"fields":[
{
"type":"int32",
"optional":false,
"field":"id"
},
{
"type":"string",
"optional":false,
"field":"first_name"
},
{
"type":"string",
"optional":false,
"field":"last_name"
},
{
"type":"string",
"optional":false,
"field":"email"
}
],
"optional":true,
"name":"data.cdc.dbname.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":false,
"field":"schema"
},
{
"type":"string",
"optional":false,
"field":"table"
},
{
"type":"int64",
"optional":true,
"field":"txId"
},
{
"type":"int64",
"optional":true,
"field":"lsn"
},
{
"type":"int64",
"optional":true,
"field":"xmin"
}
],
"optional":false,
"name":"io.debezium.connector.postgresql.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":"data.cdc.dbname.Envelope"
},
"payload":{
"before":null,
"after":{
"id":1005,
"first_name":"foo",
"last_name":"bar",
"email":"[email protected]"
},
"source":{
"version":"1.2.3.Final",
"connector":"postgresql",
"name":"dbserver1",
"ts_ms":1600374991648,
"snapshot":"false",
"db":"postgres",
"schema":"public",
"table":"customers",
"txId":602,
"lsn":34088472,
"xmin":null
},
"op":"c",
"ts_ms":1600374991762,
"transaction":null
}
}{
"schema":{
"type":"struct",
"fields":[
{
"type":"int32",
"optional":false,
"field":"id"
}
],
"optional":false,
"name":"data.cdc.dbname.Key"
},
"payload":{
"id":1005
}
}{
"schema":{
"type":"struct",
"fields":[
{
"type":"struct",
"fields":[
{
"type":"int32",
"optional":false,
"field":"id"
},
{
"type":"string",
"optional":false,
"field":"first_name"
},
{
"type":"string",
"optional":false,
"field":"last_name"
},
{
"type":"string",
"optional":false,
"field":"email"
}
],
"optional":true,
"name":"data.cdc.dbname.Value",
"field":"before"
},
{
"type":"struct",
"fields":[
{
"type":"int32",
"optional":false,
"field":"id"
},
{
"type":"string",
"optional":false,
"field":"first_name"
},
{
"type":"string",
"optional":false,
"field":"last_name"
},
{
"type":"string",
"optional":false,
"field":"email"
}
],
"optional":true,
"name":"data.cdc.dbname.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":false,
"field":"schema"
},
{
"type":"string",
"optional":false,
"field":"table"
},
{
"type":"int64",
"optional":true,
"field":"txId"
},
{
"type":"int64",
"optional":true,
"field":"lsn"
},
{
"type":"int64",
"optional":true,
"field":"xmin"
}
],
"optional":false,
"name":"io.debezium.connector.postgresql.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":"data.cdc.dbname.Envelope"
},
"payload":{
"before":{
"id":1005,
"first_name":"foo",
"last_name":"bar",
"email":"[email protected]"
},
"after":{
"id":1005,
"first_name":"egg",
"last_name":"bar",
"email":"[email protected]"
},
"source":{
"version":"1.2.3.Final",
"connector":"postgresql",
"name":"dbserver1",
"ts_ms":1600375609365,
"snapshot":"false",
"db":"postgres",
"schema":"public",
"table":"customers",
"txId":603,
"lsn":34089688,
"xmin":null
},
"op":"u",
"ts_ms":1600375609778,
"transaction":null
}
}
แแ แแแ แจแแแแฎแแแแแจแ, แฉแแแแฌแแ แแแ แจแแแแแแ แจแแชแแแแแ แฉแแแแฌแแ แแก แแแกแแฆแแแแกแแแ (PK) แแ แชแแแแแแแแแแก แแ แกแแกแแแแ: แ แ แแงแ แฉแแแแฌแแ แ แแแ แ แแ แ แ แแแฎแแ แจแแแแแ.
- แแ แจแแแแฎแแแแแจแ
INSERT
: แฆแแ แแแฃแแแแ แแแ แ (before
) แฃแแ แแกnull
แแ แจแแแแแ - แฎแแแ, แ แแแแแแช แแงแ แฉแแกแแฃแแ. - แแ แจแแแแฎแแแแแจแ
UPDATE
: แแpayload.before
แแแฉแแแแแแแ แฎแแแแก แฌแแแ แแแแแแแ แแแแ แแ inpayload.after
โ แแฎแแแ แชแแแแแแแแแแก แแ แกแแ.
2.2 MongoDB
แแก แแแแแฅแขแแ แ แแงแแแแแก แกแขแแแแแ แขแฃแ MongoDB แ แแแแแแแชแแแก แแแฅแแแแแแก, แแแแฎแฃแแแแก แแแคแแ แแแชแแแก แแแ แแแแแแ DBMS แแแแแซแแก แแแแแแแแแ.
PgSQL-แกแแแแก แฃแแแ แแฆแฌแแ แแแ แแแแแฅแขแแ แแก แแกแแแแกแแ, แแฅแแช, แแแ แแแแ แแแฌแงแแแแกแแก, แฎแแแแ แแแ แแแแแแ แแแแแชแแแแแแก แกแฃแ แแแแก แแแแแฆแแแ, แ แแก แจแแแแแแแช แแแแแฅแขแแ แ แแแแแแแก แแแแแแแก แแแแฎแแแก แ แแแแแจแ.
แแแแคแแแฃแ แแชแแแก แแแแแแแแ:
{
"name": "mp-k8s-mongo-connector",
"config": {
"connector.class": "io.debezium.connector.mongodb.MongoDbConnector",
"tasks.max": "1",
"mongodb.hosts": "MainRepSet/mongo:27017",
"mongodb.name": "mongo",
"mongodb.user": "debezium",
"mongodb.password": "dbname",
"database.whitelist": "db_1,db_2",
"transforms": "AddPrefix",
"transforms.AddPrefix.type": "org.apache.kafka.connect.transforms.RegexRouter",
"transforms.AddPrefix.regex": "mongo.([a-zA-Z_0-9]*).([a-zA-Z_0-9]*)",
"transforms.AddPrefix.replacement": "data.cdc.mongo_$1"
}
}
แ แแแแ แช แฎแแแแแ, แฌแแแ แแแแแแแแแแ แจแแแแ แแแแ แแฅ แแฎแแแ แแแ แแแแขแแแ แแ แแ แแก, แแแแ แแ แแฎแแแแ แแแแแชแแแแ แแแแแกแแแ แแแแแแจแแ แแแแแ แแแกแฃแฎแแกแแแแแแแ แแแ แแแแขแแแแก แ แแแแแแแแ แแ แแแแ แแ แแคแแฅแกแแแ แจแแแชแแ แแ.
แแแ แแแแขแ แแแ transforms
แแแฏแแ แแ แแกแแแ แแแแแแแแ แจแแแแแแก: แแแ แแแฅแแแแแ แกแแแแแแ แแแแแก แกแแฎแแแก แกแฅแแแแแแ <server_name>.<db_name>.<collection_name>
ะฒ data.cdc.mongo_<db_name>
.
แจแแชแแแแแก แขแแแแ แแแขแแแ
แจแแชแแแแแแแก แขแแแแ แแแขแแแแก แแ แแแฆแแแ แฎแแแแแกแแฌแแแแแแแแก แกแแแแแฎแ แฉแแแแก แแ แแจแ แฃแคแ แ แแฌแแแแแ, แแแแ แ แแแแกแแ - แแแแกแแแฃแแ แแแแ แแแจแแ, แ แแแแกแแช แแกแแฃแแ แแแ แแแแแชแแแแแกแ แแ แขแ แแแแแฅแชแแแแแ, แแ แแแแแชแแแแ แชแแแแแแแแแแก แแแแแงแฃแ แแก แแแแแแแ แแ แกแแแแแฎแจแ แแ แแแแก แแแแแ. แแแแ แแแแฎแแ, แ แ แจแแแซแแแแ แแแฎแแแก แแ แแแชแแแจแ แแ แแกแฌแแ แแ แแ แ แ แแแฃแแ แแแแแแแฃแแก แแแแแแฃแ แจแแแแฎแแแแแจแ.
แแ แฉแแแแก แกแแแ แแแ แแแแขแ แแ แกแแแแแก:
- Kafka Connect-แแก แแแ แชแฎแ. แแฃ Connect แแแแคแแแฃแ แแ แแแฃแแแ แแแแแฌแแแแแฃแ แ แแแแแจแ แแฃแจแแแแแกแแแแก, แแก แแแแแฎแแแก แ แแแแแแแแ แแฃแจแแแก, แ แแแ แแแแงแแแแ แแแแแ group.id. แจแแแแแ, แแฃ แแ แ-แแ แแ แแแแแแแ แแแ แแแฎแแ แฎแแ, แแแแแฅแขแแ แ แฎแแแแฎแแ แฉแแแ แแแแแ แกแฎแแ แแฃแจแแแแ แแ แแแแแ แซแแแแแก แแแแฎแแแก แแแคแแแก แแแแแก แแแแ แฉแแแแแฃแแ แแแแแชแแแแแ.
- แแแคแแแก แแแแกแขแแ แแแ แแแแจแแ แแก แแแแแ แแแ. แแแแแฅแขแแ แ แฃแแ แแแแ แจแแฌแงแแแขแก แแแแฎแแแก แแ แแแแแชแแแแ, แ แแแแแแช แแแ แแแฃแแแแแแ แแแคแแแก แแ แแแ แแแแฃแแแ แจแแแชแแแแ แแแก แฎแแแแฎแแ แแแแแแแแแก, แกแแแแ แแชแแแแแแ แแ แแแกแ แฃแแแแแ.
- แแแแแชแแแแ แฌแงแแ แ แแแฃแฌแแแแแแแแ. แแแแแฅแขแแ แ แจแแแชแแแแ แฎแแแแฎแแ แแแฃแแแแจแแ แแแก แฌแงแแ แแก, แ แแแแ แช แแแแคแแแฃแ แแ แแแฃแแแ. แแแแฃแแแกแฎแแแแ แแ แแก 16 แแชแแแแแแ แแแแแงแแแแแแ
แแฅแกแแแแแแชแแฃแ แ แฃแแแ แแแฎแแแ . แแ-16 แฌแแ แฃแแแขแแแแแ แแชแแแแแแแก แจแแแแแ แแแแแแแแ แแแแแแจแแแแ แ แแแแ แช แฉแแแจแแแ แแ แแฅแแแ แแแแญแแ แแแแแ แแแกแ แฎแแแแ แแแแแขแแแ แแแ Kafka Connect REST แแแขแแ แคแแแกแแก แแแจแแแแแแ.- แแ แจแแแแฎแแแแแจแ PostgreSQL แแแแแชแแแแแ แแ แแแแแแ แแแแ, แ แแแแแ แ แแแแแแแชแแแก แกแแแขแแแแก แแแแแงแแแแแ แแแแแแแ แแแแชแแแแแ WAL แคแแแแแแแก แฌแแจแแแก, แ แแแแแแแช แแ แแแแแฎแแแ แแแแแฅแขแแ แแก แแแแ . แแ แจแแแแฎแแแแแจแ, แแแแแขแแก แฃแแ แงแแคแแแ แแฎแแ แแช แแ แแก: แแฃ แแแแแฅแขแแ แกแ แแ DBMS-แก แจแแ แแก แฅแกแแแแก แแแแจแแ แ แแแแ แฎแแแก แแแแแแแแแแแจแ แจแแคแแ แฎแแแฃแแแ, แแ แกแแแแแก แจแแกแแซแแแแแแแ, แ แแ แแแกแแแ แแแแแแ แแแแแฌแฃแ แแก แแ แแแแ แจแแแซแแแแ แแแแแแฌแแแแก แแแ แชแฎแ. แแแแแ DBMS.
- แแ แจแแแแฎแแแแแจแ MySQL binlog แคแแแแแแแก แ แแขแแชแแ แจแแกแแซแแแแแแแ แแแแแ DBMS-แแ, แกแแแแ แแแแจแแ แ แแฆแแแแแ. แแก แแแแแแฌแแแแก แแแแแฅแขแแ แแก แฌแแ แฃแแแขแแแแ แแแแแแแ แแแแแจแ แแแแแกแแแแก แแ แแแ แแแแฃแ แ แแฃแจแแแแแก แแฆแกแแแแแแแ, แแฅแแแ แฃแแแ แแแแแขแแแ แแแ แกแแฌแงแแกแ แกแแแแจแแขแแก แ แแแแแจแ, แ แแแ แแแแแ แซแแแแ แแแแฎแแ แแแแแแแแแแแ.
- on MongoDB. แแแแฃแแแแขแแชแแแจแ แแแแฅแแแแแ: แแแแแฅแขแแ แแก แฅแชแแแ แแ แจแแแแฎแแแแแจแ, แแฃ log/oplog แคแแแแแแ แฌแแแจแแแแ แแ แแแแแฅแขแแ แ แแแ แแแ แซแแแแแก แแแแฎแแแก แแ แแแแแชแแแแแ, แกแแแแช แจแแฉแแ แแ, แแแแแแ แงแแแแ DBMS-แแกแแแแก. แแก แแแจแแแแก, แ แแ แแแแแฅแขแแ แ แแแแแแ แแแแแแแ แแแแแจแ แฉแแแจแแแ แแ แกแแญแแ แแแแก แ แแแแแจแ แแแแแขแแแ แแแแก แกแแฌแงแแกแ แคแแขแแกแฃแ แแแ.
แแฃแแชแ แแ แแก แแแแแแแแแแกแแแแช. แแฃ แแแแแฅแขแแ แ แแแแ แฎแแแก แแแแแแแแแแแจแ แแแแแจแฃแแ แแงแ (แแ แแแ แแแแฆแฌแแ MongoDB แแแแแแแแก) แแ แแ แแ แแแก แแแแแแแแแแแจแ แแแแแแ แแแแแแแ แแ แฃแแแแก, แแแจแแ แ แแแแกแแช แแแแจแแ แ แแฆแแแแแ, แแแแแฅแขแแ แ แแจแแแแแ แแแแแ แซแแแแแก แแแแแชแแแแแแก แฌแแแแแฎแแแก แแแ แแแแ แฎแแแแแกแแฌแแแแแ แแแแแชแแแแแ. แ แแก แแแแแช แแแแแแ แแ แแแแแชแแแ แแแคแแแจแ แแ แแ แแก แแแแ แขแงแแแก.
แแแกแแแแ
Debezium แแ แแก แฉแแแ แแแ แแแแ แแแแแชแแแแแแ CDC แกแแกแขแแแแแแแ แแ แแแแแแแแแแจแ แซแแแแแ แแแแแแแแ. แแ แแแฅแขแแ แแแแแแ แฏแแ แซแแ แแแแแ DBMS-แแแแก แแฎแแ แแแญแแ แแ, แแแแคแแแฃแ แแชแแแก แกแแแแ แขแแแแ, แแแแกแขแแ แฃแแ แแฎแแ แแแญแแ แแ แแ แแฅแขแแฃแ แ แกแแแแแแแแแแแกแแแแก. แแแแแแแก, แแแแช แแแแแขแแ แแกแแแฃแแแ แแ แแฅแขแแแแ, แแแ แฉแแแ, แฌแแแแแแฎแแ แกแแฎแแแแซแฆแแแแแแ
Kafka Connect-แแกแแแแก JDBC แแแแแฅแขแแ แแแ แจแแแแ แแแแ, Debezium-แแก แแแแแแ แ แฃแแแ แแขแแกแแแ แแก แแ แแก, แ แแ แชแแแแแแแแแ แแแแแฎแแแ DBMS แแฃแ แแแแแแแแแ, แ แแช แกแแจแฃแแแแแแก แแซแแแแก แแแแแชแแแแแแก แแแฆแแแแก แแแแแแแแฃแ แ แจแแงแแแแแแแ. JDBC Connector (แแแคแแ แแแแแฅแขแแ แแแแ) แกแแแแก แแแแแขแแ แแแแก แชแฎแ แแแก แคแแฅแกแแ แแแฃแแ แแแขแแ แแแแแ แแ (แแแแแ แแแแแแแก แแแแ) แแ แฅแแแแก แจแแขแงแแแแแแแแแก แแแแแชแแแแแแก แฌแแจแแแกแแก (แ แแแแ แจแแแแซแแแแ แแแแแฎแแแแ แแแแแชแแแแแ, แ แแแแแแแช แแ แแ แกแแแแแก?).
แแกแแแแกแ แแ แแแแแแแแแก แแแแแกแแญแ แแแแ แจแแแแซแแแแ แงแฃแ แแแฆแแแ แแแแฅแชแแแ แจแแแแแ แแแแแฌแงแแแขแแแแแแแก (แแแ แแ Debezium):
-
JDBC แแแแแฅแขแแ แ Kafka Connect; - แ แแแแแแแแ แแแแแกแแแแแ แแฎแแแแ MySQL-แกแแแแก:
-
Oracle GoldenGate , แแแแ แแ แแก แแ แแก แกแ แฃแแแแ แแแแกแฎแแแแแแฃแแ "แฌแแแแก แแแขแแแแ แแ".
PS
แแกแแแ แฌแแแแแแฎแแ แฉแแแแก แแแแแแ:
- ยซ
แแแคแแแก แแแแกแขแแ แแก แจแแกแแแแแแกแ แแแแแก แแแแกแแแฆแแ แ แแฃแแแ แแแขแจแ "; - ยซ
แแ แแฅแขแแแฃแแ แแกแขแแ แแแแ แฉแแแแ SRE แงแแแแแแฆแแฃแ แ แชแฎแแแ แแแแแแ. แฒแ -2 แแแฌแแแ "; - ยซ
PostgreSQL แแแแชแฎแแแแแแแแก แแแแแ แแแแแฎแแแแ Kubernetes-แแกแแแแก, แฉแแแแ แแ แฉแแแแแ แแ แแแแแชแแแแแแ ".
แฌแงแแ แ: www.habr.com