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

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

Большинство ошибок при записи связано с режимом записи и двухфазной фиксацией транзакций; сначала ознакомьтесь с разделом Режимы записи.

1. errCode = 2, detailMessage = Label [label_0_1] has already been used, relate to txn [19650]

В сценариях Exactly-Once при перезапуске задания Flink его необходимо восстанавливать из последнего Checkpoint/Savepoint, иначе возникает указанная выше ошибка. Если Exactly-Once не требуется, эту проблему также можно решить, отключив фиксацию 2PC (sink.enable-2pc=false) или задав другое значение sink.label-prefix.

2. errCode = 2, detailMessage = transaction [19650] not found

Эта ошибка возникает на этапе Commit. Срок действия транзакции, идентификатор которой сохранён в Checkpoint, истёк на стороне FE. Повторная фиксация в этот момент приводит к указанной выше ошибке. В таком случае запустить задание из Checkpoint нельзя. Срок действия можно увеличить, изменив параметр streaming_label_keep_max_second в fe.conf (по умолчанию 12 часов). После Doris 2.0 также действует ограничение, задаваемое параметром label_num_threshold в fe.conf (по умолчанию 2000); его значение можно увеличить или установить в -1 (-1 означает, что действует только ограничение по времени).

3. errCode = 2, detailMessage = current running txns on db 10006 is 100, larger than limit 100

Эта ошибка возникает, когда число параллельных загрузок в одну базу данных превышает 100. Решить проблему можно, изменив параметр max_running_txn_num_per_db в fe.conf. Подробнее см. max_running_txn_num_per_db. Кроме того, к этой ошибке может приводить частая смена метки с последующим перезапуском задания. В сценариях 2pc (модели Duplicate/Aggregate) метка каждого задания должна быть уникальной. Только при перезапуске из Checkpoint задание Flink само прерывает предыдущие транзакции, которые успешно прошли предварительную фиксацию, но ещё не были зафиксированы окончательно. Частая смена метки с последующим перезапуском приводит к накоплению большого числа успешно предварительно зафиксированных транзакций, которые невозможно прервать и которые продолжают занимать доступные слоты транзакций. При использовании модели Unique также можно отключить 2pc, чтобы обеспечить идемпотентную запись.

4. tablet writer write failed, tablet_id=190958, txn_id=3505530, err=-235

Обычно эта ошибка возникает в версиях Connector до 1.1.0 из-за слишком частой записи, которая приводит к накоплению большого числа версий. Частоту Stream Load можно снизить с помощью параметров sink.batch.size и sink.batch.interval. После Connector 1.1.0 момент записи по умолчанию определяется Checkpoint, поэтому частоту записи можно снизить, увеличив интервал Checkpoint.

5. При загрузке через Flink встречаются некорректные данные. Как их пропустить?

Если при загрузке данных через Flink встречаются некорректные данные (например, поля с неподходящим форматом или длиной), Stream Load сообщает об ошибке, а Flink постоянно повторяет попытки. Чтобы пропустить такие данные, можно отключить строгий режим Stream Load (strict_mode=false, max_filter_ratio=1) или отфильтровать данные перед оператором Sink.

6. Между машиной с Flink и машиной с BE нет сетевого соединения. Как это настроить?

Когда Flink начинает запись в Doris, Doris перенаправляет запрос на BE для выполнения записи. Возвращаемый при этом адрес представляет собой внутренний IP BE (то есть IP, отображаемый командой show backends). Если Flink и Doris не могут обмениваться данными по сети, возникает ошибка. В этом случае внешний IP BE можно указать в benodes.

7. stream load error: HTTP/1.1 307 Temporary Redirect

Сначала Flink отправляет запрос в FE. Получив ответ 307, он отправляет запрос на BE, указанный в перенаправлении. Если FE находится в состоянии FullGC, работает под высокой нагрузкой или возникают сетевые задержки, HttpClient по умолчанию начинает отправлять данные через определённое время (3 секунды), не дождавшись ответа. Поскольку тело запроса по умолчанию представляет собой InputStream, при получении ответа 307 данные невозможно отправить повторно, и сразу возникает ошибка. Решить эту проблему можно тремя способами:

  1. Обновитесь до Connector 25.1.0 или более поздней версии, где время ожидания по умолчанию увеличено.
  2. Установите auto-redirect=false, чтобы отправлять запросы непосредственно на BE (неприменимо в некоторых облачных сценариях).
  3. Для модели с первичным ключом можно включить пакетный режим.