最近,Bytes,数字服务和智能技术品牌火山发动机已正式发布了“ Bytehouse”作为Clickhouse Enterprise Edition,以解决开源技术的高成本操作的痛苦点。同时,它提供商业产品和企业级技术支持服务。
作为中国最大的点击室用户,内部跳跃中的点击节点总数超过15,000,数据管理总量超过600pb,最大的集群量表超过2,400个节点。总而言之,许多业务分析的分析Byte Beating的增长基于基于ClickHouse的查询引擎。在创建Clickhouse Enterprise版本“ Bytehouse”的旅程中,我们已经探索和促进了很多年。今天,我们将使用ClickHouse与您分享两个典型的应用程序和优化案例。
在内部“ AB实验”字节击败的应用中,尤其是在验证建议算法和功能优化的效果方面,公司的内部AB实验平台提供了t+1的离线实验指标,并且建议系统需求更快地观察算法模型或某个功能的启动效果。因此
字节,Clickhouse,Druid,Elastic Search,Kylin等内部有许多分析引擎。分析用户的需求后,他们选择了ClickHouse:
每种产品都有自己适当的场景,但是在当前场景的要求下,Clickhouse更合适
确认技术选择后,有两种方法可以比较计划的比较:
方案1:KAFKA + FLINK + CLICKHOUSE每个组件的每个组件的责任清楚地分配,潜在的可伸缩性需要额外的资源,难以写入频率,难以处理节点故障,高维护费用2:clickhouse built bualte -in kafka kafka消费者threadirect主题的消耗,该体系结构简单且数据传输处理逻辑在发动机的侧面,这略微增加了发动机的维护负担。缺乏Flink的ETL能力,外部写作的最终解决方案和效果无法控制,并且在技术堆栈上。我们最终采用了Kafka引擎解决方案,即,在消费者中构建的ClickHouse来消费Kafka。
除了技术选择和实施方案外,我们在支持推荐系统的真实时间数据时遇到了许多问题。推荐系统生成的数据量的最大问题越来越大。越大,主要问题遇到了:
挑战:在大量辅助跳跃索引的情况下,索引的构造严重影响了吞吐量。
解决方案:异步构造索引。
社区版本实施中的具体逻辑如下:
用户需要确保列数据的构建后,用户可以正常查询,字节屋已同步以完成前两个步骤。第三步是将构建部分放入构造队列的异步索引中,并从背景线程中构建索引文件。
效果:更改为异步后,总体写作吞吐量可以增加约20%。
挑战:社区版本的Kafka表,内部只会有一个消费者默认值,它将浪费资源并且不符合性能要求
尝试优化过程
解决方案:支持多线程消费。
前面提到的优化方法并不令人满意,最终决定转换Kafka引擎以在内部支持多个消费者线程。简而言之,每个线程都容纳一个消费者,然后每个消费者负责他们自己的数据分析,这些数据是编写的,这样,它等同于在表中执行多个插入查询。
效果:多线程消费者的多线消费者消费写作表是由多线程消费者实现的,并且写作的性能接近线性改进。
挑战:在主模式下,如果两个节点都是同时写入的,则一旦节点失败,新打开的节点恢复过程容易出现各种问题,包括性能下降,无法确保碎片,最严重的情况可能会导致导致最严重的可能导致最严重的导致最严重的导致最严重的导致最严重的可能导致最严重的可能导致最严重的严重可能导致最严重的严重性可能导致最严重的情况可能导致最严重的情况可能导致最严重的情况可能导致最严重的情况可能导致最严重的情况,这可能导致最严重的原因可能导致最严重的导致最严重的导致最严重的导致最严重的导致最严重的导致最严重的导致最严重的导致最严重的情况严重可能导致最严重的可能导致最严重的严重可能导致最严重的严重可能导致最严重的严重可能导致最严重的严重可能导致最严重的严重性,这可能会导致最严重的严重性导致最严重的可能导致最严重的可能导致最严重的严重可能导致最严重的严重可能导致最严重的严重可能导致最严重的严重可能导致最严重的严重性
解决方案:确保只有一个主要节点将在主模式中写入。
为了避免两个节点消耗的数据,改进的Kafka引擎的版本是指基于Zookeeper的ReplicatedMergetree的主要逻辑。对于每对副本的一对消费者,他们将尝试完成该主要逻辑在Zookeeper上进行选择,以确保选举成为要消费的主要节点,并且另一个节点将处于待机状态。
使用这样的单个节点消耗机制,系统将检测复制表的数据是否完成。如果数据不完整,则意味着消费者将无法正常服务。在此时间,数据将不会写给缺乏数据的节点。对于查询,因为查询路由机制不会使缺乏数据的节点上的查询路由,因此可以始终查询最新数据。
效果:改进Kafka引擎,以确保在主模式下只有一个节点消费者数据。即使节点故障也保证了在新节点恢复过程中求解数据完整性的问题。
关于广告数据的第二个典型案例通常是需要查看广告的运营商的真正时间效应。到业务的特征,当天生成的数据通常涉及很多天的数据。此系统最初是基于DRUID实施的。,德鲁伊将在这个场景中遇到一些困难:
困难1:实际 - 时间数据是由于大量时间分区(历史记录3个月)引起的。生成了许多细分市场。刷牙后,还需要合并。通过调整block_ize,可以增加吞吐量,同时增加吞吐量。缓冲引擎的困难2:业务数据的维度也非常非常许多尺寸,数据粒径非常好,并且德鲁伊的前聚集几乎没有直接的消耗细节。这仍然是解决问题的问题
问题与挑战:社区提供了缓冲引擎来解决单一写作中产生太多零件的问题,但是与ReplicatedMergetree合作无法合作,可以一起工作。查询将是不一致的。
解决方案:
缓冲引擎进行了以下调整和优化:
首先,请确保一对副本中只有一个节点,因此只有一个节点具有带有两个副本的两个缓冲表的数据。如果查询是在不消耗的情况下发送到副本的,那么特殊的查询逻辑会可以构建,并从另一个副本的缓冲区表中读取数据。
效果:增强的缓冲引擎,同时解决了缓冲引擎和ReplicatedMergetree的问题。
挑战:ClickHouse缺乏交易支持。在部分内容中写了一批写作后,可能会有停机时间,因为在没有恢复没有交易保证后可能会有损失或重复消费。
解决方案:
参考德鲁伊的KIS计划管理Kafka偏移本身,以实现单批量消费/写作的原子语义:实现绑定偏移和零件数据的选择,从而提高消费的稳定性。默认情况下。该交易负责编写零件数据,并将其偏移到磁盘中。如果发生故障,则交易将返回偏移,并重新消费。
效果:它确保每个插入数据的原子量并增强数据消耗的稳定性。
实际 - 时间数据分析是Clickhouse的优势场景。结合了Byte Beating的真实时间数据方案的特征,我们优化了Clickhouse并将这些功能促进了Bytehouse。基于自我开发的技术优势和自我开发技术的大规模经验,Bytehouse带来了Bytehouse的大规模经验。对公司的大数据团队的新选择和支持,以应付复杂而可变的业务需求,以及高速增长数据方案。未来,Bytehouse将继续使用字节和外部实践来输出用户,以帮助公司更好地构建交互式大数据分析平台,并与Clickhouse开发人员社区共享经验,以共同促进Clickhouse社区的开发。
联系我们(中国产品官方网站):https://bytehouse.cn/product/enterprise-clickhouse