基于ByConity的可观测平台实践
ByConity 是字节跳动基于 ClickHouse 发展出的存算分离的云原生数仓引擎,2023年1月正式发布开源 Beta 版本,今年7月,ByConity 正式发布1.0版本。
开源一周年之际,ByConity 已经获得了2100+的 Star 数,issue 数480+,用户60+,贡献者80+。2024年5月25日,ByConity 一周年线下 meetup 在北京召开。本期主题是《云原生数仓创新之路》,多位重磅嘉宾出席并分享了 ByConity 的最佳实践。
来自 MetaApp 的张少谦分享了 ByConity 在可观测性方面的应用。
2023 上半年,MetaApp 就开始使用 ByConity 替代 ClickHouse 做行为分析。目前,正在将 ByConity 引入到可观测平台相关的服务中。主要包括:容器日志、应用日志收集(客户端)和应用性能数据分析(客户端)。
整体的系统架构如下:
数据来源分两个部分,一部分是客户端埋点,另外一部分是容器日志:
- 客户端埋点是由 SDK 主动上报到日志服务,并且由日志服务写入 Kafka;
- 容器日志由 FluentBit 采集后写入 Kafka。
Kafka 内的日志由 ByConity 提供的 Kafka 引擎消费到 ByConity,最后各个平台查询 ByConity 的数据。
技术选型思路如下:
在技术选型时,MetaApp 一开始是用的 ElasticSearch,后在2021年转到了 ClickHouse,2024年才用上 ByConity。这3款都是业界比较常用的分析引擎:
- ES 是一款开源的分布式搜索和分析引擎,它是基于 Apache Lucene 搜索引擎构建而成,在搜索和分析领域被广泛使用
- ClickHouse 是一款在线分析处理的OLAP引擎,专门用于处理大规模数据集,由俄罗斯的 Yandex 开发。主要是用于处理大量数据并支持复杂的分析查询。它被广泛应用于需要实时分析海量数据的领域,如日志分析、数据仓库、实时报表等
- ByConity 是新一代的开源的云原生数据仓库,它采用计算-存储分离的架构,在满足数仓用户对资源弹性扩缩容,读写分离,资源隔离,数据强一致性等多种需求的同时,并提供优异的查询、写入性能。
但项目最后选择了 ByConity,则是因为它有独特的优势:
- 读写分离
读写完全隔离,在业务高峰期不会互相影响。
由于业务特性,在某些时候整体写入流量会比较高,同时在这个时候也是查询高峰期,在使用 ClickHouse 的时候写入和查询会影响,导致写入堆积并且查的很慢。ByConity 比较好的解决了这一点,读取 VW 和写入 VW 完全隔离开,互相不会造成影响。
- 存算分离
- 计算节点无状态,可根据使用情况进行扩缩容,保证稳定提供查询。
由于 Clickhouse 数据落在本地,对 Clickhouse 进行扩容时候,针对历史数据需要 resharding 或者等之前的数据过期,扩容成本非常高,ByConity 实现了存算分离,计算资源可以进行分钟级扩缩容,在某些查询高峰期可以随时多拉起一些 Pod,满足查询需求。
2. 多租户隔离,避免抢夺计算资源。
在实际场景中,不同功能可能有不同优先级,之前在使用 ClickHouse 的时候,可能会出现部分功能的查询直接把整个集群资源吃满,导致一些优先级高的查询无法执行。ByConity 可以针对不同表设置使用不同的查询资源组,甚至可以在查询的时候指定查询资源组,可以很好帮助我们保证高优先级业务正常运行。
3. 云上弹性伸缩,节省成本。
这两年 serverless 很火,各大云厂商都有对应的产品,比如阿里的 SAE 和火山的 VCI 等,ByConity 可以在云上部署通过和这些产品结合做到业务高峰期扩容,业务低峰期缩容。
- Kafka 引擎 low level 消费
支持 low level 模型消费,失败后数据不会重复。
ByConity 提供了开箱即用的写入连接器,相对于传统的 Flink、Spark 或自己开发的程序,会主动保存每个 partition 的消费信息,写入失败也不会出现重复等问题。
张少谦介绍,从 ClickHouse 更换至 ByConity,k8s 部署,运维更加方便了。同时,ByConity 支持分钟级扩容,方便业务高峰期随时拉起资源,稳定性大大提高。另外,在云上运行,MetaApp 采用了定时扩缩容的方案,节省下了40%的成本。
MetaApp 使用的服务运维主要有:
- 堆积监控
使用 Kafka Export 到处数据到 prometheus,然后使用 Grafana Alter 对接 IM 进行堆积报警规则,以及做成堆积看板。
- 消费错误监控
通过使用定时脚本查询 cnch_system.cnch_kafka_log 表,来发现消费过程中产生的错误,并将错误发送到 IM。
- 服务监控
通过 pod 监控报警等服务来发现服务出现崩溃、重启等情况。
最后,张少谦给大家分享了使用中遇到的一些常见问题和解决方式。
- 对象存储 QPS 和带宽使用很高
最开始测试 ByConity 时遇到一个问题,平常对象存储 QPS 非常高,最后发现是测试过程中开启了预加载并且开启最高级别预加载,这块可以根据实际情况来测试需要开启的预加载级别。
- 查询时出现 Reached timeout=30000ms @xxx.xxx.xxx.xx: While executing Remote 错误
由于服务资源是定时扩缩容并且 max_execution_time 设置太短,有时候业务流量超出预期可能导致合并来不及;还有表的 part 太多,可能导致查询超时,可以增加 part 发送时间。
同时,查询 system.cnch_parts 确认当前表的 part 个数,如果 part 个数很多(根据经验,超过5000已经算多),尝试提高合并速度或者尝试修改 brpc_data_parts_timeout_ms 参数大小。
- 合并过慢问题
如果遇到合并过慢,可以设置 enable_addition_bg_task=1 这个参数允许更多 merge 任务和调整,设置参数max_addition_bg_task_num 调整最大允许任务个数。这块如果有任务优先级建议可以对合并资源进行分组使用。
- 消费过慢问题
- 首先可以查看一下 cnch_kafka_log 表中是否存在消费异常,比如内存溢出之类的,根据具体情况调整.
- 可以尝试调大消费者个数,消费者个数最好能被 partition 个数整除。
- 还可以查看机器监控,看一下 kafka 引擎资源组的使用资源是否均匀,是否存在有的使用很高有的使用很低,可以通过设置 kafka_cnch_schedule_mode 来调整 consumer 分配模式,这里推荐设置为 least_consumers, 保证尽可能均匀。当前使用这个模式也可能存在一个问题,如果多个表使用一个资源组,并且节点个数不能被 consumer 个数整除,由于循环分配特性,那么可能有一个节点上运行的 consumer 远远超过其它节点。排查消费异常,如果在 exception 中发现经常出现 memory limit 则可以适当调小 kafka_max_block_size 参数值。
- k8s 部署如何外部访问 server
如果项目是在 k8s 部署,可能会遇到外部访问 server 的需求。
这里有两种情况:
如果是在云厂商部署,可以直接给 server 挂载一个 LB 并且指定9000/8123端口即可;
如果在机房部署,则可以采用 NodePort 方式允许外部访问。
张少谦表示,未来,MetaApp 将把可观测平台融合在一起,实现统一 TraceID,使客户端日志和服务端日志能够关联起来。同时,MetaApp 也会继续探索 ByConity 在监控指标方面以及其他方面的应用。
更多直播精彩内容,请点击链接观看:
https://www.bilibili.com/video/BV1w14212714/?spm_id_from=333.999.0.0&vd_source=71f3be2102fec1a0171b49a530cefad0

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
自由软件基金会任命三名新董事会成员
自由软件基金会 (FSF) 宣布增加了三名新董事会成员 John Gilmore、Christina Haralanova 和 Maria Chiara Pievatolo,自 2024 年 6 月 23 日起开始任职。 “此次自由软件基金会董事会增加三名新成员,是经过对 83 个提名进行审查、让 10 名候选人参加自由软件基金会准会员论坛讨论、在现任董事会成员与所有候选人之间进行数月谈话,以及对自由软件基金会员工和支持者的意见进行审查后的结果。之后,于 2024 年 3 月 23 日开始为期三个月的临时董事会成员任期。” 其中,John Gilmore 是 Cygnus Support 创始人之一,早期曾为 GNU 软件提供自由软件支持,“他是计算机行业的先驱,在应用程序设计、系统编程、语言实施、管理和投资等方面拥有三十年的经验”。 Christina Haralanova 是一名学术研究员、自由软件活动家、技术培训师和大学讲师,“一直致力于技术、女权主义和社会正义的交叉领域”。 Maria Chiara Pievatolo 则是一名政治哲学教授,是意大利最早的开放("自由")学术原...
- 下一篇
ByConity 在抖音集团内行为分析 EB 级场景的最佳实践
ByConity是字节跳动基于ClickHouse发展出的存算分离的云原生数仓引擎,2023年1月正式发布开源Beta版本,今年7月,ByConity正式发布1.0版本。 开源一周年之际,ByConity已经获得了2100+的Star数,issue数480+,用户60+,贡献者80+。2024年5月25日,ByConity一周年线下meetup在北京召开。本期主题是《云原生数仓创新之路》,多位重磅嘉宾出席并分享了 ByConity的最佳实践。 来自抖音集团的行为分析平台的何皓星分享了使用ByConity解决线上业务场景和和自身架构迭代的实践经验。 何皓星介绍,抖音内部有自己的数据分析产品——DataFinder,提供了一站式的数据采集、数仓分析、结果展示平台,支持产品使用行为数据实时采集和自助建模、分析、结果分享、数据监控,运营分析师上手就能用。目前,在抖音内部已经广泛使用,为包括抖音、今日头条、西瓜视频、剪映在内的上千个产品提供分析能力,EB级别上报量大数据量达秒级响应。 起初,字节内使用Kylin & Spark SQL等架构支持业务,但当产品、维度变多,他们遇到了数据支撑...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- Eclipse初始化配置,告别卡顿、闪退、编译时间过长
- Springboot2将连接池hikari替换为druid,体验最强大的数据库连接池
- Windows10,CentOS7,CentOS8安装Nodejs环境
- SpringBoot2初体验,简单认识spring boot2并且搭建基础工程
- CentOS8安装Docker,最新的服务器搭配容器使用
- SpringBoot2整合Thymeleaf,官方推荐html解决方案
- Docker使用Oracle官方镜像安装(12C,18C,19C)
- CentOS7,8上快速安装Gitea,搭建Git服务器
- 设置Eclipse缩进为4个空格,增强代码规范
- SpringBoot2全家桶,快速入门学习开发网站教程