Comments 9
Полезно, спасибо.
а как это ты подключился к
а как это ты подключился к подключился к кафка через kafka коннект систему, но при этом у тебя в docker compose не установлен сервис kafka connect? "cp-server-connect" ?
В туториале (https://debezium.io/documentation/reference/tutorial.html) нашел такое:Debezium is built on top of Apache Kafka and provides Kafka Connect compatible connectors that monitor specific database management systems. Debezium records the history of data changes in Kafka logs, from where your application consumes them.Т.е. Дебизиум использует под капотом kafka-connect.
И так мы конфижим kafka-connect что бы он подключался к kafka брокеру.
environment:
BOOTSTRAP_SERVERS: broker:9092
GROUP_ID: connect-debezium
CONFIG_STORAGE_TOPIC: docker-connect-debezium-configs
OFFSET_STORAGE_TOPIC: docker-connect-debezium-offsets
STATUS_STORAGE_TOPIC: docker-connect-debezium-status
KEY_CONVERTER: org.apache.kafka.connect.storage.StringConverter
VALUE_CONVERTER: org.apache.kafka.connect.json.JsonConverter
А что это за бин-лог в MySql DB?
По сути это лог-файлы в сервере MySql, где записываются ивенты (изменение схемы, добавлени/изменение/удаление данных и т.д.) Это логгирование можно "включить" в настойках сервера (по дефолту оно выключенно).
Более детально об этом можно почитать здесь - https://dev.mysql.com/doc/refman/8.0/en/binary-log.html
Спасибо за статью, очень полезная. Года 2 назад уже рассматривал debezium, с СУБД mysql все работало хорошо по мануалам, но с postgresql не получилось никак реализовать CDC. Поэтому писал реализацию CDC уже сам под каждый конкретный сервис - у сервиса (master data) пишется продюсер для кафки, а у зависимых (slave) сервисов уже консьюмеры.
Но благодаря Вашей статье решил попробовать debezium снова, тем более за два года могло многое измениться)
Недавно наткнулся еще и на embedded реализацию debezium и начал изучать этот вариант. Если интересно начало проекта тут - https://github.com/innopolis-university-java-team/change-data-capture-instances.
Интересно, тоже удалось тоже подключиться к логу Postgres, или просто в сервис, который работал с Postgres добавили кафка продьюсера ?
Embedded Debezium пробовал, работает со Spring Boot довольно неплохо. Но в реализацию его не взяли потому что, у нас было 3 микросервиса которые читали из 3х БД (и складывали в одну БД), и так бы получилось, что нужно аж 3 embedded debezium разворачивать. А если делать stand along server, то в одном debezium сервере можно сразу законфижить 3 разных коннектора, и все рабоатет. Плюс модный Spring Cloud Stream ....
(хочу о нем еще написать).
Все куда проще - именно продюсера на spring-cloud-stream который вызывался непосредственно после успешной манипуляции с сущностью; написал ДТО по образу того, что есть в debezium (поля T before, T after + метод, который по соотношению значений полей определяет тип события - delete, update и create). Что хорошего в такой реализации - можно по необходимости Google Protobuff применить.
Получается при возникновении события в сервисе (например создании сущности) создается инстанс ДТО, с before = null, after = объект; ДТО поститься в кафку; ну а далее уже консьюмеры отрабатывают. На тот момент это было быстрее, чем разбираться с debezium до конца.
Звучит как рабочий подход. Тем более скорее всего 2 года назад Debezium был еще "сырым".
Слушал выступление его создателя Gunar Morlin, он говорил что главный use case прежде всего если есть БД с клиентом написаном на легаси (диком легаси, куда и лезть не хочется), - тогда CDC точно для этого.
Ну если такого нет, то наверное можно написать самому, или все-таки прикрутить и наконфижить Debezium (что оказалось тоже не сложно).
С Protobuf не работал, не могу ничего сказать.
Как справиться с Debezium + MySql + Spring Could Streams, Part 1