将 Kafka 与 ClickHouse 集成
Apache Kafka 是一个开源的分布式事件流平台,被数千家公司用于高性能数据管道、流分析、数据集成和关键任务应用程序。在大多数涉及 Kafka 和 ClickHouse 的情况下,用户都希望将基于 Kafka 的数据插入到 ClickHouse 中。下面我们概述了两种用例的几种选项,并确定了每种方法的优缺点。
选择一个选项
将 Kafka 与 ClickHouse 集成时,您需要就所使用的高级方法做出早期的架构决策。我们在下面概述了最常见的策略
ClickPipes for Kafka (ClickHouse Cloud)
- ClickPipes 提供了将数据摄取到 ClickHouse Cloud 中最简单和最直观的方式。今天支持 Apache Kafka、Confluent Cloud 和 Amazon MSK,并且很快将推出更多数据源。
第三方基于云的 Kafka 连接
-
Confluent Cloud - Confluent 平台提供了一个选项,可以上传和在 Confluent Cloud 上运行 ClickHouse Connector Sink,或者使用Confluent Platform 的 HTTP Sink Connector,它通过 HTTP 或 HTTPS 将 Apache Kafka 与 API 集成。
-
Amazon MSK - 支持 Amazon MSK Connect 框架,将数据从 Apache Kafka 集群转发到外部系统,例如 ClickHouse。您可以在 Amazon MSK 上安装 ClickHouse Kafka Connect。
-
Redpanda Cloud - Redpanda 是一个与 Kafka API 兼容的流数据平台,可以用作 ClickHouse 的上游数据源。托管云平台 Redpanda Cloud 通过 Kafka 协议与 ClickHouse 集成,从而为流分析工作负载实现实时数据摄取
自管理 Kafka 连接
- Kafka Connect - Kafka Connect 是 Apache Kafka 的一个免费开源组件,它充当 Kafka 和其他数据系统之间简单数据集成的中心数据枢纽。连接器提供了一种简单的方法,可以可扩展且可靠地将数据流式传输到 Kafka 和从 Kafka 流式传输数据。源连接器将数据从其他系统插入到 Kafka 主题,而 Sink 连接器将数据从 Kafka 主题传递到其他数据存储(如 ClickHouse)。
- Vector - Vector 是一个与供应商无关的数据管道。凭借从 Kafka 读取和向 ClickHouse 发送事件的能力,这代表了一种强大的集成选项。
- JDBC Connect Sink - Kafka Connect JDBC Sink 连接器允许您将数据从 Kafka 主题导出到任何带有 JDBC 驱动程序的关系数据库
- 自定义代码 - 在需要自定义处理事件的情况下,使用 Kafka 和 ClickHouse 的各自客户端库的自定义代码可能是合适的。这超出了本文档的范围。
- Kafka table engine 提供了 Native ClickHouse 集成(在 ClickHouse Cloud 上不可用)。此表引擎从源系统拉取数据。这要求 ClickHouse 能够直接访问 Kafka。
- 带有命名集合的 Kafka 表引擎 - 使用命名集合提供了与 Kafka 的原生 ClickHouse 集成。这种方法允许安全连接到多个 Kafka 集群,集中配置管理并提高可扩展性和安全性。
选择一种方法
这归结为几个决策点
-
连接性 - 如果 ClickHouse 是目标,Kafka 表引擎需要能够从 Kafka 拉取数据。这需要双向连接。如果存在网络隔离,例如 ClickHouse 在云端,而 Kafka 是自管理的,您可能会犹豫是否出于合规性和安全原因而删除此隔离。(ClickHouse Cloud 目前不支持此方法。)Kafka 表引擎利用 ClickHouse 自身的资源,为消费者利用线程。由于资源限制,或者您的架构师可能更喜欢关注点分离,因此可能无法将此资源压力施加到 ClickHouse 上。在这种情况下,Kafka Connect 等工具(作为单独的进程运行,可以部署在不同的硬件上)可能更可取。这允许负责拉取 Kafka 数据的进程独立于 ClickHouse 进行扩展。
-
云托管 - 云供应商可能会对其平台上可用的 Kafka 组件设置限制。请按照本指南探索每个云供应商的推荐选项。
-
外部丰富 - 虽然可以在插入 ClickHouse 之前通过使用物化视图的 select 语句中的函数来操作消息,但用户可能更喜欢将复杂的丰富功能移至 ClickHouse 外部。
-
数据流方向 - Vector 仅支持将数据从 Kafka 传输到 ClickHouse。
假设
上面链接的用户指南假设以下内容
- 您熟悉 Kafka 的基本原理,例如生产者、消费者和主题。
- 您已为这些示例准备好了一个主题。我们假设所有数据都以 JSON 格式存储在 Kafka 中,但如果使用 Avro,原理仍然相同。
- 我们在示例中使用了出色的 kcat(以前称为 kafkacat)来发布和消费 Kafka 数据。
- 虽然我们引用了一些用于加载示例数据的 python 脚本,但您可以随意调整示例以适应您的数据集。
- 您大致熟悉 ClickHouse 物化视图。