Debezium MySQL Connector — com.mysql.cj.Сопоставление символов.getStaticCollationNameForCollationIndex(Ljava/lang/Целое число;)Лява/ланг/Строка

#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 не сработал . Может быть, вы могли бы коротко объяснить!