Перейти к содержимому
Последнее обновление

Обзор непрерывной загрузки

Экспериментальная функция

Непрерывная загрузка Doris является экспериментальной функцией и поддерживается начиная с Doris 4.1.5.

Doris поддерживает непрерывную загрузку данных из нескольких источников в таблицы Doris с помощью Streaming Job. После отправки Job Doris продолжает выполнять задание загрузки, считывая данные из источника в реальном времени и записывая их в таблицу Doris.

Этот документ поможет ответить на следующие вопросы:

  • Какие источники данных и режимы синхронизации поддерживает непрерывная загрузка?
  • Как выбрать между SQL Mapping Sync и Auto Table Creation Sync?
  • Как изменяются состояния задания и как работает автоматическое восстановление?
  • Как в повседневной работе просматривать, приостанавливать, возобновлять и удалять задания загрузки?
  • Каковы распространённые параметры конфигурации FE и Job?

Поддерживаемые источники данных и режимы синхронизации​

Непрерывная загрузка поддерживает следующие источники данных и режимы синхронизации. Уведомления S3 и однократная загрузка поддерживаются начиная с Doris 4.1.6:

Источник данныхПоддерживаемые версииSQL Mapping SyncAuto Table Creation SyncРуководство по настройке
MySQL5.6, 5.7, 8.0.xMySQL CDC с SQL MappingMySQL CDC с Auto Table CreationAmazon RDS MySQL · Amazon Aurora MySQL
PostgreSQL14, 15, 16, 17PostgreSQL CDC с SQL MappingPostgreSQL CDC с Auto Table CreationAmazon RDS PostgreSQL · Amazon Aurora PostgreSQL
OceanBaseрежим совместимости с MySQL-OceanBase CDC с Auto Table Creation-
S3-Непрерывная загрузка S3--

Сведения о сопоставлении типов столбцов источника с типами Doris см. в разделах о сопоставлении типов данных для MySQL, PostgreSQL и OceanBase.

Как выбрать метод синхронизации​

SQL Mapping Sync и Auto Table Creation Sync — это два метода непрерывной загрузки с полностью разными базовыми механизмами, а не различие в «числе таблиц». Auto Table Creation Sync также поддерживает синхронизацию только одной таблицы через include_tables, поэтому выбор следует делать с учётом требуемых возможностей.

Сравнение возможностей​

ВозможностьSQL Mapping SyncAuto Table Creation Sync
Базовый механизмJob + TVF (INSERT INTO tbl SELECT * FROM tvf())Job + собственный DDL для всей базы данных (FROM src TO DATABASE db)
Уровень целевого объектаСуществующая таблица DorisКонтейнер базы данных Doris
Объём синхронизацииОдна таблицаОт одной до нескольких таблиц и всей базы данных (управляется через include_tables)
Автоматическое создание таблицТаблицы нужно создать заранееТаблицы с первичным ключом создаются автоматически при первой синхронизации
Гибкость SQLПоддерживает сопоставление столбцов, фильтрацию и преобразование (предложение SELECT)Копирует как есть, ETL не поддерживается
Семантическая гарантияexactly-onceat-least-once
Необходимые привилегииLoadLoad + Create (при автоматическом создании таблиц)
Типичные сценарииСинхронизация в реальном времени, требующая удаления столбцов, переименования полей, преобразования типов или условной фильтрацииЗеркальная репликация всей базы данных или группы таблиц, при которой схемы таблиц назначения должны автоматически следовать схемам источника

Рекомендации по выбору​

  • Если нужно обработать данные с помощью SQL или предъявляются строгие требования к семантике exactly-once → выберите SQL Mapping Sync
  • Если нужно, чтобы Doris автоматически создавал таблицы и синхронизировал группу таблиц одной настройкой → выберите Auto Table Creation Sync
  • Если источником данных является OceanBase → в настоящее время поддерживается только Auto Table Creation Sync в режиме совместимости с MySQL
  • Если источником данных является объектное хранилище S3 → поддерживается только SQL Mapping Sync (с использованием S3 TVF)

Переходы между состояниями задания​

Во время выполнения Streaming Job переходит между следующими состояниями. SQL Mapping Sync и Auto Table Creation Sync используют одну и ту же машину состояний:

job-state-flow

Описание состояний​

СостояниеЗначение
PENDINGЗадание создано, но для него ещё не запланированы подзадачи; оно ожидает следующего цикла планирования для создания StreamingTask.
RUNNINGПодзадача создана и выполняется: она считывает инкрементальные данные из источника и записывает их в Doris.
FINISHEDИсточник полностью обработан, и задание завершено. Задание S3 TVF переходит в это состояние после загрузки всех файлов.
PAUSEDПодзадача завершилась с ошибкой, задание автоматически приостановлено, а failReason сохранён. Причину можно проверить в поле ErrorMsg результата select * from jobs(...).

Автоматическое восстановление (autoResume)​

После перехода задания в состояние PAUSED планировщик периодически пытается восстановить его с помощью стратегии экспоненциальной задержки. При восстановлении задание возвращается в состояние PENDING и продолжает создавать подзадачи. Ручное вмешательство не требуется: временные сбои (нестабильность сети, кратковременная недоступность источника и т. п.) устраняются автоматически.

Используйте соответствующую команду для каждого сценария:

  • Немедленно возобновить или вручную запустить после устранения неполадок: используйте RESUME JOB
  • Полностью остановить и прекратить планирование: используйте PAUSE JOB (задание, приостановленное вручную, не активируется autoResume) или DROP JOB

Идентификация задач CDC и обработка сбоев​

Начиная с 4.1.5 Streaming CDC использует идентификатор Doris создателя задания для записи данных, запросов метаданных таблиц и изменений схемы вместо фиксированного идентификатора администратора. Создателю нужны привилегии LOAD для целевых таблиц, CREATE для автоматического создания таблиц, а также соответствующие привилегии ALTER и просмотра таблиц для синхронизации схемы. Отзыв привилегий во время выполнения также влияет на последующие задачи. Проверьте выдачу прав для создателя, указанного в задании.

Неудачные задачи Streaming INSERT на основе cdc_stream() не переходят в обычный процесс повторных попыток. Проверьте ошибки в jobs() и tasks(), устраните проблемы с источником или привилегиями и возобновите выполнение в соответствии с состоянием задания. Не следует предполагать, что неудачная задача будет автоматически воспроизведена.

Распространённые операции​

Просмотр состояния загрузки​

Запросите все задания Insert типа Streaming:

select * from jobs("type"="insert") where ExecuteType = "STREAMING";

Столбцы результата:

СтолбецОписание
IDИдентификатор задания
NAMEИмя задания
DefinerОпределитель задания
ExecuteTypeТип планирования задания: ONE_TIME/RECURRING/STREAMING/MANUAL
RecurringStrategyСтратегия повторения. Используется обычным Insert; при ExecuteType=Streaming пусто
StatusСостояние задания
ExecuteSqlОператор Insert SQL задания
CreateTimeВремя создания задания
SucceedTaskCountЧисло успешных задач
FailedTaskCountЧисло неудачных задач
CanceledTaskCountЧисло отменённых задач
CommentКомментарий задания
PropertiesСвойства задания
CurrentOffsetСмещение, до которого задание завершило обработку. Задаётся только при ExecuteType=Streaming
EndOffsetМаксимальное EndOffset, полученное из источника данных. Задаётся только при ExecuteType=Streaming
LoadStatisticСтатистика задания
ErrorMsgСообщение об ошибке задания
JobRuntimeMsgПодсказки задания во время выполнения
LagBytesЧисло байтов отставания в журнале источника (binlog MySQL / OceanBase или WAL PostgreSQL). Значение -1 означает, что оно сейчас недоступно, например для источника S3 или на этапе полного снимка.
LastSourceEventTimestampМетка времени (в секундах Unix) последнего события источника, записанного в зафиксированном смещении. Пусто, если значение недоступно.
LastTaskSuccessTimeВремя успешного завершения самой последней Task

Просмотр состояния задач​

Запросите все подзадачи задания по его идентификатору:

select * from tasks("type"="insert") where jobId='<job_id>';

Столбцы результата:

СтолбецОписание
TaskIdИдентификатор задачи
JobIDJobID
JobNameИмя задания
LabelМетка, используемая Task для загрузки
StatusСостояние Task
ErrorMsgСообщение об ошибке Task
CreateTimeВремя создания Task
StartTimeВремя запуска Task
FinishTimeВремя завершения Task
LoadStatisticСтатистика Task
UserИсполнитель Task
RunningOffsetИнформация о смещении, которое в данный момент синхронизируется задачей. Задаётся только при Job.ExecuteType=Streaming

Приостановка задания загрузки​

Вручную приостановите указанное задание (приостановленное задание не активируется autoResume):

PAUSE JOB WHERE jobname = <job_name>;

Возобновление задания загрузки​

Возобновите задание, находящееся в состоянии PAUSED:

RESUME JOB WHERE jobName = <job_name>;

Удаление задания загрузки​

Безвозвратно удалите указанное задание. После удаления оно больше не планируется:

DROP JOB WHERE jobName = <job_name>;

Распространённые параметры​

Параметры конфигурации FE​

ПараметрЗначение по умолчаниюОписание
max_streaming_job_num1024Максимальное число Streaming Job
job_streaming_task_exec_thread_num10Число потоков для выполнения StreamingTask
max_streaming_task_show_count100Максимальное число записей о выполнении StreamingTask, хранимых в памяти

Общие параметры конфигурации загрузки Job​

ПараметрЗначение по умолчаниюОписание
max_interval10Интервал простоя планировщика в секундах, когда в источнике нет новых данных. Принимается только целое число (количество секунд), например 10; суффикс единицы измерения, такой как 10s, не поддерживается. Значение должно быть >= 1.

Ограничения​

Объём синхронизации, автоматическое создание таблиц и семантические гарантии (exactly-once / at-least-once) описаны в разделе Сравнение возможностей. В этом разделе перечислены только ограничения и варианты поведения, которые не поддерживаются.

Таблицы с первичным ключом​

Синхронизация поддерживается только для таблиц источника с первичным ключом (для обоих методов синхронизации). Соответствующая таблица Doris является таблицей Unique Key: в Auto Table Creation Sync она создаётся автоматически как таблица этого типа, а в SQL Mapping Sync её создаёте вы. Таблицы без первичного ключа не поддерживаются.

Изменение схемы (DDL)​

Синхронизация DDL применяется только к Auto Table Creation Sync; SQL Mapping (TVF) не синхронизирует DDL — табличная функция cdc_stream() всегда принудительно устанавливает schema_change_enabled в false.

  • PostgreSQL: синхронизируются только ADD COLUMN и DROP COLUMN. Изменения типов столбцов, RENAME COLUMN, а также изменения ограничений, индексов и секционирования НЕ синхронизируются — применяйте их вручную в Doris.
  • MySQL: синхронизируются только ADD COLUMN и DROP COLUMN. Изменения типов столбцов, RENAME COLUMN, а также изменения ограничений, индексов и секционирования НЕ синхронизируются — применяйте их вручную в Doris.
  • OceanBase: синхронизируются только ADD COLUMN и DROP COLUMN. Изменения типов столбцов, RENAME COLUMN, первичного ключа, ограничений, индексов и секционирования НЕ синхронизируются — применяйте их вручную в Doris.

Auto Table Creation Sync по умолчанию включает синхронизацию изменений схемы. В Doris 4.1 пока нет свойства SQL для её отключения.

Поведение изменения схемы
  • Добавленный столбец не наследует значение DEFAULT исходного столбца (для MySQL, PostgreSQL и OceanBase). Новый столбец не имеет значения по умолчанию в Doris, а исторические строки не заполняются заново.
  • Обнаружение изменений схемы PostgreSQL выполняется по событиям Relation: распознаются только ADD COLUMN и DROP COLUMN; изменение, которое одновременно добавляет и удаляет столбцы (возможно, RENAME), пропускается, как и изменения типов столбцов. Эта возможность применяется только к пути Auto Table Creation Sync (at-least-once); путь TVF / exactly-once её не поддерживает.

Часто задаваемые вопросы​

Ошибка подключения MySQL: Public Key Retrieval is not allowed​

Причина: настроенный пользователь MySQL использует аутентификацию по паролю SHA256, которая требует передачи пароля по протоколу, например TLS.

Решение 1: добавьте параметр allowPublicKeyRetrieval=true в JDBC URL:

jdbc:mysql://127.0.0.1:3306?allowPublicKeyRetrieval=true

Решение 2: измените метод аутентификации пользователя MySQL на mysql_native_password:

ALTER USER 'username'@'%' IDENTIFIED WITH mysql_native_password BY 'password';
FLUSH PRIVILEGES;