помещение
Потерпев долгое время, я не мог не взорваться и запостил точку кипения в Наггетс (опубликовал после выхода с работы):

Это"печальная история", точка кипения этого эмоционального всплеска как бы перекрыта, а остальные мелкие стоки(CanalЭто означает водный путь, трубопровод) был в сети в течение определенного периода времени, когда он находится вне ямы, волны спокойны, и как только он выходит из ямы, он заставляет людей чувствовать себя дерьмом. Несколько ключевых моментов:
- последний
RELEASEВерсияv1.1.4,опубликовано2019-9-2, он не обновлялся почти год. -
IssueЕсть много нерешенных или оставшихся без ответа вопросов, и многие из них старше. -
masterВетка часто коммитит ненормальный код, а сборка не дружественная, т.к.v1.1.4Есть и другие проблемы, я также думал об использованииmasterКод собирается вручную.После импорта проекта вы решаете отказаться.Кто пробовал знает,можете попробовать сравнить импорт и сборкуMyBatisисходный код.
Это только видимость, давайте поговорим о ямах, на которые наступили.
Разобрать проблему блокировки потока
Это в основном каждое использованиеCanalОбязательная яма разработчиков.$CANAL_HOME/conf/canal.propertiesВ конфигурационном файле есть закомментированная строка конфигурации:canal.instance.parser.parallelThreadSize = 16. Эта конфигурация используется для указания количества одновременных потоков экземпляра парсера.Если она закомментирована, поток парсера будет заблокирован, и в результате ничего не произойдет.

Комментарий можно удалить, рекомендуется использовать значение по умолчанию16.
Проблема ненормальной блокировки кэша структуры таблицы

ЭтоIssueБольшинство вопрошавших упомянули давно не решаемую проблему, а именно проблему хранения метаданных структуры таблицы (используется в конфигурационном пунктеtsdbТо есть слово базы данных временных рядов, именуемое в дальнейшемtsdbФункции).

Включено по умолчаниюtsdbфункция, то есть она пройдетh2База данных кэширует проанализированную структуру таблицы, но на практике, если восходящий поток меняет структуру таблицы,h2Кэш, соответствующий базе данных, не будет обновляться. В это время обычно возникает волшебное исключение синтаксического анализа. Аномальная информация обычно выглядит следующим образом:
Caused by: com.alibaba.otter.canal.parse.exception.CanalParseException: column size is not match for table:数据库名称.表名称,新表结构的字段数量 vs 缓存表结构的字段数量;
Исключение также имеет ужасное последствие: поток синтаксического анализа блокируется, т.е.binlogСобытия больше не принимаются и анализируются. Я также много смотрел на этот вопросIssue, который все считают серьезнымBUG, наиболее подходящим решением в настоящее время является: отключитьtsdbфункция (действительно достаточно грубая), т.е.canal.instance.tsdb.enableУстановить какfalse. Если не отключенtsdbфункция, как только эта проблема возникает, она должна быть"остановись первым"Canalобслуживание, то"Удалить"$CANAL_HOME/conf/目标数据库实例标识/h2.mv.dbфайл, затем"запускать"CanalСлужить.
Из-за этой относительно неявной проблемы автор отключил ее в продакшене.tsdbфункцию и добавилDDLЛогика обработки оператора напрямую попадает в оповещение DingTalk и@целая группа людей.

Мне становится страшно каждый раз, когда я вижу это предупреждение.
журнал проблемы
Если вам просто нужно найтиbinlogДля файлов с относительно поздним расположением количество файлов относительно велико, и журнал обнаружения будет лихорадочно распечатываться. Я пытался перезапустить раньше, и он печатался несколько раз.GBжурнал, более99%позиционируетbinlogдокументы иpositionстрока журнала. можно рассмотреть, изменив$CANAL_HOME/conf/logback.xml(Не рекомендуется, неясный исходный код может легко вызвать другие новые проблемы) Настройте или укажите$CANAL_HOME/conf/目标数据库实例标识/instance.propertiesСледующие свойства ручного поиска начальной точки синтаксического анализа:
canal.instance.master.journal.name=binlog的文件名
canal.instance.master.position=binlog的文件中的位点
canal.instance.master.timestamp=时间戳
canal.instance.master.gtid=gtid的值
❝Вышеуказанные свойства начальной точки ручного позиционирования и парсинга необходимо обновить или закомментировать перед очередным перезапуском Canal, иначе это вызовет серьезные последствия повторного парсинга или файл не будет найден! ! !
❞
"Во всяком случае, каждый перезапускCanalУслуги вызывают восторг, никакое программное обеспечение с открытым исходным кодом не может заставить людей чувствовать себя так". Поскольку произведенных серверных дисков не очень много, я купил только 100 дисков во время выбора.GB, а учитывая, что эти логи по сути ничего не значат, я могу только регулярно загружать и удалять логи. На начальном этапе я удалял их вручную. Позже мне стало хлопотно писать логи.ShellСкрипт периодически удаляет старые лог-файлы.
Проблемы использования облачной RDS MySQL
Если вам случится использовать Alibaba CloudRDS MySQL, то может быть яма побольше. Основные вопросы:
-
RDS MySQLСуществуют правила оптимизации дискового пространства, и когда правила срабатывают,binlogзагрузить файл вOSS, затем удалите локальныйbinlogдокумент. - от
CanalСогласно документу, он будет автоматически вытянутOSSВверхbinlogФайл парсится, так что пользователь его не воспринимает, но у этой функции естьBUG, не смог нормально функционировать. -
RDS MySQLЭто темный ящик, если есть проблема, его можно передать только черезMySQLсвязанные запросы, чтобы найти проблему, нет возможности войти на сервер, чтобы увидеть реальную сцену.

Ударьте эту проблему, общее исключение:
.................. sqlstate = HY000 errmsg = Could not find first log file name in binary log index file
В основном можно подтвердить, что эта функция неисправна, например, естьIssue-2596:

Мой текущий подход заключается в следующем:
- полностью устарел
CanalВытащитьOSSВверхbinlogфункция файла. -
RDS MySQLРасширьте диск как можно больше и скорректируйте стратегию, чтобы разрешить как можно большеbinlogФайлы хранятся локально как можно дольше, и они полностью анализируются, а затем загружаются вручную или автоматически после достижения правила истечения срока действия.В этот период есть много вещей, которые требуют дополнительных сборов, которые нужно взвесить сами по себе.
❝Текущая (05.08.2020) ветка master по-прежнему имеет ошибки в чтении и разборе binlog-файла в OSS. Партнерам, которые хотят вручную создать ветку master, рекомендуется отказаться от своих иллюзий.
❞
Серьезными последствиями этой проблемы являются:"Существует относительно высокая вероятность того, что определенныйbinlogПарсинг файлов полностью отсутствует", если нет возможностиbinlogфайл обратно вRDS MySQLВнутри, в противном случае вам нужно выполнить функцию ручной синхронизации восходящего и нисходящего потока.
to be continue
Кроме того, обратите внимание наCanalЛучше всего делать активное и резервное развертывание, рекомендуется использовать сайт отправки и управление кластером.Zookeeper, а сервисный режим (canal.serverMode, который в настоящее время поддерживаетtcp,kafkaиrocketmq) рекомендуется использоватьKafka(masterна веткеRabbitMQподдержка коннектора, если вы хотите попробовать его, вы можете создать его вручную), а требования к ресурсам каждого узла относительно высоки.2C8GНизкая частотаECS, я чувствую себя немного подавленным, особенно при перезапуске экземпляра, если вам нужно переместитьbinlogсайт,CPUСкорость использования будет стремительно расти в течение определенного периода времени.
Автор обнаружил, что Alibaba CloudDTSпросто используйтеCanalВ качестве базового промежуточного программного обеспечения для синхронизации данных это означает, что оно было запущено в производство в практических сценариях приложений, и я действительно не хочу, чтобы оно в конечном итоге превратилось в устаревшее.KPIпункт задачи. Я не знаю, сколько проблем возникнет в будущем, если они возникнут, я продолжу обновлять это руководство по предотвращению ям.
(Конец этой статьи c-2-d e-a-20200805)