Часто задаваемые вопросы о загрузке
Общие вопросы о загрузке
Ошибка "[DATA_QUALITY_ERROR] Encountered unqualified data"
Описание проблемы: Ошибка качества данных при загрузке.
Решение:
- Операции Stream Load и Insert Into возвращают URL с описанием ошибок. Для Broker Load этот URL можно получить с помощью команды
Show Load. - Откройте URL с описанием ошибок в браузере или с помощью команды curl, чтобы узнать конкретные причины ошибок качества данных.
- Используйте параметры strict_mode и max_filter_ratio для управления допустимой долей ошибок.
Ошибка "[E-235] Failed to init rowset builder"
Описание проблемы: Ошибка -235 возникает, когда загрузка выполняется слишком часто и данные не успевают пройти компактацию, из-за чего превышается лимит числа версий.
Решение:
- Увеличьте размер пакета при загрузке данных и уменьшите частоту загрузок.
- Увеличьте значение параметра
max_tablet_version_numвbe.conf. Рекомендуется не превышать 5000.
Ошибка "[E-238] Too many segments in rowset"
Описание проблемы: Ошибка -238 возникает, когда число сегментов в одном rowset превышает лимит.
Распространённые причины:
- При создании таблицы задано слишком малое число бакетов.
- Данные распределены неравномерно; попробуйте выбрать ключи, обеспечивающие более равномерное распределение по бакетам.
Ошибка "Transaction commit successfully, BUT data will be visible later"
Описание проблемы: Данные успешно загружены, но временно недоступны для чтения.
Причина: Обычно это связано с задержкой публикации транзакции из-за высокой нагрузки на системные ресурсы.
Ошибка "Failed to commit kv txn [...] Transaction exceeds byte limit"
Описание проблемы: В режиме shared-nothing в одной загрузке участвует слишком много разделов и таблетов, из-за чего превышается лимит размера транзакции.
Решение:
- Загружайте данные пакетами по разделам, чтобы уменьшить число разделов, участвующих в одной загрузке.
- Оптимизируйте структуру таблицы, чтобы уменьшить число разделов и таблетов.
Лишний символ "\r" в последнем столбце файла CSV
Описание проблемы: Обычно проблема вызвана окончаниями строк Windows.
Решение:
Укажите правильный разделитель строк: -H "line_delimiter:\r\n"
Данные CSV в кавычках загружаются как null
Описание проблемы: Данные CSV, заключённые в кавычки, после загрузки превращаются в null.
Решение:
Используйте параметр trim_double_quotes, чтобы удалить двойные кавычки вокруг полей.
Stream Load
Причины медленной загрузки
- Нехватка ресурсов CPU, IO, памяти или сетевой карты.
- Медленное сетевое соединение между клиентским компьютером и узлами BE. Для первоначальной диагностики можно проверить задержку ping от клиента до узлов BE.
- Ограничение по числу потоков веб-сервера: слишком много одновременных операций Stream Load на одном BE (больше значения webserver_num_workers в be.conf) может привести к нехватке потоков.
- Ограничение по числу потоков Memtable Flush: проверьте метрику BE doris_be_flush_thread_pool_queue_size, чтобы оценить размер очереди. Проблему можно решить, увеличив значение параметра flush_thread_num_per_store в be.conf.
Обработка специальных символов в именах столбцов
Если имена столбцов содержат специальные символы, задайте параметр columns в одинарных кавычках, заключив имена столбцов в обратные кавычки:
curl --location-trusted -u root:"" \
-H 'columns:`@coltime`,colint,colvar' \
-T a.csv \
-H "column_separator:," \
http://127.0.0.1:8030/api/db/loadtest/_stream_load
Маленькие пакеты при загрузке через Kafka Connect или Confluent
Если задание Doris Kafka Connector часто отправляет небольшие запросы Stream Load, проверьте настройки его буфера. Например, если в текущей конфигурации заданы buffer.count.records=10000 и buffer.size.bytes=5000000, попробуйте увеличить размер пакетов:
buffer.count.records=50000
buffer.size.bytes=104857600
Эти параметры относятся к Doris Kafka Connector, а не к общим настройкам Confluent. Они задают пороговые значения числа записей и размера пакета в байтах. Увеличение буфера может уменьшить число запросов на загрузку, но требует больше памяти для задания Kafka Connect и может увеличить задержку. Также проверьте buffer.flush.time: этот параметр может вызвать отправку пакета до достижения любого из пороговых значений размера. Параметры и значения по умолчанию для используемой версии коннектора приведены в разделе Doris Kafka Connector.
Routine Load
Основные исправления ошибок
| Описание проблемы | Условия возникновения | Область влияния | Временное решение | Затронутые версии | Версии с исправлением | PR с исправлением |
|---|---|---|---|---|---|---|
| Если хотя бы в одном задании возникает тайм-аут при подключении к Kafka, это влияет на загрузку в других заданиях и замедляет все загрузки Routine Load. | Хотя бы в одном задании возникает тайм-аут при подключении к Kafka. | Shared-nothing и shared-storage | Остановите или вручную приостановите задание, чтобы устранить проблему. | <2.1.9 <3.0.5 | 2.1.9 3.0.5 | #47530 |
| После перезапуска FE Master возможна потеря пользовательских данных. | Для смещения задания задано значение OFFSET_END, и выполняется перезапуск FE. | Shared-storage | Измените режим потребления на OFFSET_BEGINNING. | 3.0.2-3.0.4 | 3.0.5 | #46149 |
| При загрузке создаётся большое число мелких транзакций, из-за чего компактация завершается сбоем и постоянно возникают ошибки -235. | Doris потребляет данные слишком быстро или данные из Kafka поступают маленькими пакетами. | Shared-nothing и shared-storage | Приостановите задание Routine Load и выполните следующую команду: ALTER ROUTINE LOAD FOR jobname FROM kafka ("property.enable.partition.eof" = "false"); | <2.1.8 <3.0.4 | 2.1.8 3.0.4 | #45528, #44949, #39975 |
| Деструктор сторонней библиотеки Kafka зависает, из-за чего потребление данных прекращается. | Удаление топика Kafka (возможны и другие условия). | Shared-nothing и shared-storage | Перезапустите все узлы BE. | <2.1.8 <3.0.4 | 2.1.8 3.0.4 | #44913 |
| Планирование Routine Load зависает. | При отмене транзакции в Meta Service узлом FE возникает тайм-аут. | Shared-storage | Перезапустите узел FE. | <3.0.2 | 3.0.2 | #41267 |
| Проблема с перезапуском Routine Load. | Перезапуск узлов BE. | Shared-nothing и shared-storage | Вручную возобновите задание. | <2.1.7 <3.0.2 | 2.1.7 3.0.2 | #40728 |
Оптимизация конфигурации по умолчанию
| Изменение | Версии, в которых применено | Соответствующий PR |
|---|---|---|
| Увеличено время ожидания для Routine Load. | 2.1.7 3.0.3 | #42042, #40818 |
Изменено значение по умолчанию для max_batch_interval. | 2.1.8 3.0.3 | #42491 |
Снято ограничение на max_batch_interval. | 2.1.5 3.0.0 | #29071 |
Изменены значения по умолчанию для max_batch_rows и max_batch_size. | 2.1.5 3.0.0 | #36632 |
Улучшения наблюдаемости
| Изменение | Версии, в которых применено | Соответствующий PR |
|---|---|---|
| Добавлены метрики для улучшения наблюдаемости. | 3.0.5 | #48209, #48171, #48963 |
Ошибка "failed to get latest offset"
Описание проблемы: Routine Load не может получить последнее смещение Kafka.
Распространённые причины:
- Обычно причина в проблемах сетевого соединения с Kafka. Проверьте доступность Kafka по доменному имени с помощью ping или telnet.
- Тайм-аут из-за ошибки в сторонней библиотеке, сообщение об ошибке: java.util.concurrent.TimeoutException: Waited X seconds
Ошибка "failed to get partition meta: Local:'Broker transport failure"
Описание проблемы: Routine Load не может получить метаданные разделов топика Kafka.
Распространённые причины:
- Обычно причина в проблемах сетевого соединения с Kafka. Проверьте доступность Kafka по доменному имени с помощью ping или telnet.
- Если используются доменные имена, попробуйте настроить их сопоставление с адресами в /etc/hosts
Ошибка "Broker: Offset out of range"
Описание проблемы: Смещение, с которого выполняется потребление, отсутствует в Kafka. Возможно, соответствующие данные уже удалены при очистке Kafka.
Решение:
- Укажите новое смещение для потребления, например OFFSET_BEGINNING.
- Настройте подходящие параметры очистки логов Kafka с учётом скорости загрузки: log.retention.hours, log.retention.bytes и т. д.