Skip to main content

概述

本文将介绍如何将数据从 Kafka topic 发送到 ClickHouse 表。我们将使用 Wiki 的最近更改 feed,它提供了一个事件流,表示 Wikimedia 各个站点上的更改。步骤包括:
  1. 如何在 Ubuntu 上部署 Kafka
  2. 将数据流摄取到 Kafka topic 中
  3. 创建一个订阅该 topic 的 ClickHouse 表

1. 如何在 Ubuntu 上部署 Kafka

  1. 创建一个 Ubuntu ec2 实例,并通过 SSH 登录该实例:
  1. 安装 Kafka (请按照此处的说明操作:https://www.linode.com/docs/guides/how-to-install-apache-kafka-on-ubuntu/) :
  1. 启动 ZooKeeper:
  1. 打开一个新的终端并启动 Kafka:
  1. 打开第三个终端,并创建名为 wikimedia 的 topic:
  1. 你可以通过以下方式验证其是否已成功创建:

2. 将 Wikimedia Stream 摄取到 Kafka

  1. 首先需要准备一些工具:
  1. 数据通过一条巧妙的 curl 命令发送到 Kafka:该命令会抓取最新的 Wikimedia 事件,解析其中的 JSON 数据,并将其发送到 Kafka topic:
  1. 您可以“describe”这个 topic:
  1. 让我们通过消费一些事件来确认一切是否正常运行:
  1. Ctrl+c 结束前一个命令。

3. 将数据摄取到 ClickHouse

  1. 传入的数据如下所示:
  1. 我们需要使用 Kafka 表引擎从 Kafka topic 中拉取数据:
  1. 不知为何,Kafka 表引擎似乎会把公开的 ec2 URL 转换成私有 DNS 名称,所以我不得不把它添加到本地的 /etc/hosts 文件中:
  1. 你可以从 Kafka 表中读取数据,只需启用一个设置:
返回的行应会根据 wikiQueue 表中定义的列正确解析:
  1. 我们需要一个 MergeTree 表来存储这些传入的事件:
  1. 让我们定义一个 materialized view:当 Kafka 表发生 insert 时,它会被触发并将数据发送到 rawEvents 表:
  1. 你应该几乎立刻就能看到数据开始进入 rawEvents
  1. 我们来查看其中几行数据:
  1. 来看看传入了哪些类型的事件:
让我们基于当前的 materialized view 再定义一个 materialized view。我们将按分钟跟踪一些聚合统计信息:
  1. 我们需要使用 -Merge 函数来查看结果:
最后修改于 2026年7月3日