使用 Vector 与 Kafka 和 ClickHouse
使用 Vector 连接 Kafka 和 ClickHouse
Vector 是一个与供应商无关的数据管道,能够从 Kafka 读取并将事件发送到 ClickHouse。
关于 Vector 与 ClickHouse 的 入门指南 专注于日志使用案例和从文件读取事件。我们利用 Github 示例数据集,该数据集中的事件存储在 Kafka 主题上。
Vector 使用 sources 来通过推送或拉取模型检索数据。与此同时,Sinks 提供事件的目的地。因此,我们使用 Kafka 源和 ClickHouse 接收器。请注意,虽然 Kafka 被支持作为接收器,但 ClickHouse 源尚不可用。因此,Vector 不适合希望将数据从 ClickHouse 传输到 Kafka 的用户。
Vector 还支持数据的 transformation。这超出了本指南的范围。如有需要,用户可参阅 Vector 文档以了解其数据集的相关信息。
请注意,当前的 ClickHouse 接收器实现使用 HTTP 接口。目前 ClickHouse 接收器不支持使用 JSON 模式。数据必须以纯 JSON 格式或字符串形式发布到 Kafka。
许可证
Vector 根据 MPL-2.0 许可证 分发。
获取连接详情
要通过 HTTP(S) 连接到 ClickHouse,您需要以下信息:
-
主机和端口:通常,当使用 TLS 时端口为 8443,当不使用 TLS 时端口为 8123。
-
数据库名称:开箱即用时,有一个名为
default
的数据库,请使用您要连接的数据库名称。 -
用户名和密码:开箱即用时,用户名为
default
。请使用适合您用例的用户名。
您的 ClickHouse Cloud 服务的详细信息可在 ClickHouse Cloud 控制台中获得。 选择您要连接的服务并点击 连接:

选择 HTTPS,详细信息可在示例的 curl
命令中获得。

如果您使用的是自管理的 ClickHouse,连接详细信息由您的 ClickHouse 管理员设置。
步骤
- 创建 Kafka
github
主题并插入 Github 数据集。
该数据集由 200,000 行构成,主要集中在 ClickHouse/ClickHouse
仓库。
- 确保目标表已创建。以下使用默认数据库。
- 下载并安装 Vector。创建一个
kafka.toml
配置文件并修改为适合您的 Kafka 和 ClickHouse 实例的值。
关于此配置和 Vector 行为的一些重要说明:
- 此示例已在 Confluent Cloud 上进行测试。因此,
sasl.*
和ssl.enabled
安全选项在自管理情况下可能不适用。 - 配置参数
bootstrap_servers
不需要协议前缀,例如pkc-2396y.us-east-1.aws.confluent.cloud:9092
- 源参数
decoding.codec = "json"
确保消息作为单个 JSON 对象传递到 ClickHouse 接收器。如果将消息作为字符串处理并使用默认bytes
值,消息的内容将附加到字段message
中。在大多数情况下,这将需要在 ClickHouse 中处理,正如 Vector 入门指南 中所描述的那样。 - Vector 向消息添加了多个字段。在我们的示例中,我们通过配置参数
skip_unknown_fields = true
在 ClickHouse 接收器中忽略这些字段。这样会忽略不属于目标表架构的字段。您可以根据需要调整您的架构,以确保这些元字段如offset
被添加。 - 请注意接收器如何通过参数
inputs
引用事件源。 - 请注意 ClickHouse 接收器的行为,如 这里所述。为了实现最佳吞吐量,用户可能希望调优
buffer.max_events
、batch.timeout_secs
和batch.max_bytes
参数。根据 ClickHouse 的 建议,单个批次中的事件数量应该被认为是最小值1000。对于均匀高吞吐量的用例,用户可以增加参数buffer.max_events
。而透过变化的吞吐量可能需要修改参数batch.timeout_secs
。 - 参数
auto_offset_reset = "smallest"
强制 Kafka 源从主题的开头开始 - 确保我们消费在第 (1) 步中发布的消息。用户可能需要不同的行为。有关详细信息,请参见 这里。
- 启动 Vector
默认情况下,插入 ClickHouse 之前需要进行 健康检查。这确保可以建立连接并读取架构。如要获取更多日志信息以便于解决问题,请在前面添加 VECTOR_LOG=debug
。
- 确认数据的插入。
count |
---|
200000 |