Apache Kafka เชฎเชพเชŸเซ‡ Debezium - CDC เชจเซ‹ เชชเชฐเชฟเชšเชฏ

Apache Kafka เชฎเชพเชŸเซ‡ Debezium - CDC เชจเซ‹ เชชเชฐเชฟเชšเชฏ

เชฎเชพเชฐเชพ เช•เชพเชฐเซเชฏเชฎเชพเช‚, เชนเซเช‚ เชตเชพเชฐเช‚เชตเชพเชฐ เชจเชตเชพ เชคเช•เชจเซ€เช•เซ€ เช‰เช•เซ‡เชฒเซ‹/เชธเซ‹เชซเซเชŸเชตเซ‡เชฐ เช‰เชคเซเชชเชพเชฆเชจเซ‹เชจเซ‡ เชœเซ‹เช‰เช‚ เช›เซเช‚, เชœเซ‡เชจเซ€ เชฎเชพเชนเชฟเชคเซ€ เชฐเชถเชฟเชฏเชจ-เชญเชพเชทเชพเชจเชพ เช‡เชจเซเชŸเชฐเชจเซ‡เชŸ เชชเชฐ เช–เซ‚เชฌ เชœ เชฆเซเชฐเซเชฒเชญ เช›เซ‡. เช† เชฒเซ‡เช– เชธเชพเชฅเซ‡ เชนเซเช‚ เชฎเชพเชฐเซ€ เชคเชพเชœเซ‡เชคเชฐเชจเซ€ เชชเซเชฐเซ‡เช•เซเชŸเชฟเชธเชจเชพ เช‰เชฆเชพเชนเชฐเชฃ เชธเชพเชฅเซ‡ เช†เชตเชพ เชเช• เชคเชซเชพเชตเชคเชจเซ‡ เชญเชฐเชตเชพเชจเซ‹ เชชเซเชฐเชฏเชพเชธ เช•เชฐเซ€เชถ, เชœเซเชฏเชพเชฐเซ‡ เชฎเชจเซ‡ เชฌเซ‡ เชฒเซ‹เช•เชชเซเชฐเชฟเชฏ DBMSs (PostgreSQL เช…เชจเซ‡ MongoDB) เชฎเชพเช‚เชฅเซ€ Debezium เชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ€เชจเซ‡ เช•เชพเชซเช•เชพ เช•เซเชฒเชธเซเชŸเชฐเชฎเชพเช‚ CDC เช‡เชตเซ‡เชจเซเชŸเซเชธ เชฎเซ‹เช•เชฒเชตเชพเชจเซเช‚ เช—เซ‹เช เชตเชตเชพเชจเซ€ เชœเชฐเซ‚เชฐ เชชเชกเซ€. เชนเซเช‚ เช†เชถเชพ เชฐเชพเช–เซเช‚ เช›เซเช‚ เช•เซ‡ เช† เชธเชฎเซ€เช•เซเชทเชพ เชฒเซ‡เช–, เชœเซ‡ เช•เชฐเซ‡เชฒเชพ เช•เชพเชฐเซเชฏเชจเชพ เชชเชฐเชฟเชฃเชพเชฎเซ‡ เชฆเซ‡เช–เชพเชฏ เช›เซ‡, เชคเซ‡ เช…เชจเซเชฏ เชฒเซ‹เช•เซ‹ เชฎเชพเชŸเซ‡ เช‰เชชเชฏเซ‹เช—เซ€ เชฅเชถเซ‡.

เชธเชพเชฎเชพเชจเซเชฏ เชฐเซ€เชคเซ‡ เชกเซ‡เชฌเซ‡เชเชฟเชฏเชฎ เช…เชจเซ‡ เชธเซ€เชกเซ€เชธเซ€ เชถเซเช‚ เช›เซ‡?

เชกเซ‡เชฌเซ‡เชเชฟเชฏเชฎ - เชธเซ€เชกเซ€เชธเซ€ เชธเซ‹เชซเซเชŸเชตเซ‡เชฐ เชถเซเชฐเซ‡เชฃเซ€เชจเชพ เชชเซเชฐเชคเชฟเชจเชฟเชงเชฟ (เช•เซ‡เชชเซเชšเชฐ เชกเซ‡เชŸเชพ เชšเซ‡เชจเซเชœ), เช…เชฅเชตเชพ เชตเชงเซ เชธเซเชชเชทเซเชŸ เชฐเซ€เชคเซ‡, เชคเซ‡ Apache Kafka Connect เชซเซเชฐเซ‡เชฎเชตเชฐเซเช• เชธเชพเชฅเซ‡ เชธเซเชธเช‚เช—เชค เชตเชฟเชตเชฟเชง DBMSs เชฎเชพเชŸเซ‡ เช•เชจเซ‡เช•เซเชŸเชฐเซเชธเชจเซ‹ เชธเชฎเซ‚เชน เช›เซ‡.

เช† เช“เชชเชจ เชธเซ‹เชฐเซเชธ เชชเซเชฐเซ‹เชœเซ‡เช•เซเชŸ, Apache License v2.0 เชนเซ‡เช เชณ เชฒเชพเช‡เชธเชจเซเชธ เช…เชจเซ‡ Red Hat เชฆเซเชตเชพเชฐเชพ เชชเซเชฐเชพเชฏเซ‹เชœเชฟเชค. เชตเชฟเช•เชพเชธ 2016 เชฅเซ€ เชšเชพเชฒเซ เช›เซ‡ เช…เชจเซ‡ เชนเชพเชฒเชฎเชพเช‚ เชคเซ‡ เชจเซ€เชšเซ‡เชจเชพ DBMSs เชฎเชพเชŸเซ‡ เชธเชคเซเชคเชพเชตเชพเชฐ เชธเชฎเชฐเซเชฅเชจ เชชเซเชฐเชฆเชพเชจ เช•เชฐเซ‡ เช›เซ‡: MySQL, PostgreSQL, MongoDB, SQL เชธเชฐเซเชตเชฐ. Cassandra เช…เชจเซ‡ Oracle เชฎเชพเชŸเซ‡ เช•เชจเซ‡เช•เซเชŸเชฐเซเชธ เชชเชฃ เช›เซ‡, เชชเชฐเช‚เชคเซ เช† เช•เซเชทเชฃเซ‡ เชคเซ‡เช“ "เชชเซเชฐเชพเชฐเช‚เชญเชฟเช• เชเช•เซเชธเซ‡เชธ" เชธเซเชฅเชฟเชคเชฟเชฎเชพเช‚ เช›เซ‡, เช…เชจเซ‡ เชจเชตเชพ เชชเซเชฐเช•เชพเชถเชจเซ‹ เชชเช›เชพเชค เชธเซเชธเช‚เช—เชคเชคเชพเชจเซ€ เช–เชพเชคเชฐเซ€ เช†เชชเชคเชพ เชจเชฅเซ€.

เชœเซ‹ เช†เชชเชฃเซ‡ เชชเชฐเช‚เชชเชฐเชพเช—เชค เช…เชญเชฟเช—เชฎ (เชœเซเชฏเชพเชฐเซ‡ เชเชชเซเชฒเชฟเช•เซ‡เชถเชจ เชธเซ€เชงเชพ DBMS เชฎเชพเช‚เชฅเซ€ เชกเซ‡เชŸเชพ เชตเชพเช‚เชšเซ‡ เช›เซ‡) เชธเชพเชฅเซ‡ CDC เชจเซ€ เชธเชฐเช–เชพเชฎเชฃเซ€ เช•เชฐเซ€เช, เชคเซ‹ เชคเซ‡เชจเชพ เชฎเซเช–เซเชฏ เชซเชพเชฏเชฆเชพเช“เชฎเชพเช‚ เช“เช›เซ€ เชตเชฟเชฒเช‚เชฌเชคเชพ, เช‰เชšเซเชš เชตเชฟเชถเซเชตเชธเชจเซ€เชฏเชคเชพ เช…เชจเซ‡ เช‰เชชเชฒเชฌเซเชงเชคเชพ เชธเชพเชฅเซ‡ เชชเช‚เช•เซเชคเชฟ เชธเซเชคเชฐ เชชเชฐ เชกเซ‡เชŸเชพ เชšเซ‡เชจเซเชœ เชธเซเชŸเซเชฐเซ€เชฎเชฟเช‚เช—เชจเซ‹ เช…เชฎเชฒ เชถเชพเชฎเซ‡เชฒ เช›เซ‡. เช›เซ‡เชฒเซเชฒเชพ เชฌเซ‡ เชฎเซเชฆเซเชฆเชพเช“ CDC เช‡เชตเซ‡เชจเซเชŸเซเชธ เชฎเชพเชŸเซ‡ เชญเช‚เชกเชพเชฐ เชคเชฐเซ€เช•เซ‡ เช•เชพเชซเช•เชพ เช•เซเชฒเชธเซเชŸเชฐเชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ€เชจเซ‡ เชชเซเชฐเชพเชชเซเชค เชฅเชพเชฏ เช›เซ‡.

เชฌเซ€เชœเซ‹ เชซเชพเชฏเชฆเซ‹ เช เชนเช•เซ€เช•เชค เช›เซ‡ เช•เซ‡ เชเช• เชœ เชฎเซ‹เชกเซ‡เชฒเชจเซ‹ เช‰เชชเชฏเซ‹เช— เช‡เชตเซ‡เชจเซเชŸเซเชธเชจเซ‡ เชธเช‚เช—เซเชฐเชนเชฟเชค เช•เชฐเชตเชพ เชฎเชพเชŸเซ‡ เชฅเชพเชฏ เช›เซ‡, เชคเซ‡เชฅเซ€ เช…เช‚เชคเชฟเชฎ เชเชชเซเชฒเชฟเช•เซ‡เชถเชจเชจเซ‡ เชตเชฟเชตเชฟเชง DBMS เชจเซ‡ เชšเชฒเชพเชตเชตเชพเชจเซ€ เช˜เซ‹เช‚เช˜เชพเชŸ เชตเชฟเชถเซ‡ เชšเชฟเช‚เชคเชพ เช•เชฐเชตเชพเชจเซ€ เชœเชฐเซ‚เชฐ เชจเชฅเซ€.

เช›เซ‡เชฒเซเชฒเซ‡, เชฎเซ‡เชธเซ‡เชœ เชฌเซเชฐเซ‹เช•เชฐเชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ€เชจเซ‡ เชเชชเซเชฒเซ€เช•เซ‡เชถเชจเชจเซ‡ เชฎเช‚เชœเซ‚เชฐเซ€ เช†เชชเซ‡ เช›เซ‡ เชœเซ‡ เชกเซ‡เชŸเชพเชฎเชพเช‚ เชฅเชคเชพ เชซเซ‡เชฐเชซเชพเชฐเซ‹เชจเซ‡ เช†เชกเซ€ เชฐเซ€เชคเซ‡ เชฎเชพเชชเชตเชพ เชฎเชพเชŸเซ‡ เชฎเซ‹เชจเชฟเชŸเชฐ เช•เชฐเซ‡ เช›เซ‡. เชคเซ‡ เชœ เชธเชฎเชฏเซ‡, เชกเซ‡เชŸเชพ เชธเซเชคเซเชฐเซ‹เชค เชชเชฐเชจเซ€ เช…เชธเชฐ เช“เช›เซ€ เช•เชฐเชตเชพเชฎเชพเช‚ เช†เชตเซ‡ เช›เซ‡, เช•เชพเชฐเชฃ เช•เซ‡ เชกเซ‡เชŸเชพ เชธเซ€เชงเซ‹ DBMS เชฅเซ€ เชจเชนเซ€เช‚, เชชเชฐเช‚เชคเซ เช•เชพเชซเช•เชพ เช•เซเชฒเชธเซเชŸเชฐเชฎเชพเช‚เชฅเซ€ เชฎเซ‡เชณเชตเชตเชพเชฎเชพเช‚ เช†เชตเซ‡ เช›เซ‡.

เชกเซ‡เชฌเซ‡เชเชฟเชฏเชฎ เช†เชฐเซเช•เชฟเชŸเซ‡เช•เซเชšเชฐ เชตเชฟเชถเซ‡

เชกเซ‡เชฌเซ‡เชเชฟเชฏเชฎเชจเซ‹ เช‰เชชเชฏเซ‹เช— เช† เชธเชฐเชณ เชฏเซ‹เชœเชจเชพเชฎเชพเช‚ เช†เชตเซ‡ เช›เซ‡:

DBMS (เชกเซ‡เชŸเชพ เชธเซเชคเซเชฐเซ‹เชค เชคเชฐเซ€เช•เซ‡) โ†’ เช•เชพเชซเช•เชพ เช•เชจเซ‡เช•เซเชŸเชฎเชพเช‚ เช•เชจเซ‡เช•เซเชŸเชฐ โ†’ เช…เชชเชพเชšเซ‡ เช•เชพเชซเช•เชพ โ†’ เช‰เชชเชญเซ‹เช•เซเชคเชพ

เชเช• เช‰เชฆเชพเชนเชฐเชฃ เชคเชฐเซ€เช•เซ‡, เช…เชนเซ€เช‚ เชชเซเชฐเซ‹เชœเซ‡เช•เซเชŸ เชตเซ‡เชฌเชธเชพเช‡เชŸ เชชเชฐเชฅเซ€ เชเช• เช†เช•เซƒเชคเชฟ เช›เซ‡:

Apache Kafka เชฎเชพเชŸเซ‡ Debezium - CDC เชจเซ‹ เชชเชฐเชฟเชšเชฏ

เชœเซ‹ เช•เซ‡, เชฎเชจเซ‡ เช† เชฏเซ‹เชœเชจเชพ เช–เชฐเซ‡เช–เชฐ เช—เชฎเชคเซ€ เชจเชฅเซ€, เช•เชพเชฐเชฃ เช•เซ‡ เชเชตเซเช‚ เชฒเชพเช—เซ‡ เช›เซ‡ เช•เซ‡ เชซเช•เซเชค เชธเชฟเช‚เช• เช•เชจเซ‡เช•เซเชŸเชฐเชจเซ‹ เช‰เชชเชฏเซ‹เช— เชถเช•เซเชฏ เช›เซ‡.

เชตเชพเชธเซเชคเชตเชฎเชพเช‚, เชชเชฐเชฟเชธเซเชฅเชฟเชคเชฟ เช…เชฒเช— เช›เซ‡: เชคเชฎเชพเชฐเชพ เชกเซ‡เชŸเชพ เชฒเซ‡เช•เชจเซ‡ เชญเชฐเชตเชพ (เช‰เชชเชฐเชจเชพ เชšเชฟเชคเซเชฐเชฎเชพเช‚ เช›เซ‡เชฒเซเชฒเซ€ เชฒเชฟเช‚เช•) เชกเซ‡เชฌเซ‡เชเชฟเชฏเชฎเชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเชตเชพเชจเซ‹ เช† เชเช•เชฎเชพเชคเซเชฐ เชฐเชธเซเชคเซ‹ เชจเชฅเซ€. Apache Kafka เชจเซ‡ เชฎเซ‹เช•เชฒเชตเชพเชฎเชพเช‚ เช†เชตเซ‡เชฒ เช‡เชตเซ‡เชจเซเชŸเซเชธเชจเซ‹ เช‰เชชเชฏเซ‹เช— เชคเชฎเชพเชฐเซ€ เชเชชเซเชฒเชฟเช•เซ‡เชถเชจ เชฆเซเชตเชพเชฐเชพ เชตเชฟเชตเชฟเชง เชชเชฐเชฟเชธเซเชฅเชฟเชคเชฟเช“เชจเซ‡ เชนเซ‡เชจเซเชกเชฒ เช•เชฐเชตเชพ เชฎเชพเชŸเซ‡ เช•เชฐเซ€ เชถเช•เชพเชฏ เช›เซ‡. เชฆเชพเช–เซเชฒเชพ เชคเชฐเซ€เช•เซ‡:

  • เช•เซ‡เชถเชฎเชพเช‚เชฅเซ€ เช…เชชเซเชฐเชธเซเชคเซเชค เชกเซ‡เชŸเชพ เชฆเซ‚เชฐ เช•เชฐเซ€ เชฐเชนเซเชฏเชพ เช›เซ€เช;
  • เชธเซ‚เชšเชจเชพเช“ เชฎเซ‹เช•เชฒเชตเซ€;
  • เช…เชจเซเช•เซเชฐเชฎเชฃเชฟเช•เชพ เช…เชชเชกเซ‡เชŸเซเชธ เชถเซ‹เชงเซ‹;
  • เช…เชฎเซเช• เชชเซเชฐเช•เชพเชฐเชจเชพ เช“เชกเชฟเชŸ เชฒเซ‹เช—;
  • ...

เชœเซ‹ เชคเชฎเชพเชฐเซ€ เชชเชพเชธเซ‡ เชœเชพเชตเชพ เชเชชเซเชฒเชฟเช•เซ‡เชถเชจ เชนเซ‹เชฏ เช…เชจเซ‡ เช•เชพเชซเช•เชพ เช•เซเชฒเชธเซเชŸเชฐเชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเชตเชพเชจเซ€ เช•เซ‹เชˆ เชœเชฐเซ‚เชฐ/เชธเช‚เชญเชต เชจ เชนเซ‹เชฏ, เชคเซ‹ เชคเซ‡เชจเชพ เชฆเซเชตเชพเชฐเชพ เช•เชพเชฎ เช•เชฐเชตเชพเชจเซ€ เชถเช•เซเชฏเชคเชพ เชชเชฃ เช›เซ‡. เชเชฎเซเชฌเซ‡เชกเซ‡เชก-เช•เชจเซ‡เช•เซเชŸเชฐ. เชธเซเชชเชทเซเชŸ เชซเชพเชฏเชฆเซ‹ เช เช›เซ‡ เช•เซ‡ เชคเซ‡ เชตเชงเชพเชฐเชพเชจเชพ เช‡เชจเซเชซเซเชฐเชพเชธเซเชŸเซเชฐเช•เซเชšเชฐเชจเซ€ เชœเชฐเซ‚เชฐเชฟเชฏเชพเชคเชจเซ‡ เชฆเซ‚เชฐ เช•เชฐเซ‡ เช›เซ‡ (เชเช• เช•เชจเซ‡เช•เซเชŸเชฐ เช…เชจเซ‡ เช•เชพเชซเช•เชพเชจเชพ เชธเซเชตเชฐเซ‚เชชเชฎเชพเช‚). เชœเซ‹ เช•เซ‡, เช† เชธเซ‹เชฒเซเชฏเซเชถเชจ เชธเช‚เชธเซเช•เชฐเชฃ 1.1 เชฅเซ€ เชจเชพเชชเชธเช‚เชฆ เช•เชฐเชตเชพเชฎเชพเช‚ เช†เชตเซเชฏเซเช‚ เช›เซ‡ เช…เชจเซ‡ เชคเซ‡เชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเชตเชพ เชฎเชพเชŸเซ‡ เชนเชตเซ‡ เชญเชฒเชพเชฎเชฃ เช•เชฐเชตเชพเชฎเชพเช‚ เช†เชตเชคเซ€ เชจเชฅเซ€ (เชคเซ‡เชจเชพ เชฎเชพเชŸเซ‡ เชธเชฎเชฐเซเชฅเชจ เชญเชตเชฟเชทเซเชฏเชจเชพ เชชเซเชฐเช•เชพเชถเชจเซ‹เชฎเชพเช‚ เชฆเซ‚เชฐ เช•เชฐเชตเชพเชฎเชพเช‚ เช†เชตเซ€ เชถเช•เซ‡ เช›เซ‡).

เช† เชฒเซ‡เช– เชตเชฟเช•เชพเชธเช•เชฐเซเชคเชพเช“ เชฆเซเชตเชพเชฐเชพ เชญเชฒเชพเชฎเชฃ เช•เชฐเชพเชฏเซ‡เชฒ เช†เชฐเซเช•เชฟเชŸเซ‡เช•เซเชšเชฐเชจเซ€ เชšเชฐเซเชšเชพ เช•เชฐเชถเซ‡, เชœเซ‡ เช–เชพเชฎเซ€ เชธเชนเชฟเชทเซเชฃเซเชคเชพ เช…เชจเซ‡ เชฎเชพเชชเชจเซ€เชฏเชคเชพ เชชเซเชฐเชฆเชพเชจ เช•เชฐเซ‡ เช›เซ‡.

เช•เชจเซ‡เช•เซเชŸเชฐ เช—เซ‹เช เชตเชฃเซ€

เชธเซŒเชฅเซ€ เชฎเชนเชคเซเชตเชชเซ‚เชฐเซเชฃ เชฎเซ‚เชฒเซเชฏ - เชกเซ‡เชŸเชพ - เชฎเชพเช‚ เชซเซ‡เชฐเชซเชพเชฐเซ‹เชจเซ‡ เชŸเซเชฐเซ…เช• เช•เชฐเชตเชพเชจเซเช‚ เชถเชฐเซ‚ เช•เชฐเชตเชพ เชฎเชพเชŸเซ‡ เช…เชฎเชจเซ‡ เชœเชฐเซ‚เชฐ เช›เซ‡:

  1. เชกเซ‡เชŸเชพ เชธเซเชคเซเชฐเซ‹เชค, เชœเซ‡ เชตเชฐเซเชเชจ 5.7, PostgreSQL 9.6+, MongoDB 3.2+ เชฅเซ€ เชถเชฐเซ‚ เช•เชฐเซ€เชจเซ‡ MySQL เชนเซ‹เชˆ เชถเช•เซ‡ เช›เซ‡ (เชธเช‚เชชเซ‚เชฐเซเชฃ เชธเซ‚เชšเชฟ);
  2. เช…เชชเชพเชšเซ‡ เช•เชพเชซเช•เชพ เช•เซเชฒเชธเซเชŸเชฐ;
  3. เช•เชพเชซเช•เชพ เช•เชจเซ‡เช•เซเชŸ เช‰เชฆเชพเชนเชฐเชฃ (เชธเช‚เชธเซเช•เชฐเชฃ 1.x, 2.x);
  4. เชฐเซ‚เชชเชฐเซ‡เช–เชพเช‚เช•เชฟเชค เชกเซ‡เชฌเซ‡เชเชฟเชฏเชฎ เช•เชจเซ‡เช•เซเชŸเชฐ.

เชชเซเชฐเชฅเชฎ เชฌเซ‡ เชฎเซเชฆเซเชฆเชพเช“ เชชเชฐ เช•เชพเชฎ เช•เชฐเซ‹, เชเชŸเชฒเซ‡ เช•เซ‡. DBMS เช…เชจเซ‡ Apache Kafka เชจเซ€ เช‡เชจเซเชธเซเชŸเซ‹เชฒเซ‡เชถเชจ เชชเซเชฐเช•เซเชฐเชฟเชฏเชพ เชฒเซ‡เช–เชจเชพ เช…เชตเช•เชพเชถเชจเซ€ เชฌเชนเชพเชฐ เช›เซ‡. เชœเซ‹ เช•เซ‡, เชœเซ‡เช“ เชธเซ‡เชจเซเชกเชฌเซ‹เช•เซเชธเชฎเชพเช‚ เชฌเชงเซเช‚ เชœเชฎเชพเชตเชตเชพ เชฎเชพเช‚เช—เซ‡ เช›เซ‡, เชคเซ‡เชฎเชจเชพ เชฎเชพเชŸเซ‡ เช‰เชฆเชพเชนเชฐเชฃเซ‹ เชธเชพเชฅเซ‡เชจเชพ เชธเชคเซเชคเชพเชตเชพเชฐ เชญเช‚เชกเชพเชฐเชฎเชพเช‚ เชคเซˆเชฏเชพเชฐ เช›เซ‡. docker-compose.yaml.

เช…เชฎเซ‡ เช›เซ‡เชฒเซเชฒเชพ เชฌเซ‡ เชฎเซเชฆเซเชฆเชพเช“ เชชเชฐ เชตเชงเซ เชตเชฟเช—เชคเชตเชพเชฐ เชงเซเชฏเชพเชจ เช†เชชเซ€เชถเซเช‚.

0. เช•เชพเชซเช•เชพ เช•เชจเซ‡เช•เซเชŸ

เช…เชนเซ€เช‚ เช…เชจเซ‡ เช†เช—เชณ เชฒเซ‡เช–เชฎเชพเช‚, เชฌเชงเชพ เชฐเซ‚เชชเชฐเซ‡เช–เชพเช‚เช•เชจ เช‰เชฆเชพเชนเชฐเชฃเซ‹เชจเซ€ เชšเชฐเซเชšเชพ เชกเซ‡เชฌเซ‡เชเชฟเชฏเชฎ เชตเชฟเช•เชพเชธเช•เชฐเซเชคเชพเช“ เชฆเซเชตเชพเชฐเชพ เชตเชฟเชคเชฐเชฟเชค เชกเซ‹เช•เชฐ เช›เชฌเซ€เชจเชพ เชธเช‚เชฆเชฐเซเชญเชฎเชพเช‚ เช•เชฐเชตเชพเชฎเชพเช‚ เช†เชตเซ€ เช›เซ‡. เชคเซ‡ เชคเชฎเชพเชฎ เชœเชฐเซ‚เชฐเซ€ เชชเซเชฒเช—เชˆเชจ เชซเชพเชˆเชฒเซ‹ (เช•เชจเซ‡เช•เซเชŸเชฐ) เชงเชฐเชพเชตเซ‡ เช›เซ‡ เช…เชจเซ‡ เชชเชฐเซเชฏเชพเชตเชฐเชฃ เชตเซ‡เชฐเซ€เชเชฌเชฒเชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ€เชจเซ‡ เช•เชพเชซเช•เชพ เช•เชจเซ‡เช•เซเชŸเชจเซเช‚ เชฐเซ‚เชชเชฐเซ‡เช–เชพเช‚เช•เชจ เชชเซ‚เชฐเซเช‚ เชชเชพเชกเซ‡ เช›เซ‡.

เชœเซ‹ เชคเชฎเซ‡ เช•เชจเซเชซเซเชฒเซเช…เชจเซเชŸเชฎเชพเช‚เชฅเซ€ เช•เชพเชซเช•เชพ เช•เชจเซ‡เช•เซเชŸเชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเชตเชพเชจเซ‹ เช‡เชฐเชพเชฆเซ‹ เชงเชฐเชพเชตเซ‹ เช›เซ‹, เชคเซ‹ เชคเชฎเชพเชฐเซ‡ เช†เชฎเชพเช‚ เช‰เชฒเซเชฒเซ‡เช–เชฟเชค เชกเชฟเชฐเซ‡เช•เซเชŸเชฐเซ€เชฎเชพเช‚ เชœเชฐเซ‚เชฐเซ€ เช•เชจเซ‡เช•เซเชŸเชฐเซเชธเชจเชพ เชชเซเชฒเช—เชฟเชจเซเชธเชจเซ‡ เชธเซเชตเชคเช‚เชคเซเชฐ เชฐเซ€เชคเซ‡ เช‰เชฎเซ‡เชฐเชตเชพเชจเซ€ เชœเชฐเซ‚เชฐ เชชเชกเชถเซ‡. plugin.path เช…เชฅเชตเชพ เชชเชฐเซเชฏเชพเชตเชฐเชฃ เชตเซ‡เชฐเซ€เชเชฌเชฒ เชฆเซเชตเชพเชฐเชพ เชธเซ‡เชŸ เช•เชฐเซ‹ CLASSPATH. เช•เชพเชซเช•เชพ เช•เชจเซ‡เช•เซเชŸ เชตเชฐเซเช•เชฐ เช…เชจเซ‡ เช•เชจเซ‡เช•เซเชŸเชฐเซเชธ เชฎเชพเชŸเซ‡เชจเซ€ เชธเซ‡เชŸเชฟเช‚เช—เซเชธ เชฐเซ‚เชชเชฐเซ‡เช–เชพเช‚เช•เชจ เชซเชพเช‡เชฒเซ‹ เชฆเซเชตเชพเชฐเชพ เชจเช•เซเช•เซ€ เช•เชฐเชตเชพเชฎเชพเช‚ เช†เชตเซ‡ เช›เซ‡ เชœเซ‡ เช•เชพเชฐเซเชฏเช•เชฐ เชฒเซ‹เชจเซเชš เช†เชฆเซ‡เชถเชจเซ‡ เชฆเชฒเซ€เชฒเซ‹ เชคเชฐเซ€เช•เซ‡ เชชเชธเชพเชฐ เช•เชฐเชตเชพเชฎเชพเช‚ เช†เชตเซ‡ เช›เซ‡. เชตเชงเซ เชตเชฟเช—เชคเซ‹ เชฎเชพเชŸเซ‡, เชœเซเช“ เชฆเชธเซเชคเชพเชตเซ‡เชœเซ€เช•เชฐเชฃ.

เช•เชจเซ‡เช•เซเชŸเชฐ เชธเช‚เชธเซเช•เชฐเชฃเชฎเชพเช‚ เชกเซ‡เชฌเซ€เชเชฎ เชธเซ‡เชŸ เช•เชฐเชตเชพเชจเซ€ เชธเชฎเช—เซเชฐ เชชเซเชฐเช•เซเชฐเชฟเชฏเชพ เชฌเซ‡ เชคเชฌเช•เซเช•เชพเชฎเชพเช‚ เชนเชพเชฅ เชงเชฐเชตเชพเชฎเชพเช‚ เช†เชตเซ‡ เช›เซ‡. เชšเชพเชฒเซ‹ เชคเซ‡เชฎเชพเช‚เชจเชพ เชฆเชฐเซ‡เช•เชจเซ‡ เชœเซ‹เชˆเช:

1. เช•เชพเชซเช•เชพ เช•เชจเซ‡เช•เซเชŸ เชซเซเชฐเซ‡เชฎเชตเชฐเซเช• เชธเซ‡เชŸ เช•เชฐเซ€ เชฐเชนเซเชฏเซเช‚ เช›เซ‡

เช…เชชเชพเชšเซ‡ เช•เชพเชซเช•เชพ เช•เซเชฒเชธเซเชŸเชฐเชฎเชพเช‚ เชกเซ‡เชŸเชพ เชธเซเชŸเซเชฐเซ€เชฎ เช•เชฐเชตเชพ เชฎเชพเชŸเซ‡, เช•เชพเชซเช•เชพ เช•เชจเซ‡เช•เซเชŸ เชซเซเชฐเซ‡เชฎเชตเชฐเซเช•เชฎเชพเช‚ เชšเซ‹เช•เซเช•เชธ เชชเชฐเชฟเชฎเชพเชฃเซ‹ เชธเซ‡เชŸ เช•เชฐเชตเชพเชฎเชพเช‚ เช†เชตเซเชฏเชพ เช›เซ‡, เชœเซ‡เชฎ เช•เซ‡:

  • เช•เซเชฒเชธเซเชŸเชฐ เชธเชพเชฅเซ‡ เชœเซ‹เชกเชพเชตเชพ เชฎเชพเชŸเซ‡เชจเชพ เชชเชฐเชฟเชฎเชพเชฃเซ‹,
  • เชตเชฟเชทเชฏเซ‹เชจเชพ เชจเชพเชฎ เชœเซ‡เชฎเชพเช‚ เช•เชจเซ‡เช•เซเชŸเชฐเชจเซเช‚ เชฐเซ‚เชชเชฐเซ‡เช–เชพเช‚เช•เชจ เชธเซ€เชงเซเช‚ เชœ เชธเช‚เช—เซเชฐเชนเชฟเชค เชฅเชถเซ‡,
  • เชœเซ‚เชฅเชจเซเช‚ เชจเชพเชฎ เชœเซ‡เชฎเชพเช‚ เช•เชจเซ‡เช•เซเชŸเชฐ เชšเชพเชฒเซ€ เชฐเชนเซเชฏเซเช‚ เช›เซ‡ (เชœเซ‹ เชตเชฟเชคเชฐเชฟเชค เชฎเซ‹เชกเชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเชตเชพเชฎเชพเช‚ เช†เชตเซ‡ เชคเซ‹).

เชชเซเชฐเซ‹เชœเซ‡เช•เซเชŸเชจเซ€ เช…เชงเชฟเช•เซƒเชค เชกเซ‹เช•เชฐ เช‡เชฎเซ‡เชœ เชชเชฐเซเชฏเชพเชตเชฐเชฃ เชšเชฒเซ‹เชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ€เชจเซ‡ เช—เซ‹เช เชตเชฃเซ€เชจเซ‡ เชธเชฎเชฐเซเชฅเชจ เช†เชชเซ‡ เช›เซ‡ - เช† เชคเซ‡ เช›เซ‡ เชœเซ‡เชจเซ‹ เช†เชชเชฃเซ‡ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ€เชถเซเช‚. เชคเซ‡เชฅเซ€, เช›เชฌเซ€ เชกเชพเช‰เชจเชฒเซ‹เชก เช•เชฐเซ‹:

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

เชเชตเชฐเซ‹ เชตเชฟเชถเซ‡ เชจเซ‹เช‚เชง

เชกเชฟเชซเซ‰เชฒเซเชŸ เชฐเซ‚เชชเซ‡, เชกเซ‡เชฌเซ‡เชเชฟเชฏเชฎ JSON เชซเซ‹เชฐเซเชฎเซ‡เชŸเชฎเชพเช‚ เชกเซ‡เชŸเชพ เชฒเช–เซ‡ เช›เซ‡, เชœเซ‡ เชธเซ‡เชจเซเชกเชฌเซ‹เช•เซเชธ เช…เชจเซ‡ เช“เช›เซ€ เชฎเชพเชคเซเชฐเชพเชฎเชพเช‚ เชกเซ‡เชŸเชพ เชฎเชพเชŸเซ‡ เชธเซเชตเซ€เช•เชพเชฐเซเชฏ เช›เซ‡, เชชเชฐเช‚เชคเซ เช…เชคเซเชฏเช‚เชค เชฒเซ‹เชก เชฅเชฏเซ‡เชฒ เชกเซ‡เชŸเชพเชฌเซ‡เชเชฎเชพเช‚ เชธเชฎเชธเซเชฏเชพ เชฌเชจเซ€ เชถเช•เซ‡ เช›เซ‡. JSON เช•เชจเซเชตเชฐเซเชŸเชฐเชจเซ‹ เชตเชฟเช•เชฒเซเชช เช เช›เซ‡ เช•เซ‡ เชคเซ‡เชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ€เชจเซ‡ เชธเช‚เชฆเซ‡เชถเชพเช“เชจเซ‡ เชถเซเชฐเซ‡เชฃเซ€เชฌเชฆเซเชง เช•เชฐเชตเซเช‚ เชฏเซเชฐเซ‹ เชฌเชพเชˆเชจเชฐเซ€ เชซเซ‹เชฐเซเชฎเซ‡เชŸเชฎเชพเช‚, เชœเซ‡ เช…เชชเชพเชšเซ‡ เช•เชพเชซเซเช•เชพเชฎเชพเช‚ I/O เชธเชฌเชธเชฟเชธเซเชŸเชฎ เชชเชฐเชจเซ‹ เชญเชพเชฐ เช˜เชŸเชพเชกเซ‡ เช›เซ‡.

เชเชตเชฐเซ‹เชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเชตเชพ เชฎเชพเชŸเซ‡ เชคเชฎเชพเชฐเซ‡ เชเช• เช…เชฒเช— เชคเซˆเชจเชพเชค เช•เชฐเชตเชพเชจเซ€ เชœเชฐเซ‚เชฐ เช›เซ‡ เชธเซเช•เซ€เชฎเชพ-เชฐเชœเชฟเชธเซเชŸเซเชฐเซ€ (เช†เช•เซƒเชคเชฟเช“ เชธเช‚เช—เซเชฐเชนเชตเชพ เชฎเชพเชŸเซ‡). เช•เชจเซเชตเชฐเซเชŸเชฐ เชฎเชพเชŸเซ‡เชจเชพ เชšเชฒเซ‹ เช†เชจเชพ เชœเซ‡เชตเชพ เชฆเซ‡เช–เชพเชถเซ‡:

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

เชเชตเชฐเซ‹เชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเชตเชพ เช…เชจเซ‡ เชคเซ‡เชจเชพ เชฎเชพเชŸเซ‡ เชฐเชœเชฟเชธเซเชŸเซเชฐเซ€ เชธเซ‡เชŸ เช•เชฐเชตเชพ เชฎเชพเชŸเซ‡เชจเซ€ เชตเชฟเช—เชคเซ‹ เช† เชฒเซ‡เช–เชจเชพ เช…เชตเช•เชพเชถเชจเซ€ เชฌเชนเชพเชฐ เช›เซ‡ - เช†เช—เชณ, เชธเซเชชเชทเซเชŸเชคเชพ เชฎเชพเชŸเซ‡, เช…เชฎเซ‡ JSON เชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ€เชถเซเช‚.

2. เช•เชจเซ‡เช•เซเชŸเชฐเชจเซ‡ เชœ เชฐเซ‚เชชเชฐเซ‡เช–เชพเช‚เช•เชฟเชค เช•เชฐเซ€ เชฐเชนเซเชฏเซเช‚ เช›เซ‡

เชนเชตเซ‡ เชคเชฎเซ‡ เชธเซ€เชงเชพ เชœ เช•เชจเซ‡เช•เซเชŸเชฐเชจเซ€ เช—เซ‹เช เชตเชฃเซ€ เชชเชฐ เชœเชˆ เชถเช•เซ‹ เช›เซ‹, เชœเซ‡ เชธเซเชฐเซ‹เชคเชฎเชพเช‚เชฅเซ€ เชกเซ‡เชŸเชพ เชตเชพเช‚เชšเชถเซ‡.

เชšเชพเชฒเซ‹ เชฌเซ‡ DBMSs เชฎเชพเชŸเซ‡ เช•เชจเซ‡เช•เซเชŸเชฐเซเชธเชจเซเช‚ เช‰เชฆเชพเชนเชฐเชฃ เชœเซ‹เชˆเช: PostgreSQL เช…เชจเซ‡ MongoDB, เชœเซ‡เชฎเชพเช‚ เชฎเชจเซ‡ เช…เชจเซเชญเชต เช›เซ‡ เช…เชจเซ‡ เชœเซ‡เชฎเชพเช‚ เชคเชซเชพเชตเชคเซ‹ เช›เซ‡ (เชจเชพเชจเชพ เชนเซ‹เชตเชพ เช›เชคเชพเช‚, เชชเชฐเช‚เชคเซ เช•เซ‡เชŸเชฒเชพเช• เช•เชฟเชธเซเชธเชพเช“เชฎเชพเช‚ เชจเซ‹เช‚เชงเชชเชพเชคเซเชฐ!).

เชฐเซ‚เชชเชฐเซ‡เช–เชพเช‚เช•เชจ JSON เชจเซ‹เชŸเซ‡เชถเชจเชฎเชพเช‚ เชตเชฐเซเชฃเชตเซ‡เชฒ เช›เซ‡ เช…เชจเซ‡ 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 โ€” เช•เชจเซ‡เช•เซเชŸเชฐเชจเซเช‚ เชจเชพเชฎ เช•เซ‡ เชœเซ‡เชจเชพ เชฎเชพเชŸเซ‡ เชจเซ€เชšเซ‡ เชตเชฐเซเชฃเชตเซ‡เชฒ เชฐเซ‚เชชเชฐเซ‡เช–เชพเช‚เช•เชจเชจเซ‹ เช‰เชชเชฏเซ‹เช— เชฅเชพเชฏ เช›เซ‡; เชญเชตเชฟเชทเซเชฏเชฎเชพเช‚, เช† เชจเชพเชฎเชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชจเซ‡เช•เซเชŸเชฐ เชธเชพเชฅเซ‡ เช•เชพเชฎ เช•เชฐเชตเชพ เชฎเชพเชŸเซ‡ เชฅเชพเชฏ เช›เซ‡ (เชเชŸเชฒเซ‡ โ€‹โ€‹เช•เซ‡, เช•เชพเชซเช•เชพ เช•เชจเซ‡เช•เซเชŸ REST API เชฆเซเชตเชพเชฐเชพ เชธเซเชŸเซ‡เชŸเชธ เชœเซเช“/เชชเซเชจเชƒเชชเซเชฐเชพเชฐเช‚เชญ เช•เชฐเซ‹/เชฐเซ‚เชชเชฐเซ‡เช–เชพเช‚เช•เชจ เช…เชชเชกเซ‡เชŸ เช•เชฐเซ‹);
  • connector.class โ€” DBMS เช•เชจเซ‡เช•เซเชŸเชฐ เช•เซเชฒเชพเชธ เช•เซ‡ เชœเซ‡ เชฐเซ‚เชชเชฐเซ‡เช–เชพเช‚เช•เชฟเชค เช•เชจเซ‡เช•เซเชŸเชฐ เชฆเซเชตเชพเชฐเชพ เช‰เชชเชฏเซ‹เช—เชฎเชพเช‚ เชฒเซ‡เชตเชพเชถเซ‡;
  • plugin.name โ€” WAL เชซเชพเช‡เชฒเซ‹เชฎเชพเช‚เชฅเซ€ เชกเซ‡เชŸเชพเชจเชพ เชฒเซ‹เชœเชฟเช•เชฒ เชกเซ€เช•เซ‹เชกเชฟเช‚เช— เชฎเชพเชŸเซ‡ เชชเซเชฒเช—เช‡เชจเชจเซเช‚ เชจเชพเชฎ. เชชเชธเช‚เชฆ เช•เชฐเชตเชพ เชฎเชพเชŸเซ‡ เช‰เชชเชฒเชฌเซเชง เช›เซ‡ wal2json, decoderbuffs ะธ pgoutput. เชชเซเชฐเชฅเชฎ เชฌเซ‡เชจเซ‡ DBMS เชฎเชพเช‚ เชฏเซ‹เช—เซเชฏ เชเช•เซเชธเซเชŸเซ‡เช‚เชถเชจ เช‡เชจเซเชธเซเชŸเซ‹เชฒ เช•เชฐเชตเชพเชจเซ€ เชœเชฐเซ‚เชฐ เช›เซ‡, เช…เชจเซ‡ pgoutput PostgreSQL เชธเช‚เชธเซเช•เชฐเชฃ 10 เช…เชจเซ‡ เช‰เชšเซเชš เชฎเชพเชŸเซ‡ เชตเชงเชพเชฐเชพเชจเชพ เชฎเซ‡เชจเชฟเชชเซเชฏเซเชฒเซ‡เชถเชจเชจเซ€ เชœเชฐเซ‚เชฐ เชจเชฅเซ€;
  • database.* โ€” เชกเซ‡เชŸเชพเชฌเซ‡เช เชธเชพเชฅเซ‡ เชœเซ‹เชกเชพเชตเชพ เชฎเชพเชŸเซ‡เชจเชพ เชตเชฟเช•เชฒเซเชชเซ‹, เชœเซเชฏเชพเช‚ database.server.name โ€” เชชเซ‹เชธเซเชŸเช—เซเชฐเซ‡เชเชธเช•เซเชฏเซเชเชฒ เช‡เชจเซเชธเซเชŸเชจเซเชธ เชจเชพเชฎเชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชพเชซเช•เชพ เช•เซเชฒเชธเซเชŸเชฐเชฎเชพเช‚ เชตเชฟเชทเชฏเชจเซเช‚ เชจเชพเชฎ เชฌเชจเชพเชตเชตเชพ เชฎเชพเชŸเซ‡ เชฅเชพเชฏ เช›เซ‡;
  • 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 (เชฒเซ‹เช— เชธเชฟเช•เซเชตเชจเซเชธ เชจเช‚เชฌเชฐ) เชธเซ‡เชตเชพ เชตเชฟเชทเชฏเชฎเชพเช‚ เชฐเซ‡เช•เซ‹เชฐเซเชก เช•เชฐเชตเชพเชฎเชพเช‚ เช†เชตเซ‡ เช›เซ‡. offset. เชชเชฐเช‚เชคเซ เชœเซ‹ เช•เชจเซ‡เช•เซเชŸเชฐ เชธเชฎเช—เซเชฐ เชกเซ‡เชŸเชพเชฌเซ‡เชเชจเซ‡ เชจเชนเซ€เช‚, เชชเชฐเช‚เชคเซ เชคเซ‡เชจเชพ เช•เซ‹เชทเซเชŸเช•เซ‹เชจเซ‹ เชฎเชพเชคเซเชฐ เชเช• เชญเชพเช— เชตเชพเช‚เชšเชตเชพ เชฎเชพเชŸเซ‡ เช—เซ‹เช เชตเชพเชฏเซ‡เชฒ เชนเซ‹เชฏ เชคเซ‹ เชถเซเช‚ เชฅเชพเชฏ เช›เซ‡ (เชœเซ‡เชฎเชพเช‚ เชกเซ‡เชŸเชพ เช…เชชเชกเซ‡เชŸ เชตเชพเชฐเช‚เชตเชพเชฐ เชฅเชคเชพ เชจเชฅเซ€)?

  • เช•เชจเซ‡เช•เซเชŸเชฐ WAL เชซเชพเช‡เชฒเซ‹ เชตเชพเช‚เชšเชถเซ‡ เช…เชจเซ‡ เชคเซ‡ เชœเซ‡ เชŸเซ‡เชฌเชฒ เชชเชฐ เชฆเซ‡เช–เชฐเซ‡เช– เชฐเชพเช–เซ‡ เช›เซ‡ เชคเซ‡เชจเชพ เชชเชฐเชจเชพ เช•เซ‹เชˆเชชเชฃ เชตเซเชฏเชตเชนเชพเชฐเชจเซ‡ เชถเซ‹เชงเซ€ เชถเช•เชถเซ‡ เชจเชนเซ€เช‚.
  • เชคเซ‡เชฅเซ€, เชคเซ‡ เชตเชฟเชทเชฏ เช…เชฅเชตเชพ เชชเซเชฐเชคเชฟเช•เซƒเชคเชฟ เชธเซเชฒเซ‹เชŸเชฎเชพเช‚ เชคเซ‡เชจเซ€ เชตเชฐเซเชคเชฎเชพเชจ เชธเซเชฅเชฟเชคเชฟเชจเซ‡ เช…เชชเชกเซ‡เชŸ เช•เชฐเชถเซ‡ เชจเชนเซ€เช‚.
  • เช†เชจเชพ เชชเชฐเชฟเชฃเชพเชฎเซ‡, WAL เชซเชพเช‡เชฒเซ‹ เชกเชฟเชธเซเช• เชชเชฐ เชฐเชพเช–เชตเชพเชฎเชพเช‚ เช†เชตเชถเซ‡ เช…เชจเซ‡ เชธเช‚เชญเชตเชคเชƒ เชกเชฟเชธเซเช• เชœเช—เซเชฏเชพ เชธเชฎเชพเชชเซเชค เชฅเชˆ เชœเชถเซ‡.

เช…เชจเซ‡ เช† เชคเซ‡ เช›เซ‡ เชœเซเชฏเชพเช‚ เชตเชฟเช•เชฒเซเชชเซ‹ เชฌเชšเชพเชตเชฎเชพเช‚ เช†เชตเซ‡ เช›เซ‡. heartbeat.interval.ms ะธ heartbeat.action.query. เชœเซ‹เชกเซ€เชฎเชพเช‚ เช† เชตเชฟเช•เชฒเซเชชเซ‹เชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเชตเชพเชฅเซ€ เชฆเชฐเซ‡เช• เชตเช–เชคเซ‡ เชนเซƒเชฆเชฏเชจเชพ เชงเชฌเช•เชพเชฐเชพเชจเซ‹ เชธเช‚เชฆเซ‡เชถ เชฎเซ‹เช•เชฒเชตเชพเชฎเชพเช‚ เช†เชตเซ‡ เชคเซเชฏเชพเชฐเซ‡ เช…เชฒเช— เช•เซ‹เชทเซเชŸเช•เชฎเชพเช‚ เชกเซ‡เชŸเชพ เชฌเชฆเชฒเชตเชพเชจเซ€ เชตเชฟเชจเช‚เชคเซ€ เช•เชฐเชตเชพเชจเซเช‚ เชถเช•เซเชฏ เชฌเชจเซ‡ เช›เซ‡. เช†เชฎ, LSN เช•เซ‡ เชœเซ‡เชจเชพ เชชเชฐ เช•เชจเซ‡เช•เซเชŸเชฐ เชนเชพเชฒเชฎเชพเช‚ เชธเซเชฅเชฟเชค เช›เซ‡ (เชชเซเชฐเชคเชฟเช•เซƒเชคเชฟ เชธเซเชฒเซ‹เชŸเชฎเชพเช‚) เชธเชคเชค เช…เชชเชกเซ‡เชŸ เชฅเชพเชฏ เช›เซ‡. เช† DBMS เชจเซ‡ WAL เชซเชพเช‡เชฒเซ‹เชจเซ‡ เชฆเซ‚เชฐ เช•เชฐเชตเชพเชจเซ€ เชฎเช‚เชœเซ‚เชฐเซ€ เช†เชชเซ‡ เช›เซ‡ เชœเซ‡เชจเซ€ เชนเชตเซ‡ เชœเชฐเซ‚เชฐ เชจเชฅเซ€. เชคเชฎเซ‡ เชตเชฟเช•เชฒเซเชชเซ‹ เช•เซ‡เชตเซ€ เชฐเซ€เชคเซ‡ เช•เชพเชฐเซเชฏ เช•เชฐเซ‡ เช›เซ‡ เชคเซ‡ เชตเชฟเชถเซ‡ เชตเชงเซ เชœเชพเชฃเซ€ เชถเช•เซ‹ เช›เซ‹ เชฆเชธเซเชคเชพเชตเซ‡เชœเซ€เช•เชฐเชฃ.

เชจเชœเซ€เช•เชฅเซ€ เชงเซเชฏเชพเชจ เช†เชชเชตเชพ เชฏเซ‹เช—เซเชฏ เชฌเซ€เชœเซ‹ เชตเชฟเช•เชฒเซเชช เช›เซ‡ transforms. เชœเซ‹ เช•เซ‡ เชคเซ‡ เชธเช—เชตเชก เช…เชจเซ‡ เชธเซเช‚เชฆเชฐเชคเชพ เชตเชฟเชถเซ‡ เชตเชงเซ เช›เซ‡ ...

เชฎเซ‚เชณเชญเซ‚เชค เชฐเซ€เชคเซ‡, Debezium เชจเซ€เชšเซ‡เชจเซ€ เชจเชพเชฎเช•เชฐเชฃ เชจเซ€เชคเชฟเชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ€เชจเซ‡ เชตเชฟเชทเชฏเซ‹ เชฌเชจเชพเชตเซ‡ เช›เซ‡: serverName.schemaName.tableName. เช† เชนเช‚เชฎเซ‡เชถเชพ เช…เชจเซเช•เซ‚เชณ เชจ เชนเซ‹เชˆ เชถเช•เซ‡. เชตเชฟเช•เชฒเซเชชเซ‹ transforms เชคเชฎเซ‡ เช•เซ‹เชทเซเชŸเช•เซ‹เชจเซ€ เชธเซ‚เชšเชฟเชจเซ‡ เชตเซเชฏเชพเช–เซเชฏเชพเชฏเชฟเชค เช•เชฐเชตเชพ เชฎเชพเชŸเซ‡ เชจเชฟเชฏเชฎเชฟเชค เช…เชญเชฟเชตเซเชฏเช•เซเชคเชฟเช“เชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ€ เชถเช•เซ‹ เช›เซ‹, เช‡เชตเซ‡เชจเซเชŸ เช•เซ‡ เชœเซ‡เชฎเชพเช‚เชฅเซ€ เชšเซ‹เช•เซเช•เชธ เชจเชพเชฎ เชธเชพเชฅเซ‡ เชตเชฟเชทเชฏ เชชเชฐ เชฐเซ‚เชŸ เช•เชฐเชตเชพเชจเซ€ เชœเชฐเซ‚เชฐ เช›เซ‡.

เช…เชฎเชพเชฐเชพ เชฐเซ‚เชชเชฐเซ‡เช–เชพเช‚เช•เชจเชฎเชพเช‚ เช†เชญเชพเชฐ transforms เชจเซ€เชšเซ‡ เชฎเซเชœเชฌ เชฅเชพเชฏ เช›เซ‡: เชฎเซ‹เชจเชฟเชŸเชฐ เช•เชฐเซ‡เชฒ เชกเซ‡เชŸเชพเชฌเซ‡เชเชฎเชพเช‚เชฅเซ€ เชคเชฎเชพเชฎ เชธเซ€เชกเซ€เชธเซ€ เช‡เชตเซ‡เชจเซเชŸ เชจเชพเชฎ เชธเชพเชฅเซ‡เชจเชพ เชตเชฟเชทเชฏ เชชเชฐ เชœเชถเซ‡ data.cdc.dbname. เชจเชนเชฟเช‚เชคเชฐ (เช† เชธเซ‡เชŸเชฟเช‚เช—เซเชธ เชตเชฟเชจเชพ), Debezium เชฎเซ‚เชณเชญเซ‚เชค เชฐเซ€เชคเซ‡ เชฆเชฐเซ‡เช• เช•เซ‹เชทเซเชŸเช• เชฎเชพเชŸเซ‡ เชเช• เชตเชฟเชทเชฏ เชฌเชจเชพเชตเชถเซ‡ เชœเซ‡เชฎ เช•เซ‡: pg-dev.public.<table_name>.

เช•เชจเซ‡เช•เซเชŸเชฐ เชฎเชฐเซเชฏเชพเชฆเชพเช“

PostgreSQL เชฎเชพเชŸเซ‡ เช•เชจเซ‡เช•เซเชŸเชฐ เชฐเซ‚เชชเชฐเซ‡เช–เชพเช‚เช•เชจเชจเซเช‚ เชตเชฐเซเชฃเชจ เชชเซ‚เชฐเซเชฃ เช•เชฐเชตเชพ เชฎเชพเชŸเซ‡, เชคเซ‡เชจเชพ เช“เชชเชฐเซ‡เชถเชจเชจเซ€ เชจเซ€เชšเซ‡เชจเซ€ เชธเซเชตเชฟเชงเชพเช“/เชฎเชฐเซเชฏเชพเชฆเชพเช“ เชตเชฟเชถเซ‡ เชตเชพเชค เช•เชฐเชตเซ€ เชฏเซ‹เช—เซเชฏ เช›เซ‡:

  1. PostgreSQL เชฎเชพเชŸเซ‡ เช•เชจเซ‡เช•เซเชŸเชฐเชจเซ€ เช•เชพเชฐเซเชฏเช•เซเชทเชฎเชคเชพ เชฒเซ‹เชœเชฟเช•เชฒ เชกเซ€เช•เซ‹เชกเชฟเช‚เช—เชจเซ€ เชตเชฟเชญเชพเชตเชจเชพ เชชเชฐ เช†เชงเชพเชฐ เชฐเชพเช–เซ‡ เช›เซ‡. เชคเซ‡เชฅเซ€ เชคเซ‡เชฎเชฃเซ‡ เชกเซ‡เชŸเชพเชฌเซ‡เช เชฎเชพเชณเช–เซเช‚ เชฌเชฆเชฒเชตเชพเชจเซ€ เชตเชฟเชจเช‚เชคเซ€เช“เชจเซ‡ เชŸเซเชฐเซ…เช• เช•เชฐเชคเซเช‚ เชจเชฅเซ€ (DDL) - เชคเชฆเชจเซเชธเชพเชฐ, เช† เชกเซ‡เชŸเชพ เชตเชฟเชทเชฏเซ‹เชฎเชพเช‚ เชฐเชนเซ‡เชถเซ‡ เชจเชนเซ€เช‚.
  2. เชชเซเชฐเชคเชฟเช•เซƒเชคเชฟ เชธเซเชฒเซ‹เชŸเชจเซ‹ เช‰เชชเชฏเซ‹เช— เชฅเชคเซ‹ เชนเซ‹เชตเชพเชฅเซ€, เช•เชจเซ‡เช•เซเชŸเชฐเชจเซ‡ เช•เชจเซ‡เช•เซเชŸ เช•เชฐเชตเซเช‚ เชถเช•เซเชฏ เช›เซ‡ เชฎเชพเชคเซเชฐ เช…เช—เซเชฐเชฃเซ€ DBMS เช‰เชฆเชพเชนเชฐเชฃ เชฎเชพเชŸเซ‡.
  3. เชœเซ‹ เชตเชชเชฐเชพเชถเช•เชฐเซเชคเชพ เช•เซ‡ เชœเซ‡เชจเชพ เชนเซ‡เช เชณ เช•เชจเซ‡เช•เซเชŸเชฐ เชกเซ‡เชŸเชพเชฌเซ‡เช เชธเชพเชฅเซ‡ เชœเซ‹เชกเชพเชฏ เช›เซ‡ เชคเซ‡เชจเซ€ เชชเชพเชธเซ‡ เชซเช•เซเชค เชตเชพเช‚เชšเชตเชพเชจเชพ เช…เชงเชฟเช•เชพเชฐเซ‹ เช›เซ‡, เชคเซ‹ เชชเช›เซ€ เชชเซเชฐเชฅเชฎ เชฒเซ‹เชจเซเชš เชชเชนเซ‡เชฒเชพเช‚ เชคเชฎเชพเชฐเซ‡ เชฎเซ‡เชจเซเชฏเซเช…เชฒเซ€ เชชเซเชฐเชคเชฟเช•เซƒเชคเชฟ เชธเซเชฒเซ‹เชŸ เชฌเชจเชพเชตเชตเชพเชจเซ€ เช…เชจเซ‡ เชกเซ‡เชŸเชพเชฌเซ‡เช เชชเชฐ เชชเซเชฐเช•เชพเชถเชฟเชค เช•เชฐเชตเชพเชจเซ€ เชœเชฐเซ‚เชฐ เชชเชกเชถเซ‡.

เชฐเซ‚เชชเชฐเซ‡เช–เชพเช‚เช•เชจ เชฒเชพเช—เซ เช•เชฐเซ€ เชฐเชนเซเชฏเชพ เช›เซ€เช

เชคเซ‹, เชšเชพเชฒเซ‹ เช†เชชเชฃเซเช‚ เชฐเซ‚เชชเชฐเซ‡เช–เชพเช‚เช•เชจ เช•เชจเซ‡เช•เซเชŸเชฐเชฎเชพเช‚ เชฒเซ‹เชก เช•เชฐเซ€เช:

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 เชฒเชพเช‡เชจเชจเซ€ เชชเชพเช›เชฒเซ€ เชธเซเชฅเชฟเชคเชฟ เชชเซเชฐเชฆเชฐเซเชถเชฟเชค เชฅเชพเชฏ เช›เซ‡, เช…เชจเซ‡ เชฎเชพเช‚ payload.after - เชซเซ‡เชฐเชซเชพเชฐเซ‹เชจเชพ เชธเชพเชฐ เชธเชพเชฅเซ‡ เชจเชตเซเช‚.

2.2 เชฎเซ‹เช‚เช—เซ‹เชกเซ€เชฌเซ€

เช† เช•เชจเซ‡เช•เซเชŸเชฐ เชชเซเชฐเชฎเชพเชฃเชญเซ‚เชค 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>.

เชธเชนเชจเชถเซ€เชฒเชคเชพ เชฆเซ‹เชท

เช…เชฎเชพเชฐเชพ เชธเชฎเชฏเชฎเชพเช‚ เช–เชพเชฎเซ€ เชธเชนเชฟเชทเซเชฃเซเชคเชพ เช…เชจเซ‡ เช‰เชšเซเชš เช‰เชชเชฒเชฌเซเชงเชคเชพเชจเซ‹ เชฎเซเชฆเซเชฆเซ‹ เชชเชนเซ‡เชฒเชพ เช•เชฐเชคเชพเช‚ เชตเชงเซ เชคเซ€เชตเซเชฐ เช›เซ‡ - เช–เชพเชธ เช•เชฐเซ€เชจเซ‡ เชœเซเชฏเชพเชฐเซ‡ เช†เชชเชฃเซ‡ เชกเซ‡เชŸเชพ เช…เชจเซ‡ เชตเซเชฏเชตเชนเชพเชฐเซ‹ เชตเชฟเชถเซ‡ เชตเชพเชค เช•เชฐเซ€ เชฐเชนเซเชฏเชพ เช›เซ€เช, เช…เชจเซ‡ เชกเซ‡เชŸเชพเชจเชพ เชซเซ‡เชฐเชซเชพเชฐเซ‹เชจเซ‡ เชŸเซเชฐเซ…เช• เช•เชฐเชตเชพเชจเซเช‚ เช† เชฎเซเชฆเซเชฆเชพเชฎเชพเช‚ เชฌเชพเชœเซ เชชเชฐ เชฐเชนเซ‡เชคเซเช‚ เชจเชฅเซ€. เชšเชพเชฒเซ‹ เชœเซ‹เชˆเช เช•เซ‡ เชธเชฟเชฆเซเชงเชพเช‚เชคเชฎเชพเช‚ เชถเซเช‚ เช–เซ‹เชŸเซเช‚ เชฅเชˆ เชถเช•เซ‡ เช›เซ‡ เช…เชจเซ‡ เชฆเชฐเซ‡เช• เช•เชฟเชธเซเชธเชพเชฎเชพเช‚ เชกเซ‡เชฌเซ‡เชเชฟเชฏเชฎเชจเซเช‚ เชถเซเช‚ เชฅเชถเซ‡.

เชคเซเชฏเชพเช‚ เชคเซเชฐเชฃ เชจเชพเชชเชธเช‚เชฆ เชตเชฟเช•เชฒเซเชชเซ‹ เช›เซ‡:

  1. เช•เชพเชซเช•เชพ เช•เชจเซ‡เช•เซเชŸ เชจเชฟเชทเซเชซเชณเชคเชพ. เชœเซ‹ เช•เชจเซ‡เช•เซเชŸเชจเซ‡ เชตเชฟเชคเชฐเชฟเชค เชฎเซ‹เชกเชฎเชพเช‚ เช•เชพเชฎ เช•เชฐเชตเชพ เชฎเชพเชŸเซ‡ เช—เซ‹เช เชตเซ‡เชฒเซเช‚ เชนเซ‹เชฏ, เชคเซ‹ เช† เชฎเชพเชŸเซ‡ เชฌเชนเซเชตเชฟเชง เช•เชพเชฎเชฆเชพเชฐเซ‹เชจเซ‡ เชธเชฎเชพเชจ group.id เชธเซ‡เชŸ เช•เชฐเชตเชพเชจเซ€ เชœเชฐเซ‚เชฐ เช›เซ‡. เชชเช›เซ€, เชœเซ‹ เชคเซ‡เชฎเชพเช‚เชฅเซ€ เชเช• เชจเชฟเชทเซเชซเชณ เชœเชพเชฏ, เชคเซ‹ เช•เชจเซ‡เช•เซเชŸเชฐ เชฌเซ€เชœเชพ เช•เชพเชฐเซเชฏเช•เชฐ เชชเชฐ เชชเซเชจเชƒเชชเซเชฐเชพเชฐเช‚เชญ เชฅเชถเซ‡ เช…เชจเซ‡ เช•เชพเชซเช•เชพเชฎเชพเช‚ เชตเชฟเชทเชฏเชฎเชพเช‚ เช›เซ‡เชฒเซเชฒเซ€ เชชเซเชฐเชคเชฟเชฌเชฆเซเชง เชธเซเชฅเชฟเชคเชฟเชฎเชพเช‚เชฅเซ€ เชตเชพเช‚เชšเชตเชพเชจเซเช‚ เชšเชพเชฒเซ เชฐเชพเช–เชถเซ‡.
  2. เช•เชพเชซเช•เชพ เช•เซเชฒเชธเซเชŸเชฐ เชธเชพเชฅเซ‡ เชœเซ‹เชกเชพเชฃ เช—เซเชฎเชพเชตเชตเซเช‚. เช•เชจเซ‡เช•เซเชŸเชฐ เชซเช•เซเชค เชคเซ‡ เชธเซเชฅเชพเชจ เชชเชฐ เชตเชพเช‚เชšเชตเชพเชจเซเช‚ เชฌเช‚เชง เช•เชฐเชถเซ‡ เชœเซ‡ เช•เชพเชซเซเช•เชพเชจเซ‡ เชฎเซ‹เช•เชฒเชตเชพเชฎเชพเช‚ เชจเชฟเชทเซเชซเชณ เช—เชฏเซเช‚ เช›เซ‡, เช…เชจเซ‡ เชชเซเชฐเชฏเชพเชธ เชธเชซเชณ เชฅเชพเชฏ เชคเซเชฏเชพเช‚ เชธเซเชงเซ€ เชธเชฎเชฏเชพเช‚เชคเชฐเซ‡ เชคเซ‡เชจเซ‡ เชซเชฐเซ€เชฅเซ€ เชฎเซ‹เช•เชฒเชตเชพเชจเซ‹ เชชเซเชฐเชฏเชพเชธ เช•เชฐเชถเซ‡.
  3. เชกเซ‡เชŸเชพ เชธเซเชคเซเชฐเซ‹เชค เช…เชจเซเชชเชฒเชฌเซเชงเชคเชพ. เช•เชจเซ‡เช•เซเชŸเชฐ เชฐเซ‚เชชเชฐเซ‡เช–เชพเช‚เช•เชฟเชค เช•เชฐเซเชฏเชพ เชฎเซเชœเชฌ เชธเซเชฐเซ‹เชค เชธเชพเชฅเซ‡ เชซเชฐเซ€เชฅเซ€ เช•เชจเซ‡เช•เซเชŸ เช•เชฐเชตเชพเชจเซ‹ เชชเซเชฐเชฏเชพเชธ เช•เชฐเชถเซ‡. เชกเชฟเชซเซ‰เชฒเซเชŸ 16 เชชเซเชฐเชฏเชพเชธเซ‹ เช›เซ‡ เช˜เชพเชคเชพเช‚เช•เซ€เชฏ เชฌเซ‡เช•เช“เชซ. 16เชฎเชพ เช…เชธเชซเชณ เชชเซเชฐเชฏเชพเชธ เชชเช›เซ€, เช•เชพเชฐเซเชฏ เชคเชฐเซ€เช•เซ‡ เชšเชฟเชนเซเชจเชฟเชค เช•เชฐเชตเชพเชฎเชพเช‚ เช†เชตเชถเซ‡ เชจเชฟเชทเซเชซเชณ เช…เชจเซ‡ เชคเชฎเชพเชฐเซ‡ เชคเซ‡เชจเซ‡ เช•เชพเชซเช•เชพ เช•เชจเซ‡เช•เซเชŸ REST เช‡เชจเซเชŸเชฐเชซเซ‡เชธ เชฆเซเชตเชพเชฐเชพ เชฎเซ‡เชจเซเชฏเซเช…เชฒเซ€ เชชเซเชจเชƒเชชเซเชฐเชพเชฐเช‚เชญ เช•เชฐเชตเชพเชจเซ€ เชœเชฐเซ‚เชฐ เชชเชกเชถเซ‡.
    • เชจเชพ เช•เชฟเชธเซเชธเชพเชฎเชพเช‚ เชชเซ‹เชธเซเชŸเช—เซเชฐเซ‡ เชเชธเช•เซเชฏเซเชเชฒ เชกเซ‡เชŸเชพ เช–เซ‹เชตเชพเชˆ เชœเชถเซ‡ เชจเชนเซ€เช‚, เช•เชพเชฐเชฃ เช•เซ‡ เชชเซเชฐเชคเชฟเช•เซƒเชคเชฟ เชธเซเชฒเซ‹เชŸเซเชธเชจเซ‹ เช‰เชชเชฏเซ‹เช— เชคเชฎเชจเซ‡ เช•เชจเซ‡เช•เซเชŸเชฐ เชฆเซเชตเชพเชฐเชพ เชตเชพเช‚เชšเชตเชพเชฎเชพเช‚ เช†เชตเชคเซ€ เชจ เชนเซ‹เชฏ เชคเซ‡เชตเซ€ WAL เชซเชพเช‡เชฒเซ‹เชจเซ‡ เช•เชพเชขเซ€ เชจเชพเช–เชตเชพเชฅเซ€ เช…เชŸเช•เชพเชตเชถเซ‡. เช† เช•เชฟเชธเซเชธเชพเชฎเชพเช‚, เชธเชฟเช•เซเช•เชพเชจเซเช‚ เชจเซเช•เชธเชพเชจ เชชเชฃ เช›เซ‡: เชœเซ‹ เช•เชจเซ‡เช•เซเชŸเชฐ เช…เชจเซ‡ DBMS เชตเชšเซเชšเซ‡เชจเซ€ เชจเซ‡เชŸเชตเชฐเซเช• เช•เชจเซ‡เช•เซเชŸเชฟเชตเชฟเชŸเซ€ เชฒเชพเช‚เชฌเชพ เชธเชฎเชฏ เชธเซเชงเซ€ เชตเชฟเช•เซเชทเซ‡เชชเชฟเชค เชฅเชพเชฏ เช›เซ‡, เชคเซ‹ เชกเชฟเชธเซเช• เชธเซเชชเซ‡เชธ เชธเชฎเชพเชชเซเชค เชฅเชตเชพเชจเซ€ เชธเช‚เชญเชพเชตเชจเชพ เช›เซ‡, เช…เชจเซ‡ เช† เชจเชฟเชทเซเชซเชณเชคเชพ เชคเชฐเชซ เชฆเซ‹เชฐเซ€ เชถเช•เซ‡ เช›เซ‡. เชธเชฎเช—เซเชฐ DBMS.
    • เชจเชพ เช•เชฟเชธเซเชธเชพเชฎเชพเช‚ MySQL เช•เชจเซ‡เช•เซเชŸเชฟเชตเชฟเชŸเซ€ เชชเซเชจเชƒเชธเซเชฅเชพเชชเชฟเชค เชฅเชพเชฏ เชคเซ‡ เชชเชนเซ‡เชฒเชพเช‚ binlog เชซเชพเช‡เชฒเซ‹เชจเซ‡ DBMS เชฆเซเชตเชพเชฐเชพ เชœ เชซเซ‡เชฐเชตเซ€ เชถเช•เชพเชฏ เช›เซ‡. เช†เชจเชพเชฅเซ€ เช•เชจเซ‡เช•เซเชŸเชฐ เชจเชฟเชทเซเชซเชณ เชธเซเชฅเชฟเชคเชฟเชฎเชพเช‚ เชœเชถเซ‡, เช…เชจเซ‡ เชธเชพเชฎเชพเชจเซเชฏ เช•เชพเชฎเช—เซ€เชฐเซ€เชจเซ‡ เชชเซเชจเชƒเชธเซเชฅเชพเชชเชฟเชค เช•เชฐเชตเชพ เชฎเชพเชŸเซ‡, เชคเชฎเชพเชฐเซ‡ เชฌเชฟเชจเชฒเซ‹เช—เซเชธเชฎเชพเช‚เชฅเซ€ เชตเชพเช‚เชšเชตเชพเชจเซเช‚ เชšเชพเชฒเซ เชฐเชพเช–เชตเชพ เชฎเชพเชŸเซ‡ เชชเซเชฐเชพเชฐเช‚เชญเชฟเช• เชธเซเชจเซ‡เชชเชถเซ‹เชŸ เชฎเซ‹เชกเชฎเชพเช‚ เชชเซเชจเชƒเชชเซเชฐเชพเชฐเช‚เชญ เช•เชฐเชตเชพเชจเซ€ เชœเชฐเซ‚เชฐ เชชเชกเชถเซ‡.
    • เชชเชฐ MongoDB. เชฆเชธเซเชคเชพเชตเซ‡เชœเซ€เช•เชฐเชฃ เชœเชฃเชพเชตเซ‡ เช›เซ‡: เชฒเซ‹เช—/เช“เชชเชฒเซ‹เช— เชซเชพเช‡เชฒเซ‹ เช•เชพเชขเซ€ เชจเชพเช–เชตเชพเชฎเชพเช‚ เช†เชตเซ€ เชนเซ‹เชฏ เช…เชจเซ‡ เช•เชจเซ‡เช•เซเชŸเชฐ เชœเซเชฏเชพเช‚เชฅเซ€ เช›เซ‹เชกเซ€ เชฆเซ€เชงเซเช‚ เชนเซ‹เชฏ เชคเซเชฏเชพเช‚เชฅเซ€ เชตเชพเช‚เชšเชตเชพเชจเซเช‚ เชšเชพเชฒเซ เชฐเชพเช–เซ€ เชถเช•เชคเซเช‚ เชจเชฅเซ€ เชคเซ‡ เช˜เชŸเชจเชพเชฎเชพเช‚ เช•เชจเซ‡เช•เซเชŸเชฐเชจเซเช‚ เชตเชฐเซเชคเชจ เชคเชฎเชพเชฎ DBMS เชฎเชพเชŸเซ‡ เชธเชฎเชพเชจ เช›เซ‡. เชคเซ‡เชจเซ‹ เช…เชฐเซเชฅ เช เช›เซ‡ เช•เซ‡ เช•เชจเซ‡เช•เซเชŸเชฐ เชฐเชพเชœเซเชฏเชฎเชพเช‚ เชœเชถเซ‡ เชจเชฟเชทเซเชซเชณ เช…เชจเซ‡ เชฎเซ‹เชกเชฎเชพเช‚ เชชเซเชจเชƒเชชเซเชฐเชพเชฐเช‚เชญ เช•เชฐเชตเชพเชจเซ€ เชœเชฐเซ‚เชฐ เชชเชกเชถเซ‡ เชชเซเชฐเชพเชฐเช‚เชญเชฟเช• เชธเซเชจเซ‡เชชเชถเซ‹เชŸ.

      เชœเซ‹ เช•เซ‡, เชคเซเชฏเชพเช‚ เช…เชชเชตเชพเชฆเซ‹ เช›เซ‡. เชœเซ‹ เช•เชจเซ‡เช•เซเชŸเชฐ เชฒเชพเช‚เชฌเชพ เชธเชฎเชฏ เชธเซเชงเซ€ เชกเชฟเชธเซเช•เชจเซ‡เช•เซเชŸ เชฅเชฏเซ‡เชฒเซเช‚ เชนเชคเซเช‚ (เช…เชฅเชตเชพ MongoDB เชฆเชพเช–เชฒเชพ เชธเซเชงเซ€ เชชเชนเซ‹เช‚เชšเซ€ เชถเช•เซเชฏเซเช‚ เชจ เชนเชคเซเช‚), เช…เชจเซ‡ เช† เชธเชฎเชฏ เชฆเชฐเชฎเชฟเชฏเชพเชจ oplog เชชเชฐเชฟเชญเซเชฐเชฎเชฃเชฎเชพเช‚เชฅเซ€ เชชเชธเชพเชฐ เชฅเชฏเซเช‚ เชนเชคเซเช‚, เชคเซ‹ เชชเช›เซ€ เชœเซเชฏเชพเชฐเซ‡ เช•เชจเซ‡เช•เซเชถเชจ เชชเซเชจเชƒเชธเซเชฅเชพเชชเชฟเชค เช•เชฐเชตเชพเชฎเชพเช‚ เช†เชตเซ‡ เช›เซ‡, เชคเซเชฏเชพเชฐเซ‡ เช•เชจเซ‡เช•เซเชŸเชฐ เชถเชพเช‚เชคเชฟเชฅเซ€ เชชเซเชฐเชฅเชฎ เช‰เชชเชฒเชฌเซเชง เชธเซเชฅเชฟเชคเชฟเชฎเชพเช‚เชฅเซ€ เชกเซ‡เชŸเชพ เชตเชพเช‚เชšเชตเชพเชจเซเช‚ เชšเชพเชฒเซ เชฐเชพเช–เชถเซ‡, เชคเซ‡เชฅเซ€ เชœ เช•เชพเชซเช•เชพเชจเชพ เช•เซ‡เชŸเชฒเชพเช• เชกเซ‡เชŸเชพ เชจเชฅเซ€ เชซเชŸเช•เซ‹ เชชเชกเชถเซ‡.

เชจเชฟเชทเซเช•เชฐเซเชท

เชกเซ‡เชฌเซ‡เชเชฟเชฏเชฎ เช เชธเซ€เชกเซ€เชธเซ€ เชธเชฟเชธเซเชŸเชฎเซเชธ เชธเชพเชฅเซ‡เชจเซ‹ เชฎเชพเชฐเซ‹ เชชเซเชฐเชฅเชฎ เช…เชจเซเชญเชต เช›เซ‡ เช…เชจเซ‡ เชเช•เช‚เชฆเชฐเซ‡ เช–เซ‚เชฌ เชœ เชธเช•เชพเชฐเชพเชคเซเชฎเช• เช›เซ‡. เชฎเซเช–เซเชฏ DBMS, เชฐเซ‚เชชเชฐเซ‡เช–เชพเช‚เช•เชจเชจเซ€ เชธเชฐเชณเชคเชพ, เช•เซเชฒเชธเซเชŸเชฐเชฟเช‚เช— เชธเชชเซ‹เชฐเซเชŸ เช…เชจเซ‡ เชธเช•เซเชฐเชฟเชฏ เชธเชฎเซเชฆเชพเชฏ เชฎเชพเชŸเซ‡ เชคเซ‡เชจเชพ เชธเชฎเชฐเซเชฅเชจ เชธเชพเชฅเซ‡ เชชเซเชฐเซ‹เชœเซ‡เช•เซเชŸ เชœเซ€เชคเซเชฏเซ‹. เชชเซเชฐเซ‡เช•เซเชŸเชฟเชธเชฎเชพเช‚ เชฐเชธ เชงเชฐเชพเชตเชคเชพ เชฒเซ‹เช•เซ‹ เชฎเชพเชŸเซ‡, เชนเซเช‚ เชญเชฒเชพเชฎเชฃ เช•เชฐเซเช‚ เช›เซเช‚ เช•เซ‡ เชคเชฎเซ‡ เชฎเชพเชŸเซ‡ เชฎเชพเชฐเซเช—เชฆเชฐเซเชถเชฟเช•เชพเช“ เชตเชพเช‚เชšเซ‹ เช•เชพเชซเช•เชพ เช•เชจเซ‡เช•เซเชŸ ะธ เชกเซ‡เชฌเซ‡เชเชฟเชฏเชฎ.

เช•เชพเชซเช•เชพ เช•เชจเซ‡เช•เซเชŸ เชฎเชพเชŸเซ‡เชจเชพ JDBC เช•เชจเซ‡เช•เซเชŸเชฐเชจเซ€ เชคเซเชฒเชจเชพเชฎเชพเช‚, เชกเซ‡เชฌเซ‡เชเชฟเชฏเชฎเชจเซ‹ เชฎเซเช–เซเชฏ เชซเชพเชฏเชฆเซ‹ เช เช›เซ‡ เช•เซ‡ เชซเซ‡เชฐเชซเชพเชฐเซ‹เชจเซ‡ DBMS เชฒเซ‰เช—เซเชธเชฎเชพเช‚เชฅเซ€ เชตเชพเช‚เชšเชตเชพเชฎเชพเช‚ เช†เชตเซ‡ เช›เซ‡, เชœเซ‡ เชจเซเชฏเซ‚เชจเชคเชฎ เชฒเซ‡เชŸเชจเซเชธเซ€ เชธเชพเชฅเซ‡ เชกเซ‡เชŸเชพ เชชเซเชฐเชพเชชเซเชค เช•เชฐเชตเชพเชจเซ€ เชฎเช‚เชœเซ‚เชฐเซ€ เช†เชชเซ‡ เช›เซ‡. JDBC เช•เชจเซ‡เช•เซเชŸเชฐ (เช•เชพเชซเซเช•เชพ เช•เชจเซ‡เช•เซเชŸเชฎเชพเช‚เชฅเซ€) เชเช• เชจเชฟเชถเซเชšเชฟเชค เช…เช‚เชคเชฐเชพเชฒ เชชเชฐ เชฎเซ‹เชจเชฟเชŸเชฐ เช•เชฐเซ‡เชฒ เช•เซ‹เชทเซเชŸเช•เชจเซ€ เช•เซเชตเซ‡เชฐเซ€ เช•เชฐเซ‡ เช›เซ‡ เช…เชจเซ‡ (เชคเซ‡ เชœ เช•เชพเชฐเชฃเชธเชฐ) เชœเซเชฏเชพเชฐเซ‡ เชกเซ‡เชŸเชพ เช•เชพเชขเซ€ เชจเชพเช–เชตเชพเชฎเชพเช‚ เช†เชตเซ‡ เชคเซเชฏเชพเชฐเซ‡ เชธเช‚เชฆเซ‡เชถเชพ เชœเชจเชฐเซ‡เชŸ เช•เชฐเชคเซเช‚ เชจเชฅเซ€ (เชคเชฎเซ‡ เช…เชธเซเชคเชฟเชคเซเชตเชฎเชพเช‚ เชจ เชนเซ‹เชฏ เชคเซ‡เชตเชพ เชกเซ‡เชŸเชพเชจเซ‡ เช•เซ‡เชตเซ€ เชฐเซ€เชคเซ‡ เช•เซเชตเซ‡เชฐเซ€ เช•เชฐเซ€ เชถเช•เซ‹?).

เชธเชฎเชพเชจ เชธเชฎเชธเซเชฏเชพเช“ เชนเชฒ เช•เชฐเชตเชพ เชฎเชพเชŸเซ‡, เชคเชฎเซ‡ เชจเซ€เชšเซ‡เชจเชพ เช‰เช•เซ‡เชฒเซ‹ เชชเชฐ เชงเซเชฏเชพเชจ เช†เชชเซ€ เชถเช•เซ‹ เช›เซ‹ (เชกเซ‡เชฌเซ‡เชเชฟเชฏเชฎ เช‰เชชเชฐเชพเช‚เชค):

PS

เช…เชฎเชพเชฐเชพ เชฌเซเชฒเซ‹เช— เชชเชฐ เชชเชฃ เชตเชพเช‚เชšเซ‹:

เชธเซ‹เชฐเซเชธ: www.habr.com

เชเช• เชŸเชฟเชชเซเชชเชฃเซ€ เช‰เชฎเซ‡เชฐเซ‹