Nota: La política que se muestra en el video es permisiva y está pensada solo para una puesta en marcha rápida. Consulte la guía de IAM de mínimo privilegio más abajo.
Requisitos previos
Suponemos que:
- conoces ClickHouse Connector Sink,
- conoces Amazon MSK y los conectores de MSK. Te recomendamos la guía de primeros pasos de Amazon MSK y la guía de MSK Connect.
El conector oficial de Kafka de ClickHouse para Amazon MSK
Reúne los datos de conexión
Para conectarse a ClickHouse con HTTP(S), necesita esta información:
| Parámetro(s) | Descripción |
|---|---|
HOST and PORT |
Normalmente, el puerto es 8443 cuando se usa TLS o 8123 cuando no se usa TLS. |
DATABASE NAME |
De forma predeterminada, existe una base de datos llamada default; use el nombre de la base de datos a la que desea conectarse. |
USERNAME and PASSWORD |
De forma predeterminada, el nombre de usuario es default. Use el nombre de usuario adecuado para su caso de uso. |
Los detalles de su servicio de ClickHouse Cloud están disponibles en la consola de ClickHouse Cloud. Seleccione un servicio y haga clic en Connect:

Elija HTTPS. Los detalles de conexión se muestran en un comando curl de ejemplo.

Si usa ClickHouse autogestionado, los detalles de conexión los establece su administrador de ClickHouse.
Pasos
- Asegúrese de conocer ClickHouse Connector Sink
- Cree una instancia de MSK.
- Cree y asigne un rol de IAM.
- Descargue un archivo
jardesde la página de versiones de ClickHouse Connect Sink. - Instale el archivo
jardescargado en la página de plugins personalizados de la consola de Amazon MSK. - Si el conector se comunica con una instancia pública de ClickHouse, habilite el acceso a Internet.
- Proporcione un nombre de topic, el hostname de la instancia de ClickHouse y la contraseña en la configuración.
connector.class=com.clickhouse.kafka.connect.ClickHouseSinkConnector
tasks.max=1
topics=<topic_name>
ssl=true
security.protocol=SSL
hostname=<hostname>
database=<database_name>
password=<password>
ssl.truststore.location=/tmp/kafka.client.truststore.jks
port=8443
value.converter.schemas.enable=false
value.converter=org.apache.kafka.connect.json.JsonConverter
exactlyOnce=true
username=default
schemas.enable=falsePermisos de IAM recomendados (mínimo privilegio)
Use el conjunto mínimo de permisos necesario para su configuración. Comience con la configuración básica que se indica a continuación y agregue servicios opcionales solo si los utiliza.
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "MSKClusterAccess",
"Effect": "Allow",
"Action": [
"kafka:DescribeCluster",
"kafka:GetBootstrapBrokers",
"kafka:DescribeClusterV2",
"kafka:ListClusters",
"kafka:ListClustersV2"
],
"Resource": "*"
},
{
"Sid": "KafkaAuthorization",
"Effect": "Allow",
"Action": [
"kafka-cluster:Connect",
"kafka-cluster:DescribeCluster",
"kafka-cluster:DescribeGroup",
"kafka-cluster:DescribeTopic",
"kafka-cluster:ReadData"
],
"Resource": "*"
},
{
"Sid": "OptionalGlueSchemaRegistry",
"Effect": "Allow",
"Action": [
"glue:GetSchema*",
"glue:ListSchemas",
"glue:ListSchemaVersions"
],
"Resource": "*"
},
{
"Sid": "OptionalSecretsManager",
"Effect": "Allow",
"Action": [
"secretsmanager:GetSecretValue"
],
"Resource": [
"arn:aws:secretsmanager:<region>:<account-id>:secret:<your-secret-name>*"
]
},
{
"Sid": "OptionalS3Read",
"Effect": "Allow",
"Action": [
"s3:GetObject"
],
"Resource": "arn:aws:s3:::<your-bucket>/<optional-prefix>/*"
}
]
}- Use el bloque de Glue solo si usa AWS Glue Schema Registry.
- Use el bloque de Secrets Manager solo si obtiene credenciales/truststores desde Secrets Manager. Limite el alcance del ARN.
- Use el bloque de S3 solo si carga artefactos (p. ej., truststore) desde S3. Limítelo al bucket/prefijo.
Véase también: Prácticas recomendadas de Kafka – IAM.
Optimización del rendimiento
Una forma de aumentar el rendimiento es ajustar el tamaño del lote y el número de registros que se recuperan de Kafka añadiendo lo siguiente a la configuración del worker:
consumer.max.poll.records=[NUMBER OF RECORDS]
consumer.max.partition.fetch.bytes=[NUMBER OF RECORDS * RECORD SIZE IN BYTES]Los valores específicos que utilice variarán en función de la cantidad de registros deseada y del tamaño de cada registro. Por ejemplo, los valores predeterminados son:
consumer.max.poll.records=500
consumer.max.partition.fetch.bytes=1048576Puede consultar más detalles (tanto sobre la implementación como sobre otras consideraciones) en la documentación oficial de Kafka y Amazon MSK.
Notas sobre redes para MSK Connect
Para que MSK Connect pueda conectarse a ClickHouse, recomendamos que su clúster de MSK esté en una subred privada con un NAT privado conectado para el acceso a Internet. A continuación se indican las instrucciones para configurarlo. Tenga en cuenta que las subredes públicas son compatibles, pero no se recomiendan debido a la necesidad de asignar continuamente una dirección IP elástica a su ENI; AWS proporciona más detalles aquí
- Crear una subred privada: Cree una nueva subred dentro de su VPC y desígnela como subred privada. Esta subred no debe tener acceso directo a Internet.
- Crear una puerta de enlace NAT: Cree una puerta de enlace NAT en una subred pública de su VPC. La puerta de enlace NAT permite que las instancias de su subred privada se conecten a Internet o a otros servicios de AWS, pero impide que Internet inicie una conexión con esas instancias.
- Actualizar la tabla de rutas: Agregue una ruta que dirija el tráfico destinado a Internet a la puerta de enlace NAT
- Asegurar la configuración de los grupos de seguridad y las ACL de red: Configure sus grupos de seguridad y sus ACL de red (listas de control de acceso) para permitir el tráfico correspondiente.
- Desde las ENI de los workers de MSK Connect hacia los brokers de MSK en el puerto TLS (normalmente 9094).
- Desde las ENI de los workers de MSK Connect hacia el endpoint de ClickHouse: 9440 (TLS nativo) o 8443 (HTTPS).
- Permita tráfico entrante en el SG del broker desde el SG de los workers de MSK Connect.
- Para ClickHouse self-hosted, abra el puerto configurado en su server (8123 para HTTP de forma predeterminada).
- Adjuntar grupos de seguridad a MSK: Asegúrese de que estos grupos de seguridad estén asociados a su clúster de MSK y a los workers de MSK Connect.
- Conectividad con ClickHouse Cloud:
- Endpoint público + lista de IP permitidas: requiere salida NAT desde subredes privadas.
- Conectividad privada donde esté disponible (por ejemplo, peering de VPC/PrivateLink/VPN). Asegúrese de que los nombres de host DNS y la resolución DNS de la VPC estén habilitados, y de que DNS pueda resolver el endpoint privado.
- Validar la conectividad (lista de comprobación rápida):
- Desde el entorno del connector, resuelva el DNS bootstrap de MSK y conéctese mediante TLS al puerto del broker.
- Establezca una conexión TLS con ClickHouse en el puerto 9440 (o 8443 para HTTPS).
- Si utiliza servicios de AWS (Glue/Secrets Manager), permita la salida hacia esos endpoints.