人类的悲欢并不相通,我只觉得他们吵闹
引言
市面上比较流行的KFC套餐中的C就是ClickHouse,很多做实时和架构的同学都比较熟悉这个工具了,我会结合一下,部署和在业务中的使用简单的聊一下,以及之后为什么要抛弃CK。
ClickHouse是俄罗斯第一大搜索引擎Yandex开发的列式储存的OLAP数据库,单机和集群的查询性能快到飞起,OLAP中单表查询最快的工具,没有之一。今日头条、腾讯、携程、快手都在使用CK,对PB级别的数据进行分析。
优点:
- 1.真正的面向列的DBMS
- 2.数据高效压缩=>0.2
- 3.磁盘存储的数据=>减少内存使用
- 4.多核并行处理=>多核多节点并行化大型查询
- 5.在多个服务器上分布式处理
- 6.SQL语法支持
- 7.数据有序存储=>ClickHouse支持在建表时,指定将数据按照某些列进行sort by。
- 8.主键索引+ 稀疏索引
搭建(docker)
Dockerfile
FROM centos:7
MAINTAINER clickhouse
RUN yum install -y curl
RUN curl -s https://packagecloud.io/install/repositories/Altinity/clickhouse/script.rpm.sh | bash
RUN yum install -y clickhouse-server clickhouse-client
RUN mkdir -p /var/clickhouse/log
RUN mkdir -p /var/clickhouse/data
ADD clickhouse-start.sh /
ENTRYPOINT ["sh","/clickhouse-start.sh"]
clickhouse-start.sh
#!/bin/bash
set -e
exec /etc/init.d/clickhouse-server start & tail -f /dev/null
config.xml 基础配置,不多做赘述,这里把log和data的目录改成/var/clickhouse/…,不懂私聊我
metrika.xml 可以理解为集群的配置,以高可用的一种 3个分片,2个副本为例
简单说一下这个这个架构,一般情况先搭个单机,不用考虑这些问题,如果要搭建一个高可用的集群,比较靠谱的是有分片有副本,ck采用的是指定一个分配指定两个副本的方式,比如my_cluster集群的第一个shard是由ck01和ck02构成的,即一个分片由两个副本构成,然后在ck01上指定宏变量的macros是 01 01
机器 | shard | replica |
---|---|---|
ck01 | 01 | 01 |
ck02 | 01 | 02 |
ck03 | 02 | 01 |
ck04 | 02 | 02 |
ck05 | 03 | 01 |
ck06 | 03 | 02 |
<yandex>
<clickhouse_remote_servers>
<my_cluster>
<shard>
<internal_replication>true</internal_replication>
<replica>
<host>ck01</host>
<port>9000</port>
</replica>
<replica>
<host>ck02</host>
<port>9000</port>
</replica>
</shard>
<shard>
<internal_replication>true</internal_replication>
<replica>
<host>ck03</host>
<port>9000</port>
</replica>
<replica>
<host>s-hadoop-log04</host>
<port>9000</port>
</replica>
</shard>
<shard>
<internal_replication>true