Требования
- Java 11+ (для Flink 1.17+) или 17+ (для Flink 2.0+)
- Apache Flink 1.17+
Матрица совместимости версий Flink
Коннектор не тестировался с версиями Flink более ранними, чем 1.17.2
Установка и настройка
Импорт в качестве зависимости
Для Flink 2.0+
- Maven
- Gradle
- SBT
Для Flink 1.17+
- Maven
- Gradle
- SBT
Скачайте JAR-файл
flink_version— одно из значений:2.0.0или1.17stable_version— версия стабильного релиза артефакта
Использование DataStream API
Фрагмент
- Java
Пример быстрого старта
Параметры подключения к DataStream API
Параметры клиента ClickHouse
options и serverSettings следует передавать клиенту как Map<String, String>. Если для любого из них передать пустой Map, будут использоваться значения клиента или сервера по умолчанию соответственно.
Все доступные параметры Java-клиента перечислены в ClientConfigProperties.java и в этой странице документации.Все доступные настройки сеанса сервера перечислены на этой странице документации.
- Java
Параметры sink
AsyncSinkBase Flink:
Поддерживаемые типы данных
Вставка данных из Flink в ClickHouse
Примечания:
- При выполнении операций над датами необходимо указать
ZoneId. - При выполнении операций с десятичными числами необходимо указать точность и масштаб.
- Чтобы ClickHouse мог разобрать строку Java как JSON, необходимо включить
enableJsonSupportAsStringвClickHouseClientConfig. - Коннектору требуется
ElementConvertor, чтобы сопоставлять элементы входногоDataStreamс полезными нагрузками ClickHouse. Для этого коннектор предоставляетClickHouseConvertorиPOJOConvertor, которые можно использовать для реализации такого сопоставления с помощью приведённых выше методов сериализацииDataWriter.
Поддерживаемые входные форматы
setClickHouseFormat. Например:
По умолчанию коннектор использует RowBinaryWithDefaults или RowBinary, если параметр
setSupportDefault в ClickHouseClientConfig явно задан как true или false соответственно.Метрики
Ограничения
- В настоящее время sink гарантирует доставку как минимум один раз. Работа над семантикой «ровно один раз» отслеживается здесь.
- Sink пока не поддерживает dead-letter queue (DLQ) для буферизации записей, которые не удалось обработать. Пока что коннектор будет пытаться повторно выполнять вставку записей, завершившихся ошибкой, и отбрасывать их в случае неудачи. Эта возможность отслеживается здесь.
- Sink пока не поддерживает создание через Table API Flink или Flink SQL. Эта возможность отслеживается здесь.
Совместимость версий ClickHouse и безопасность
- Коннектор ежедневно тестируется в CI с рядом последних версий ClickHouse, включая latest и head. Список тестируемых версий периодически обновляется по мере выхода новых релизов ClickHouse. Здесь можно посмотреть, с какими версиями коннектор ежедневно проходит тестирование.
- Сведения об известных уязвимостях и о том, как сообщить о новой уязвимости, см. в политике безопасности ClickHouse.
- Мы рекомендуем регулярно обновлять коннектор, чтобы не пропускать исправления безопасности и новые улучшения.
- Если у вас возникли проблемы с миграцией, создайте issue в GitHub, и мы ответим!
Расширенное и рекомендуемое использование
- Для оптимальной производительности убедитесь, что тип элементов в вашем DataStream не является типом Generic — см. здесь описание различий между типами во Flink. Элементы, не относящиеся к Generic, позволяют избежать накладных расходов на serialization, связанных с Kryo, и повысить пропускную способность при записи в ClickHouse.
- Мы рекомендуем установить
maxBatchSizeкак минимум в 1000, а в идеале — в диапазоне от 10 000 до 100 000. Подробнее см. в этом руководстве по массовым вставкам. - Чтобы выполнять дедупликацию в стиле OLTP или upsert в ClickHouse, обратитесь к этой странице документации. Примечание: не путайте это с дедупликацией батчей, которая происходит при повторных попытках.
Устранение неполадок
CANNOT_READ_ALL_DATA
Низкая пропускная способность
numRequestSubmitted и actualRecordsPerBatch, чтобы понять, как подобрать размер батча (maxBatchSize) и частоту flush. Рекомендации по выбору размера батча также приведены в разделе Расширенное и рекомендуемое использование.
В моей таблице ClickHouse отсутствуют строки
ClickHouseClientConfig.setNumberOfRetries()). Примечание: по умолчанию коннектор пытается повторно вставить батч до 3 раз, прежде чем отбросить его.
Решение: Проверьте журналы TaskManager и/или трассировки стека, чтобы определить первопричину.