Requisitos
- Java 11+ (para Flink 1.17+) o 17+ (para Flink 2.0+)
- Apache Flink 1.17+
Matriz de compatibilidad de versiones de Flink
El conector no se ha probado con versiones de Flink anteriores a la 1.17.2
Instalación y configuración
Añadir como dependencia
Para Flink 2.0+
- Maven
- Gradle
- SBT
Para Flink 1.17+
- Maven
- Gradle
- SBT
Descarga el binario
flink_versiones uno de2.0.0o1.17stable_versiones una versión estable del artefacto
Uso de la API de DataStream
Snippet
- Java
Ejemplo de inicio rápido
Opciones de conexión de la API de DataStream
Opciones del cliente de ClickHouse
options y serverSettings deben pasarse al cliente como Map<String, String>. Si cualquiera de los dos es un mapa vacío, se usarán los valores predeterminados del cliente o del servidor, respectivamente.
Todas las opciones disponibles del cliente Java se enumeran en ClientConfigProperties.java y en esta página de documentación.Todos los ajustes de sesión disponibles del servidor se enumeran en esta página de documentación.
- Java
Opciones del sink
AsyncSinkBase de Flink:
Tipos de datos compatibles
Inserción de datos de Flink en ClickHouse
Notas:
- Se debe proporcionar un
ZoneIdal realizar operaciones con fechas. - Se deben proporcionar la precisión y la escala al realizar operaciones decimales.
- Para que ClickHouse pueda interpretar un
Stringde Java como JSON, es necesario habilitarenableJsonSupportAsStringenClickHouseClientConfig. - El conector requiere un
ElementConvertorpara asignar los elementos del DataStream de entrada a los payloads de ClickHouse. Para ello, el conector proporcionaClickHouseConvertoryPOJOConvertor, que pueden usarse para implementar esta asignación mediante los métodos de serialización deDataWriterindicados anteriormente.
Formatos de entrada compatibles
DataStream como payloads de ClickHouse, utiliza la función setClickHouseFormat. Por ejemplo:
De forma predeterminada, el conector usará RowBinaryWithDefaults o RowBinary si
setSupportDefault en ClickHouseClientConfig se establece explícitamente en true o false, respectivamente.Métricas
Limitaciones
- El sink actualmente ofrece una garantía de entrega de al menos una vez. El trabajo para lograr la semántica exactly-once se está rastreando aquí.
- El sink todavía no admite una cola de mensajes fallidos (DLQ) para el almacenamiento en búfer de registros que no se pueden procesar. Mientras tanto, el conector intentará volver a insertar los registros que fallen y los descartará si no lo consigue. Esta funcionalidad se está rastreando aquí.
- El sink todavía no admite la creación mediante la Table API de Flink ni con Flink SQL. Esta funcionalidad se está rastreando aquí.
Compatibilidad de versiones de ClickHouse y seguridad
- El conector se prueba a diario, mediante un flujo de trabajo de CI, con varias versiones recientes de ClickHouse, incluidas
latestyhead. Las versiones probadas se actualizan periódicamente a medida que entran en uso nuevas versiones de ClickHouse. Consulta aquí las versiones con las que se prueba el conector cada día. - Consulta la política de seguridad de ClickHouse para conocer las vulnerabilidades de seguridad conocidas y cómo informar de una vulnerabilidad.
- Recomendamos actualizar el conector de forma continua para no perder ninguna corrección de seguridad ni mejora nueva.
- Si tienes algún problema con la migración, crea un issue en GitHub y te responderemos.
Uso avanzado y recomendado
- Para obtener un rendimiento óptimo, asegúrese de que el tipo de elemento de su DataStream no sea un tipo genérico; consulte aquí la distinción de tipos de Flink. Los elementos no genéricos evitan la sobrecarga de serialización que introduce Kryo y mejoran el rendimiento hacia ClickHouse.
- Recomendamos configurar
maxBatchSizecon un valor mínimo de 1000 y, preferiblemente, entre 10,000 y 100,000. Consulte esta guía sobre inserciones masivas para obtener más información. - Para realizar deduplicación de estilo OLTP o upsert en ClickHouse, consulte esta página de documentación. Nota: no debe confundirse con la deduplicación por lotes que se produce en los reintentos.
Solución de problemas
CANNOT_READ_ALL_DATA
Bajo rendimiento
numRequestSubmitted y actualRecordsPerBatch para determinar cómo ajustar el tamaño del lote (maxBatchSize) y con qué frecuencia hacer flush. Consulte también Uso avanzado y recomendado para ver recomendaciones sobre el tamaño de los lotes.
Me faltan filas en mi tabla de ClickHouse
ClickHouseClientConfig.setNumberOfRetries()). Nota: de forma predeterminada, el conector intentará volver a insertar un lote hasta 3 veces antes de descartarlo.
Solución: Inspeccione los logs de TaskManager y/o las trazas de pila para identificar la causa raíz.