<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/">
  <channel>
    <title>ClickHouse on LeoChu Space</title>
    <link>https://leochu.work/blog/tags/clickhouse/</link>
    <description>Recent content in ClickHouse on LeoChu Space</description>
    <generator>Hugo</generator>
    <language>zh-cn</language>
    <lastBuildDate>Sun, 08 Jan 2023 00:00:00 +0000</lastBuildDate>
    <atom:link href="https://leochu.work/blog/tags/clickhouse/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>Kafka数据导入ClickHouse</title>
      <link>https://leochu.work/blog/tech/bigdata/kafka%E6%95%B0%E6%8D%AE%E5%AF%BC%E5%85%A5clickhouse/</link>
      <pubDate>Sun, 08 Jan 2023 00:00:00 +0000</pubDate>
      <guid>https://leochu.work/blog/tech/bigdata/kafka%E6%95%B0%E6%8D%AE%E5%AF%BC%E5%85%A5clickhouse/</guid>
      <description>&lt;h2 id=&#34;1kafka中数据导入clickhouse的标准流程&#34;&gt;1.Kafka中数据导入ClickHouse的标准流程&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;在ClickHouse中建立Kafka Engine 外表，作为Kafka数据源的一个接口&lt;/li&gt;
&lt;li&gt;在ClickHouse中创建普通表(通常是MergeTree系列）存储Kafka中的数据&lt;/li&gt;
&lt;li&gt;在ClickHouse中创建Materialized View, 监听Kafka中的数据，并将数据写入ClickHouse存储表中&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;上述三个步骤，就可以将Kafka中的数据导入到ClickHouse集群中。&lt;/p&gt;
&lt;h2 id=&#34;2-kafka数据导入clickhouse详细步骤&#34;&gt;2. Kafka数据导入ClickHouse详细步骤&lt;/h2&gt;
&lt;p&gt;ClickHouse 提供了Kafka Engine 作为访问Kafka集群的一个接口（数据流）。有了这个接口后，导入数据就很方便了，具体步骤如下：&lt;/p&gt;
&lt;h3 id=&#34;步骤1创建kafka-engine&#34;&gt;步骤1：创建Kafka Engine&lt;/h3&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-sql&#34; data-lang=&#34;sql&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;CREATE&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;TABLE&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;source&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;(
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#f92672&#34;&gt;`&lt;/span&gt;ts&lt;span style=&#34;color:#f92672&#34;&gt;`&lt;/span&gt; DateTime, 
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#f92672&#34;&gt;`&lt;/span&gt;tag&lt;span style=&#34;color:#f92672&#34;&gt;`&lt;/span&gt; String, 
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#f92672&#34;&gt;`&lt;/span&gt;message&lt;span style=&#34;color:#f92672&#34;&gt;`&lt;/span&gt; String
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;ENGINE &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; Kafka()
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;SETTINGS kafka_broker_list &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;172.19.0.47:9092&amp;#39;&lt;/span&gt;, 
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;         kafka_topic_list &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;tag&amp;#39;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;         kafka_group_name &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;clickhouse&amp;#39;&lt;/span&gt;, 
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;         kafka_format &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;JSONEachRow&amp;#39;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;         kafka_skip_broken_messages &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;         kafka_num_consumers &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;2&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;必选参数：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;kafkabrokerlist: 这里填写Kafka服务的broker列表，用逗号分隔&lt;/li&gt;
&lt;li&gt;kafkatopiclist: 这里填写Kafka topic,多个topic用逗号分隔&lt;/li&gt;
&lt;li&gt;kafkagroupname：这里填写消费者group名称 &lt;/li&gt;
&lt;li&gt;kafkaformat__:Kafka数据格式, ClickHouse支持的Format, 详见这里 可选参数： &lt;/li&gt;
&lt;li&gt;kafkaskipbrokenmessages：填写大于等于0的整数，表示忽略解析异常的Kafka数据的条数。如果出现了N条异常后，后台线程结束，Materialized View会被重新安排后台线程去监听数据 &lt;/li&gt;
&lt;li&gt;kafkanumconsumers_: 单个Kafka Engine 的消费者数量，通过增加该参数，可以提高消费数据吞吐，但总数不应超过对应topic的partitions总数&lt;/li&gt;
&lt;li&gt;kafkarowdelimiter: 消息分隔符  &lt;/li&gt;
&lt;li&gt;kafkaschema__:对于kafkaformat需要schema定义的时候，其schema由该参数确定&lt;/li&gt;
&lt;li&gt;kafkamaxblocksize: 该参数控制Kafka数据写入目标表的Block大小，超过该数值后，就将数据刷盘。&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;步骤2创建存储kafka数据的目标表该表就是最终存储kafka数据-本文中采用mergetree来存储kafka数据&#34;&gt;步骤2：创建存储Kafka数据的目标表，该表就是最终存储Kafka数据 本文中，采用MergeTree来存储Kafka数据：&lt;/h3&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-sql&#34; data-lang=&#34;sql&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;CREATE&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;TABLE&lt;/span&gt; target
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;(
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#f92672&#34;&gt;`&lt;/span&gt;ts&lt;span style=&#34;color:#f92672&#34;&gt;`&lt;/span&gt; DateTime, 
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#f92672&#34;&gt;`&lt;/span&gt;tag&lt;span style=&#34;color:#f92672&#34;&gt;`&lt;/span&gt; String
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;ENGINE &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; MergeTree()
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;PARTITION &lt;span style=&#34;color:#66d9ef&#34;&gt;BY&lt;/span&gt; toYYYYMM(ts)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;ORDER&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;BY&lt;/span&gt; tag
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id=&#34;步骤3创建metrialized-view-抓取数据&#34;&gt;步骤3：创建Metrialized View 抓取数据&lt;/h3&gt;
&lt;p&gt;本文中，采用如下语句创建MV:&lt;/p&gt;</description>
    </item>
  </channel>
</rss>
