跳到主要内容
跳到主要内容

将 Amazon MSK 与 ClickHouse 集成

先决条件

我们假设:

ClickHouse 的官方 Kafka 连接器与 Amazon MSK

收集您的连接详情

要通过 HTTP(S) 连接到 ClickHouse,您需要以下信息:

  • 主机端口:通常,当使用 TLS 时端口为 8443,当不使用 TLS 时端口为 8123。

  • 数据库名称:开箱即用时,有一个名为 default 的数据库,请使用您要连接的数据库名称。

  • 用户名密码:开箱即用时,用户名为 default。请使用适合您用例的用户名。

您的 ClickHouse Cloud 服务的详细信息可在 ClickHouse Cloud 控制台中获得。 选择您要连接的服务并点击 连接

ClickHouse Cloud 服务连接按钮

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

ClickHouse Cloud HTTPS 连接详细信息

如果您使用的是自管理的 ClickHouse,连接详细信息由您的 ClickHouse 管理员设置。

步骤

  1. 确保您熟悉 ClickHouse Connector Sink
  2. 创建一个 MSK 实例
  3. 创建并分配 IAM 角色
  4. 从 ClickHouse Connect Sink 发行页面 下载一个 jar 文件。
  5. 在 Amazon MSK 控制台的 自定义插件页面 上安装下载的 jar 文件。
  6. 如果连接器与公共 ClickHouse 实例通信, 启用互联网访问
  7. 在配置中提供主题名称、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

性能调优

提高性能的一种方法是通过在 worker 配置中添加以下内容来调整从 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

您可以在官方的 KafkaAmazon MSK 文档中找到更多详细信息(包括实现和其他考虑事项)。

有关 MSK Connect 的网络说明

为了使 MSK Connect 连接到 ClickHouse,我们建议将您的 MSK 集群放在连接了私有 NAT 的私有子网中,以便获得互联网访问权限。有关如何设置此内容的说明如下。请注意,公共子网支持但不推荐使用,因为需要不断将弹性 IP 地址分配给您的 ENI,AWS 在此提供更多详细信息

  1. 创建私有子网: 在您的 VPC 中创建一个新的子网,并将其指定为私有子网。此子网不应直接连接到互联网。
  2. 创建 NAT 网关: 在您的 VPC 的公共子网中创建一个 NAT 网关。NAT 网关允许私有子网中的实例连接到互联网或其他 AWS 服务,但防止互联网与这些实例建立连接。
  3. 更新路由表: 添加一条将互联网流量指向 NAT 网关的路由。
  4. 确保安全组和网络 ACL 配置: 配置您的 安全组网络 ACL(访问控制列表),以允许与您的 ClickHouse 实例之间相关的流量。
    1. 对于 ClickHouse Cloud,配置您的安全组以允许在 9440 和 8443 端口上的入站流量。
    2. 对于自托管的 ClickHouse,配置您的安全组以允许进入配置文件中指定的端口(默认是 8123)上的入站流量。
  5. 将安全组附加到 MSK: 确保这些路由到 NAT 网关的新安全组已附加到您的 MSK 集群。