Не удается прочитать данные с помощью Apache Kafka и Debezium из федеративных таблиц MySQL - PullRequest
0 голосов
/ 02 июля 2019

Я использую Apache Kafka и службу коннекторов Debezium, чтобы увидеть изменения данных в моих таблицах. Также я использую AWS EC2, где у меня есть база данных с федеративными таблицами. Если я создал не федеративную таблицу и запустил средство отслеживания Docker с помощью Zookeeper, Kafka и Kafka Connect, я могу читать данные из этой таблицы, но когда я вижу федеративную таблицу, не могу читать данные.

Я попытался добавить запрос в конфигурацию моего коннектора, но это не сработало.

Мои команды:

Запустите Zookeeper

$ docker run -it --rm --name zookeeper -p 2181:2181 -p 2888:2888 -p 3888:3888 debezium/zookeeper:0.9

Старт Кафки

$ docker run -it --rm --name kafka -p 9092:9092 --link zookeeper:zookeeper debezium/kafka:0.9

Запустить Kafka Connect

$ docker run -it --rm --name connect -p 8083:8083 -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 --link zookeeper:zookeeper --link kafka:kafka debezium/connect:0.9

Зарегистрировать соединитель

$ curl -i -X POST -H "Accept:application/json" -H "Content-Type:application/json" localhost:8083/connectors/ -d '{ "name": "inventory-connector", "config": { "connector.class": "io.debezium.connector.mysql.MySqlConnector", "tasks.max": "1", "database.hostname": "mysql", "database.port": "3306", "database.user": "debezium", "database.password": "dbz", "database.server.id": "184054", "database.server.name": "dbserver1", "database.whitelist": "inventory", "database.history.kafka.bootstrap.servers": "kafka:9092", "database.history.kafka.topic": "dbhistory.inventory" } }'

Показать изменения данных

$ docker run -it --name watcher --rm --link zookeeper:zookeeper --link kafka:kafka debezium/kafka:0.9 watch-topic -a -k dbserver1.inventory.customers

Я ожидаю увидеть что-то подобное:

null    {"schema":{"type":"struct","fields":[{"type":"struct","fields":[{"type":"int32","optional":true,"field":"a1"},{"type":"string","optional":true,"field":"a2"}],"optional":true,"name":"dbserver1.cobranza.foobar_1.Value","field":"before"},{"type":"struct","fields":[{"type":"int32","optional":true,"field":"a1"},{"type":"string","optional":true,"field":"a2"}],"optional":true,"name":"dbserver1.cobranza.foobar_1.Value","field":"after"},{"type":"struct","fields":[{"type":"string","optional":true,"field":"version"},{"type":"string","optional":true,"field":"connector"},{"type":"string","optional":false,"field":"name"},{"type":"int64","optional":false,"field":"server_id"},{"type":"int64","optional":false,"field":"ts_sec"},
...

1 Ответ

0 голосов
/ 04 июля 2019

глядя на описание механизма FEDERATED https://dev.mysql.com/doc/refman/8.0/en/federated-storage-engine.html мне кажется, что изменения, внесенные в объединенную таблицу, не записываются в файл binlog сервера. Если это так, то Debezium не может передавать изменения, так как он их не видит.

Должна быть возможность потоковой передачи изменений из исходной таблицы.

...