HTTP 连接器依据 Confluent Enterprise License 发布。
快速入门步骤
1. 获取连接信息
你的 ClickHouse Cloud 服务的连接信息可在 ClickHouse Cloud 控制台中查看。
选择一个服务,然后点击 Connect:
选择 HTTPS。连接信息会显示在示例
curl 命令中。
如果你使用的是自管理 ClickHouse,则连接信息由你的 ClickHouse 管理员配置。
2. 运行 Kafka Connect 和 HTTP Sink 连接器
-
自管理: 下载 Confluent 软件包并在本地安装。请按照此处的说明安装该连接器。
如果您使用
confluent-hub安装方式,本地配置文件会被更新。 - Confluent Cloud: 如果您使用 Confluent Cloud 托管 Kafka,可以使用完全托管的 HTTP Sink 版本。这要求您的 ClickHouse 环境可被 Confluent Cloud 访问。
以下示例使用 Confluent Cloud。
3. 在 ClickHouse 中创建目标表
4. 配置 HTTP Sink
配置 HTTP Sink 连接器:
- 填写你创建的 topic 名称
- 身份验证
HTTP Url- 包含已指定INSERT查询的 ClickHouse Cloud URL:<protocol>://<clickhouse_host>:<clickhouse_port>?query=INSERT%20INTO%20<database>.<table>%20FORMAT%20JSONEachRow。注意:查询必须经过编码。Endpoint Authentication type- BASICAuth username- ClickHouse 用户名Auth password- ClickHouse 密码
这个 HTTP Url 很容易出错。请确保转义准确无误,以避免问题。
- 配置
Input Kafka record value format- 这取决于你的源数据,但大多数情况下为 JSON 或 Avro。以下设置中我们假定使用JSON。- 在
advanced configurations部分中:HTTP Request Method- 设置为 POSTRequest Body Format- jsonBatch batch size- 根据 ClickHouse 的建议,将其设置为至少 1000。Batch json as array- trueRetry on HTTP codes- 400-500,但应按需调整;例如,如果你在 ClickHouse 前面使用了 HTTP proxy,这个设置可能需要变更。Maximum Reties- 默认值 (10) 比较合适,但也可根据需要调整,以获得更稳健的重试行为。
5. 测试连通性
并确认该消息已写入您的 ClickHouse 实例。
故障排查
HTTP Sink 不会批量处理消息
对于 Kafka 请求头值不同的消息,HTTP Sink 连接器不会将请求按批次发送。
- 确认你的 Kafka 记录具有相同的键。
- 向 HTTP API URL 添加参数时,每条记录都可能生成唯一的 URL。因此,使用额外的 URL 参数时会禁用批处理。
400 请求错误
CANNOT_PARSE_QUOTED_STRING
String 列时失败,并显示以下消息:
SETTINGS%20input_format_json_read_objects_as_strings%3D1 设置 input_format_json_read_objects_as_strings=1
加载 GitHub 数据集 (可选)
1. 准备配置
http.api.url。ClickHouse 的 HTTP interface 要求你将 INSERT 语句编码为 URL 参数。该参数必须包含格式 (此处为 JSONEachRow) 和目标数据库。该格式必须与 Kafka 中的数据保持一致,因为这些数据会在 HTTP 载荷中被转换为字符串。这些参数都必须进行 URL 转义。下面展示了适用于 GitHub 数据集的此类格式示例 (假设你在本地运行 ClickHouse) :
request.method- 设置为 POSTretry.on.status.codes- 设置为 400-500,以便在出现任意错误状态码时重试。请根据数据中预期出现的错误进一步细化。request.body.format- 大多数情况下应为 JSON。auth.type- 如果为 ClickHouse 启用了安全机制,请设置为 BASIC。目前尚不支持其他与 ClickHouse 兼容的身份验证机制。ssl.enabled- 如果使用 SSL,则设置为 true。connection.user- ClickHouse 的用户名。connection.password- ClickHouse 的密码。batch.max.size- 单个批次发送的行数。请确保该值设置得足够大。根据 ClickHouse 的建议,1000 应视为最低值。tasks.max- HTTP Sink 连接器支持运行一个或多个任务,这可用于提升性能。结合批次大小,这是提高性能的主要方式。key.converter- 根据键的类型进行设置。value.converter- 根据 topic 中的数据类型进行设置。这些数据不需要 schema。此处的格式必须与参数http.api.url中指定的 FORMAT 保持一致。最简单的方式是使用 JSON 和org.apache.kafka.connect.json.JsonConverter转换器。也可以通过org.apache.kafka.connect.storage.StringConverter转换器将值视为字符串,不过这会要求用户在 INSERT 语句中使用函数提取值。如果使用io.confluent.connect.avro.AvroConverter转换器,ClickHouse 也支持 Avro 格式。