Примечание: Политика, показанная в видео, слишком разрешительная и предназначена только для быстрого старта. Ниже приведены рекомендации IAM по принципу наименьших привилегий.
Предварительные требования
Предполагается, что:
- вы знакомы с ClickHouse Connector Sink,
- вы знакомы с Amazon MSK и коннекторами MSK. Рекомендуем ознакомиться с руководствами Amazon MSK Getting Started и MSK Connect.
Официальный коннектор Kafka от ClickHouse для Amazon MSK
Подготовьте сведения о подключении
Чтобы подключиться к ClickHouse по HTTP(S), вам понадобится следующая информация:
| Параметр(ы) | Описание |
|---|---|
HOST and PORT |
Обычно используется порт 8443 при использовании TLS и 8123 без TLS. |
DATABASE NAME |
По умолчанию есть база данных default; используйте имя базы данных, к которой хотите подключиться. |
USERNAME and PASSWORD |
По умолчанию имя пользователя — default. Используйте имя пользователя, подходящее для вашего сценария использования. |
Сведения о подключении для вашего сервиса ClickHouse Cloud доступны в консоли ClickHouse Cloud. Выберите сервис и нажмите Connect:

Выберите HTTPS. Сведения о подключении будут показаны в примере команды curl.

Если вы используете самоуправляемый ClickHouse, сведения о подключении задаёт ваш администратор ClickHouse.
Шаги
- Убедитесь, что вы знакомы с ClickHouse Connector Sink
- Создайте экземпляр MSK.
- Создайте и назначьте роль IAM.
- Скачайте файл
jarсо страницы релизов ClickHouse Connect Sink. - Установите скачанный файл
jarна странице Custom plugin в консоли Amazon MSK. - Если коннектор подключается к общедоступному экземпляру ClickHouse, включите доступ в интернет.
- Укажите в конфигурации имя топика, имя хоста экземпляра ClickHouse и пароль.
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=falseРекомендуемые разрешения IAM (принцип наименьших привилегий)
Используйте минимальный набор разрешений, необходимый для вашей конфигурации. Начните с приведённого ниже базового набора и добавляйте разрешения для дополнительных сервисов только если действительно их используете.
{
"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>/*"
}
]
}- Используйте блок Glue только в том случае, если используете AWS Glue Schema Registry.
- Используйте блок Secrets Manager только в том случае, если получаете учетные данные или truststore из Secrets Manager. Ограничьте ARN.
- Используйте блок S3 только в том случае, если загружаете артефакты (например, truststore) из S3. Ограничьте доступ бакетом/префиксом.
См. также: лучшие практики Kafka — IAM.
Настройка производительности
Один из способов повысить производительность — настроить размер батча и количество записей, считываемых из Kafka, добавив в конфигурацию воркера следующее:
consumer.max.poll.records=[NUMBER OF RECORDS]
consumer.max.partition.fetch.bytes=[NUMBER OF RECORDS * RECORD SIZE IN BYTES]Конкретные значения будут зависеть от желаемого количества записей и размера записи. Например, по умолчанию используются следующие значения:
consumer.max.poll.records=500
consumer.max.partition.fetch.bytes=1048576Более подробную информацию — как о реализации, так и о других важных аспектах — можно найти в официальной документации Kafka и Amazon MSK.
Примечания по сетевой конфигурации для MSK Connect
Чтобы MSK Connect мог подключаться к ClickHouse, мы рекомендуем размещать ваш кластер MSK в частной подсети с настроенным Private NAT для доступа в интернет. Инструкции по настройке приведены ниже. Обратите внимание: публичные подсети поддерживаются, но не рекомендуются, поскольку в этом случае придется постоянно назначать Elastic IP-адрес вашему ENI; подробнее см. в документации AWS
- Создайте частную подсеть: Создайте новую подсеть в вашем VPC и обозначьте ее как частную. Эта подсеть не должна иметь прямого доступа в интернет.
- Создайте NAT Gateway: Создайте NAT Gateway в публичной подсети вашего VPC. NAT Gateway позволяет экземплярам в частной подсети подключаться к интернету или другим сервисам AWS, но не позволяет инициировать входящие соединения из интернета к этим экземплярам.
- Обновите таблицу маршрутизации: Добавьте маршрут, направляющий трафик, предназначенный для интернета, через NAT Gateway.
- Проверьте конфигурацию Security Group и сетевых ACL: Настройте ваши security groups и сетевые ACL (списки управления доступом), чтобы разрешить необходимый трафик.
- От ENI воркеров MSK Connect к брокерам MSK по порту TLS (обычно 9094).
- От ENI воркеров MSK Connect к конечной точке ClickHouse: 9440 (native TLS) или 8443 (HTTPS).
- Разрешите входящий трафик в SG брокера от SG воркеров MSK Connect.
- Для самоуправляемого ClickHouse откройте порт, настроенный на вашем сервере (по умолчанию 8123 для HTTP).
- Привяжите Security Group к MSK: Убедитесь, что эти security groups привязаны к вашему кластеру MSK и воркерам MSK Connect.
- Подключение к ClickHouse Cloud:
- Публичная конечная точка + список разрешенных IP-адресов: требуется исходящий NAT-доступ из частных подсетей.
- Частное подключение там, где оно доступно (например, пиринг VPC/PrivateLink/VPN). Убедитесь, что в VPC включены DNS hostnames/DNS resolution и что DNS может разрешить частную конечную точку.
- Проверьте подключение (краткий чек-лист):
- Из среды коннектора выполните разрешение bootstrap DNS MSK и установите TLS‑соединение с портом брокера.
- Установите TLS‑соединение с ClickHouse на порту 9440 (или 8443 для HTTPS).
- Если вы используете сервисы AWS (Glue/Secrets Manager), разрешите исходящий трафик к этим конечным точкам.