Как обеспечить скорость вставки 1 вставку в секунду при использовании ClickhouseIO

Я использую Apache Beam Java SDK для обработки событий и записи их в базу данных Clickhouse. К счастью, есть готовый к использованию ClickhouseIO.

ClickhouseIO накапливает элементы и вставляет их в пакетном режиме, но из-за параллельного характера конвейера в моем случае это все равно приводит к большому количеству вставок в секунду. Я часто получаю сообщение "DB::Exception: слишком много частей" или "DB::Exception: слишком много одновременных запросов" в Clickhouse.

Документация Clickhouse рекомендует выполнять 1 вставку в секунду. Могу ли я обеспечить это с помощью ClickhouseIO? Может быть, какая-то группировка KV перед ClickhouseIO.Write или что-то в этом роде?


person Oleksandr Bushkovskyi    schedule 10.03.2020    source источник


Ответы (1)


Похоже, вы не совсем правильно интерпретируете эти ошибки:

DB::Exception: слишком много частей

Это означает, что вставка влияет на большее количество разделов, чем разрешено (по умолчанию это значение равно 100, оно управляется параметром max_partitions_per_insert_block).

Таким образом, либо количество затронутых разделов действительно велико, либо PARTITION BY- ключ был определен довольно детально.

Как это исправить:

  • попробуйте сгруппировать INSERT-пакет таким образом, чтобы он содержал данные, относящиеся менее чем к 100 разделам
  • попробуйте уменьшить размер вставляемого блока (если он довольно большой) - withMaxInsertBlockSize
  • увеличьте лимит max_partitions_per_insert_block в SQL-запросе (например, INSERT .. SETTINGS max_partitions_per_insert_block=300 (я думаю, ClickhouseIO должен иметь возможность устанавливать пользовательские параметры на уровне запроса)) или на стороне сервера, изменив настройки профиля пользователя.

DB::Exception: слишком много одновременных запросов

Этот управляется параметром max_concurrent_queries.

Как это исправить:

  • уменьшить количество одновременных запросов средствами Beam
  • увеличьте лимит на стороне сервера в настройках профиля пользователя или сервера (см. https://github.com/ClickHouse/ClickHouse/issues/7765)
person vladimir    schedule 10.03.2020
comment
Спасибо за ваш ответ! Из того, что я видел в следующих обсуждениях: github.com/ClickHouse/ClickHouse/issues/3174 github.com/ClickHouse/ClickHouse/issues/4050 DB:: Исключение: Слишком много деталей может быть вызвано слишком частыми вставками. На самом деле меня интересует именно то, что вы упомянули, уменьшить количество одновременных запросов с помощью Beam. Как уменьшить количество одновременных запросов с Apache Beam с помощью ClickhouseIO? - person Oleksandr Bushkovskyi; 12.03.2020
comment
Извините, я не специалист по Apache Beam и могу только предполагать, как это работает - возможно, существуют средства для управления "количеством писателей-воркеров" или что-то в этом роде. Лучше спросить об этом Beam-сообщество и автора ClickhouseIO. - person vladimir; 12.03.2020