ClickHouse实践

ClickHouse在字节跳动的实时场景的应用和优化

视频地址:技术沙龙:ClickHouse 在实时场景的应用和优化

早期实践

流程

image.png

  1. 数据存储到HDFS或者hive中
  2. 由Spark或ETL工具,切割数据并进行预处理,然后再存储在HDFS上;
  3. 通过外部应用调用将文件导入到ClickHouse的Shard中;
  4. 由外部事务调用是否整个集群的数据完全写入到ClickHouse Shard中,如果失败,一般会需要回滚;
  5. 分析平台去ClickHouse中查询数据

    出现的问题

    image.png

  6. 分布式表有缓存区,如果中途宕机,可能出现数据的重复写入,导致数据膨胀;

  7. 如果由业务方直接写入,可能会由于业务方的频繁操作,导致压力过大,拖垮系统;

    典型案例

    推荐系统实时指标

    image.png
  • AB指标:指的是AB实验

image.png

常规方案

image.png

Kafka Engine方案

image.png
Kafka Engine机制解析
image.png
一个简单的例子:
image.png

最终方案

image.png

改进1:异步辅助索引

Bloom Filter -> Bitmap Index
image.png

问题:多消费性能不及预期

image.png

改进2:Kafka Engine内部支持多个消费线程

image.png

问题:主备节点是否都应该写入数据

image.png
image.png

改进3:故障处理

image.png改进3:主动切换到正常节点消费
image.png
image.png

广告投放实时数据

业务背景
image.png
业务痛点:
image.png
社区的解决方案:
image.png
改进1:
image.png
image.png
问题:
image.png
改进:
image.png
image.png

实践 & 经验

1、搭建kafka -> ClickHouse接入平台

image.png
image.png
image.png
image.png

2、敏捷BI平台直接支持将Kafka作为数据集

image.png

3、诊断能力增强

image.png
image.png
image.png
平台上提供消费异常的监控和查询。

4、实用的运维SQL

image.png

总结

image.png

未来展望和计划

image.png
image.png
image.png

Q & A

  1. 将一下实时场景ES和ClickHouse的对比
    1. ES适应于点查,ClickHouse适应大批量查询
  2. 如何提高消费Kafka的速度?
    1. 提高消费者的数量
  3. kafka的消费和刷盘的监控
    1. 监控节点的内存,如果占用过多,强制刷盘
  4. 如何处理Kafka中的脏数据
    1. 通知业务方,让业务方解决处理(丢弃)