将 Amazon MSK 集成到 ClickHouse
先决条件
我们假设
- 您熟悉 ClickHouse Connector Sink、Amazon MSK 和 MSK 连接器。我们建议您参考 Amazon MSK 的 入门指南 和 MSK Connect 指南。
- MSK 代理可以公开访问。请参阅开发者指南中的 公共访问 部分。
来自 ClickHouse 与 Amazon MSK 的官方 Kafka 连接器
收集您的连接详细信息
要使用 HTTP(S) 连接到 ClickHouse,您需要以下信息
主机和端口:通常,使用 TLS 时端口为 8443,不使用 TLS 时端口为 8123。
数据库名称:默认情况下,存在一个名为
default
的数据库,请使用您要连接到的数据库的名称。用户名和密码:默认情况下,用户名为
default
。请使用适合您用例的用户名。
您可以在 ClickHouse Cloud 控制台中找到 ClickHouse Cloud 服务的详细信息。选择您要连接的服务,然后点击**连接**
选择**HTTPS**,详细信息将显示在示例 curl
命令中。
如果您使用的是自托管 ClickHouse,则连接详细信息由您的 ClickHouse 管理员设置。
步骤
- 确保您熟悉 ClickHouse Connector Sink
- 创建 MSK 实例.
- 创建并分配 IAM 角色.
- 从 ClickHouse Connect Sink 的 发布页面 下载
jar
文件。 - 在 Amazon MSK 控制台的 自定义插件页面 上安装下载的
jar
文件。 - 如果连接器与公共 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
性能调整
提高性能的一种方法是调整批处理大小和从 Kafka 中获取的记录数量,方法是在**worker** 配置中添加以下内容
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 集群位于具有连接到互联网的私有 NAT 的私有子网中。下面提供了有关如何设置此功能的说明。请注意,支持公共子网,但不建议使用,因为需要不断将弹性 IP 地址分配给您的 ENI,AWS 在此处提供了更多详细信息
- **创建私有子网:**在您的 VPC 中创建一个新的子网,将其指定为私有子网。此子网不应直接访问互联网。
- **创建 NAT 网关:**在您的 VPC 的公共子网中创建一个 NAT 网关。NAT 网关使私有子网中的实例能够连接到互联网或其他 AWS 服务,但阻止互联网与这些实例建立连接。
- **更新路由表:**添加一条将互联网出站流量引导到 NAT 网关的路由
- **确保安全组和网络 ACL 配置:**配置您的 安全组 和 网络 ACL(访问控制列表) 以允许与您的 ClickHouse 实例之间相关的流量。
- 对于 ClickHouse Cloud,请将您的安全组配置为允许在端口 9440 和 8443 上进行入站流量。
- 对于自托管 ClickHouse,请将您的安全组配置为允许在配置文件中指定的端口上进行入站流量(默认端口为 8123)。
- **将安全组附加到 MSK:**确保将这些路由到 NAT 网关的新安全组附加到您的 MSK 集群