#maven #quarkus #mysql-connector #debezium
Вопрос:
Сбой соединителя mysql Debezium на заключительном этапе привязки. Проект находится на maven/quarkus , и я хочу использовать debezium/infinispan для аннулирования кэша .
Наблюдатель и конфигурация выглядят следующим образом :
публичная пустота startEmbeddedEngine(@Наблюдает @Инициализируется(ApplicationScoped.class) Инициализация объекта) вызывает исключение IOException { Файл dbHistoryTempFile = Файл.createTempFile(«смещения», «.dat»); Файл offsetStorageTempFile = Файл.createTempFile(«История базы данных», «.dat»);
final Properties props = new Properties(); props.setProperty("name", "cache-invalidation-engine"); props.setProperty("connector.class", "io.debezium.connector.mysql.MySqlConnector"); props.setProperty("offset.storage.file.filename", offsetStorageTempFile.getAbsolutePath()); props.setProperty("offset.flush.interval.ms", "0"); props.setProperty("database.hostname", "localhost"); props.setProperty("database.port", "3306"); props.setProperty("database.user", "root"); props.setProperty("database.password", "password"); props.setProperty("database.server.id", "1"); props.setProperty("database.server.name", "new_feature"); props.setProperty("database.history", "io.debezium.relational.history.FileDatabaseHistory"); props.setProperty("database.history.file.filename", dbHistoryTempFile.getAbsolutePath()); props.setProperty("database.include.list", "database"); // props.setProperty("database.history.file.filename","C:/Users/a.pogonet/AppData/Local/Temp/db.dat"); props.setProperty("snapshot.mode", "never"); // props.setProperty("include.unknown.datatypes", "true"); // props.setProperty("include.schema.changes", "false"); DebeziumEnginelt;ChangeEventlt;String, Stringgt;gt; engine = DebeziumEngine.create(Json.class) .using(props) .notifying(record -gt; { System.out.println(record); }).build(); executorService = Executors.newSingleThreadExecutor(); executorService.execute(engine); }
2021-12-09 14:18:34,137 ИНФОРМАЦИЯ [io.deb.con.mys.MySqlStreamingChangeEventSource] (blc-localhost:3306) Прекратил чтение двоичного журнала после 0 событий, новое смещение не было записано Исключение в потоке «blc-локальный хост:3306» java.lang.Ошибка noSuchMethod: com.mysql.cj.Сопоставление символов.getStaticCollationNameForCollationIndex(Ljava/lang/Целое число;)Лява/ланг/Строка; в io.debezium.connector.mysql.antlr.MySqlAntlrDdlParser.extractCharset(MySqlAntlrDdlParser.java:404) в io.debezium.connector.mysql.antlr.прослушиватель.CreateAndAlterDatabaseParserListener.enterCreateDatabaseOption(CreateAndAlterDatabaseParserListener.java:49) в io.debezium.ddl.парсер.mysql.сгенерирован.MySqlParser$CreateDatabaseOptionContext.enterRule(MySqlParser.java:5912) на ио.дебезиум.антлр.ProxyParseTreeListenerUtil.delegateEnterRule(ProxyParseTreeListenerUtil.java:46) в io.debezium.connector.mysql.antlr.прослушиватель.MySqlAntlrDdlParserListener.enterEveryRule(MySqlAntlrDdlParserListener.java:89) в org.antlr.v4.время выполнения.дерево.ParseTreeWalker.enterRule(ParseTreeWalker.java:41) в org.antlr.v4.время выполнения.дерево.Парсет-ходок.прогулка(ParseTreeWalker.java:25) в org.antlr.v4.время выполнения.дерево.Парсет-ходок.прогулка(ParseTreeWalker.java:28) в org.antlr.v4.время выполнения.дерево.Парсет-ходок.прогулка(ParseTreeWalker.java:28) по org.antlr.v4.runtime.tree.Парсет-ходок.прогулка(ParseTreeWalker.java:28) по org.antlr.v4.runtime.tree.Парсет-ходок.прогулка(ParseTreeWalker.java:28) по org.antlr.v4.runtime.tree.Парсет-ходок.прогулка(ParseTreeWalker.java:28) на ио.дебезиум.антлр.AntlrDdlParser.parse(AntlrDdlParser.java:87) в io.debezium.connector.mysql.MySqlDatabaseSchema.parseDdl(MySqlDatabaseSchema.java:216) в io.debezium.connector.mysql.MySqlDatabaseSchema.parseStreamingDdl(MySqlDatabaseSchema.java:202) в io.debezium.connector.mysql.MySqlStreamingChangeEventSource.handleQueryEvent(MySqlStreamingChangeEventSource.java:573) в io.debezium.connector.mysql.MySqlStreamingChangeEventSource.лямбда$выполнить$14(MySqlStreamingChangeEventSource.java:827) в io.debezium.connector.mysql.MySqlStreamingChangeEventSource.handleEvent(MySqlStreamingChangeEventSource.java:349) в io.debezium.connector.mysql.MySqlStreamingChangeEventSource.лямбда$выполнить$25(MySqlStreamingChangeEventSource.java:855) на com.github.shyiko.mysql.binlog.BinaryLogClient.notifyEventListeners(BinaryLogClient.java:1125) на com.github.shyiko.mysql.binlog.BinaryLogClient.listenforeventпакеты(BinaryLogClient.java:973) на com.github.shyiko.mysql.binlog.BinaryLogClient.connect(BinaryLogClient.java:599) на com.github.shyiko.mysql.binlog.BinaryLogClient$7.запуск(BinaryLogClient.java:857) на java.base/java.lang.Thread.run(поток.java:834)
Ответ №1:
Спецификация Quarkus применяет версию драйвера MySQL, а AFAICS Debezium использует методы, которые больше недоступны в этой версии драйвера.
Я рекомендую вам использовать версию драйвера, используемого соединителем Debezium, путем переопределения версии вручную в вашем проекте.
Я не могу точно сказать вам, какую версию использовать, учитывая, что я понятия не имею, какую версию Debezium вы используете. Но версия существует для Debezium 1.8: https://github.com/debezium/debezium/blob/1.8/pom.xml#L120 .
Тем не менее, Quarkus 2.5.1.Final также использует MySQL Connector 8.0.27, поэтому, если вы используете эти версии, я считаю, что это должно работать.
Комментарии:
1. Спасибо за ваш ответ ! Я также предположил, что проблема заключается в несовместимости версий. Я использую quarkus 1.10.5.Final и mysql 8.0.25. Для debezium я взял последнюю стабильную версию 1.7.1.Final . Не могли бы вы предоставить, пожалуйста, некоторые обновления/понижения версий для достижения полной совместимости ?
2. Выполнено. Я устраняю ошибку, изменив версию debezium на 1.2.5 . Просто не знаю, почему 1.7.1 не сработал . Может быть, вы могли бы коротко объяснить!