韩国互联网巨头 NAVER 如何借助 StarRocks 实现实时数据洞察

news2025/3/6 8:07:41

作者:

Youngjin Kim Team Leader, NAVER

Moweon Lee Data Engineer, NAVER

导读:开源无国界,在“StarRocks 全球用户精选案例”专栏中,我们将介绍韩国互联网巨头 NAVER 的 StarRocks 实践案例。

NAVER 成立于 1999 年,是著名社交软件 LINE 的母公司,世界第五大搜索引擎网站 ,也是韩国最大的搜索引擎和门户网站、韩国市值最高的互联网公司。业务遍布韩国、日本、中国台湾及东南亚 。

从 ClickHouse 迁移至 StarRocks 后,NAVER 在多表 JOIN 处理上取得了显著优化。StarRocks 提升了查询性能,实现无缝扩展,并构建了统一查询平台,兼容多种数据源。这些改进让 NAVER 能够提供实时洞察,支持其生态系统中的数据驱动决策。

作为 NAVER 的数据平台团队,我们为韩国领先的门户网站提供分析支持。NAVER 支持着超过 200 个互联服务的生态系统,包括搜索、电商、媒体以及人工智能驱动的应用。随着平台在韩国的普及,几乎所有韩国人都在使用我们的服务。与此同时,我们在 Iceberg Lakehouse 中积累了超过 20PB 的数据,并处理着韩国最高的数据流量之一。

为了提供流畅的用户体验和及时的决策支持,我们的分析系统必须提供实时洞察,处理复杂的指标,并能够灵活扩展以应对不断增长的流量。

在本文中,我们将分享如何应对这些挑战,我们实施了哪些策略来提升分析能力,以及在这一过程中取得的关键成果。

推动 NAVER 决策制定的数据分析系统

在 NAVER,我们的分析系统是支撑两项关键任务的基石:

  1. 服务性能监控:确保服务高效运行,始终满足用户期望。

  2. 用户行为分析:洞察用户与服务的互动方式,推动数据驱动的决策。

我们的系统旨在支持内部决策制定人员和技术团队,例如优化服务性能的工程师或制定战略的高管。为实现这一目标,我们处理和分析大量日志数据,包括用户代理(user agents)、服务 URL 和点击流(clickstreams),将原始数据转化为可执行的洞察,推动 NAVER 不断前进。

原有技术栈—— ClickHouse 所带来的挑战

在构建第一个版本的分析平台时,我们希望能够快速搭建,因此选择了ClickHouse 作为最初的解决方案。其快速的聚合查询性能让我们在初期能够迅速交付结果。然而,随着平台的发展,我们遇到了不少显著的限制。

固定维度

ClickHouse 缺乏 JOIN 支持,我们不得不依赖反范式化的表格(denormalized tables),这限制了用户只能使用固定维度,并阻碍了实时分析。面对众多数据源和表,扩展变得不切实际,导致我们只能提供一小部分数据服务。

可扩展性问题

另一个主要挑战是 ClickHouse 的扩展性。将数据均匀分配到各个节点需要手动干预,过程既耗时又缺乏自动化。随着数据量的增加,保持这种平衡变得愈加复杂,且资源消耗也越来越大。

有限的数据更新/删除

ClickHouse 通过“merge on read”来处理实时可变数据(mutable data)。尽管这种方式能保持数据的新鲜度,但它严重影响了性能,这是我们无法接受的。这一限制使得许多场景难以支持,甚至完全无法实现,特别是在需要可变数据和复杂架构的分析工作流中。

随着分析需求的扩展,尤其是涉及动态维度、原始数据查询和无缝可扩展性时,这些限制变得愈加明显。我们意识到,必须找到一个更强大、更灵活的解决方案来支撑 NAVER 的分析平台。

技术选型 — Trino、Pinot、Druid、StarRocks

我们对 Trino、Pinot、Druid 和 StarRocks 等几种解决方案进行了评估与基准测试,并根据以下标准进行了对比:

  • 多表 JOIN:能够处理跨多个表的复杂查询,而无需依赖反范式化。

  • 实时聚合查询性能:确保动态实时分析的查询执行快速高效。

  • 扩展能力:支持无缝地横向扩展,处理不断增长的数据量,同时保持最低的运维开销。

  • 数据更新:支持实时数据更新而不影响查询性能。

经过广泛测试,我们选择了StarRocks,原因如下:

  • 开箱即用的多表查询:StarRocks 原生支持复杂的多表 JOIN,消除了对反范式化表格的需求。

  • 联邦分析:通过与 Apache Iceberg 及其他开放格式的集成,我们能够无缝分析内部和外部数据集,提供统一且灵活的查询接口。

  • 卓越的聚合查询性能:即使在动态工作负载下,StarRocks 的聚合查询性能也能与 ClickHouse 媲美,甚至表现更优。

  • 云原生扩展性:其解耦的存储计算架构简化了扩展过程,支持跨节点共享数据,并实现高效的资源管理。

StarRocks 成为了满足我们不断发展需求的理想平台,使我们能够为 NAVER 构建一个强大、可扩展且高性能的分析系统。

迁移到 StarRocks

我们进行了全面的测试,使用真实查询和数据集来确定最佳资源配置,并验证 StarRocks 的性能表现。测试内容包括多列聚合查询、多表 JOIN 查询以及横向扩展性。

测试性能与资源配置

为了确定最佳资源配置,我们使用真实查询和数据测试了 StarRocks 的性能,并将其与 ClickHouse 在1小时、6小时、12小时、18小时和24小时的数据表现进行了对比。

多列聚合查询

第一个基准测试聚焦于多列 GROUP BY 查询。我们在两种配置下对 StarRocks 和 ClickHouse 进行了评估:Kubernetes 上的小型集群和大型集群。结果显示,StarRocks 在这两种配置下的表现始终优于 ClickHouse。

JOIN 查询

接下来,我们测试了 StarRocks 和 ClickHouse 在上述集群配置下处理多表 JOIN 操作的能力。

横向扩展性

我们的基础设施完全容器化并运行在 Kubernetes 上,因此,横向扩展性是确保性能一致性和优化成本的关键因素。

下图对比了 StarRocks 和 ClickHouse 在横向扩展时的表现:

如上图所示,随着资源的增加,StarRocks 表现出线性增长。这种扩展性使我们能够高效地处理不断增长的工作负载,同时保持可预测的性能。

资源配置

根据测试结果,我们对 StarRocks 基础设施进行了优化,配置如下:

  • 5个前端(FE)Pod:负责查询解析、计划和协调,确保高效执行。

  • 80个后端(BE)Pod:专门用于数据存储,每个 Pod 配备48个 CPU、50Gi 内存和 10TB 的 SSD 存储,确保快速可靠的数据访问。

  • 70个无状态计算节点(CN)Pod:根据需要动态分配计算资源,每个 Pod 配备48个 CPU 和 50Gi 内存,用于处理高查询量和复杂分析工作负载。

监控设置

监控是确保我们分析平台可靠性和性能的关键组件。通过 StarRocks,借助其文档中提供的预配置 Grafana 模板,监控设置变得更加简便。

该模板包含安装指南和预定义的仪表板,用于监控集群状态、合并状态以及 BE 和 FE 的各项指标。这些指标使我们能够实时监控系统的健康状况和性能,从而实现主动维护和快速解决问题。

通过物化视图进一步加速查询

为进一步提升查询性能,我们使用了 StarRocks 的物化视图。这些物化视图作为基础表的中间缓存,加速了查询执行,且无需手动维护。

StarRocks 中物化视图的关键特性包括:

  1. 查询重写:自动优化查询,在适用时使用物化视图,从而减少手动重写 SQL 的需求。

  2. 自动/定时刷新:通过最小的人工干预保持视图的最新状态,确保数据的一致性。

对于上述查询,我们创建了一个反范式化的物化视图来绕过 JOIN 操作,从而实现了 6 倍的性能提升。尤为值得一提的是,这些物化视图可以按需添加,且得益于 StarRocks 的查询重写功能,我们无需修改原始 SQL。这种灵活性使我们能够随时优化查询性能,同时保持工作流的简洁性。

迁移结果

迁移至 StarRocks 后,我们的分析平台在以下方面实现了显著提升:

  • 灵活的交互式查询

工程师现在可以直接使用 SQL 查询原始数据,与 ClickHouse 的固定预定义指标相比,提供了无与伦比的灵活性。

  • 全面提升的性能

多表JOIN和多列GROUP BY查询的执行速度大幅提升,即使在包含实时数据更新和删除的数据集上也是如此。

  • 统一查询平台

StarRocks 通过内部 catalog 提供高性能查询,利用 Apache Iceberg 的外部 catalog 管理外部数据,并通过 Apache Hive 外部 catalog 支持遗留的(legacy)孤立数据集,从而实现了所有数据源之间的无缝、高效整合。

  • 可扩展性

StarRocks 的横向扩展能力与 Kubernetes 结合,确保了处理能力的线性增长,使平台能够以具有成本效益的方式处理动态和异构的工作负载。

这些优势简化了我们的工作流程,使平台能够更高效、更灵活地支持 NAVER 不断发展的分析需求。

总结:

在 NAVER,高效处理多表 JOIN 的能力彻底改变了我们的分析平台。StarRocks 帮助我们突破了以往的限制,实现了更快的查询性能、无缝扩展性,以及与多元数据源集成的统一查询平台。这些改进使我们能够提供实时洞察,支持整个生态系统中的数据驱动决策。

未来规划

未来,我们计划进一步提升 StarRocks 的部署,具体包括以下几方面:

  1. 性能优化:优化分区策略,提升查询效率,尤其是针对基于时间戳的查询,实现更快的分析处理。

  2. 社区贡献:将我们的内部进展贡献给开源社区,帮助增强 StarRocks 的功能,为更广泛的用户群体提供支持。

  3. 更广泛的集成:扩大 StarRocks 的应用范围,处理更多外部数据集,利用 Apache Iceberg 进行动态和管控数据查询。

推荐阅读:StarRocks 全球用户精选案例

其他交流:StarRocks

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2310444.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

C语言学习笔记-初阶(30)深入理解指针2

1. 数组名的理解 在上一个章节我们在使用指针访问数组的内容时,有这样的代码: int arr[10] {1,2,3,4,5,6,7,8,9,10}; int *p &arr[0]; 这里我们使用 &arr[0] 的方式拿到了数组第⼀个元素的地址,但是其实数组名本来就是地址&…

【Wireshark 02】抓包过滤方法

一、官方教程 Wireshark 官网文档 : Wireshark User’s Guide 二、显示过滤器 2.1、 “数据包列表”窗格的弹出过滤菜单 例如,源ip地址作为过滤选项,右击源ip->prepare as filter-> 选中 点击选中完,显示过滤器&#…

MySQL基础四(JDBC)

JDBC(重点) 数据库驱动 程序会通过数据库驱动,和数据库打交道。 sun公司为了简化开发人员对数据库的统一操作,提供了一个Java操作数据库的规范。这个规范由具体的厂商去完成。对应开发人员来说,只需要掌握JDBC接口。 熟悉java.sql与javax.s…

基于CURL命令封装的JAVA通用HTTP工具

文章目录 一、简要概述二、封装过程1. 引入依赖2. 定义脚本执行类 三、单元测试四、其他资源 一、简要概述 在Linux中curl是一个利用URL规则在命令行下工作的文件传输工具,可以说是一款很强大的http命令行工具。它支持文件的上传和下载,是综合传输工具&…

cenos7网络安全检查

很多网络爱好者都知道,在Windows 2000和Windows 9x的命令提示符下可使用Windows系统自带的多种命令行网络故障检测工具,比如说我们最常用的ping。但大家在具体应用时,可能对这些命令行工具的具体含义,以及命令行后面可以使用的种…

蓝桥杯C组真题——巧克力

题目如下 思路 代码及解析如下 谢谢观看

The Rust Programming Language 学习 (三)

所有权 所有权(系统)是 Rust 最为与众不同的特性,它让 Rust 无需垃圾回收器(garbage collector)即可保证内存安全。因此,理解 Rust 中所有权的运作方式非常重要。 这里是非常重非常重的一个知识点,这里一…

【一个月备战蓝桥算法】递归与递推

字典序 在刷题和计算机科学领域,字典序(Lexicographical order)也称为词典序、字典顺序、字母序,是一种对序列元素进行排序的方式,它模仿了字典中单词的排序规则。下面从不同的数据类型来详细解释字典序: …

ArcGIS操作:07 绘制矢量shp面

1、点击目录 2、右侧显示目录 3、选择要存储的文件夹,新建shp 4、定义名称、要素类型、坐标系 5、点击开始编辑 6、点击创建要素 7、右侧选择图层、创建面 8、开始绘制,双击任意位置结束绘制

Axure原型模板与元件库APP交互设计素材(附资料)

为了高效地进行APP和小程序的设计与开发,原型设计工具Axure凭借其强大的功能和灵活性,成为了众多产品经理和设计师的首选。本文将详细介绍Axure原型模板APP常用界面组件元件库、交互设计素材,以及多套涵盖电商、社区服务、娱乐休闲、农业农村…

<网络> TCP协议

目录 TCP协议 与系统相关联 文件与套接字的关系 C语言的多态 谈谈可靠性 TCP协议格式 目的端口号 4位首部长度 16位窗口大小 序号与确认序号 32位序号 32位确认序号 标志位 TCP连接 三次握手 四次挥手 三次握手状态变化 四次挥手状态变化 流量控制 滑动窗口 拥塞控制 延迟应…

JAVA编程【jvm垃圾回收的差异】

jvm垃圾回收的差异 JVM(Java Virtual Machine)的垃圾回收(GC)机制是自动管理内存的一种方式,能够帮助开发者释放不再使用的内存,避免内存泄漏和溢出等问题。不同的垃圾回收器(GC)有…

VBA信息获取与处理第五节:如何在单个工作表中查找某个给定值

《VBA信息获取与处理》教程(版权10178984)是我推出第六套教程,目前已经是第一版修订了。这套教程定位于最高级,是学完初级,中级后的教程。这部教程给大家讲解的内容有:跨应用程序信息获得、随机信息的利用、电子邮件的发送、VBA互…

ubuntu20.04 安装离线版docker-20.10.0

1. 安装步骤 步骤一:官网下载 docker 安装包 wget https://download.docker.com/linux/static/stable/x86_64/docker-20.10.0.tgz步骤二:解压安装包; tar -zxvf docker-20.10.0.tgz 步骤三:将解压之后的docker文件移到 /usr/bin目录下; c…

【推荐算法】python游戏数据分析可视化推荐系统(完整系统源码+数据库+开发笔记+详细部署教程)✅

目录 一、项目背景 二、项目拟解决问题 (1)数据价值断层 (2)用户画像模糊 (3)推荐策略单一 (4)决策可视化缺失 三、研究目的 (1)轻量化服务架构验证 …

Vue 3 整合 WangEditor 富文本编辑器:从基础到高级实践

本文将详细介绍如何在 Vue 3 项目中集成 WangEditor 富文本编辑器,实现图文混排、自定义扩展等高阶功能。 一、为什么选择 WangEditor? 作为国内流行的开源富文本编辑器,WangEditor 具有以下优势: 轻量高效:压缩后仅…

基于Asp.net的农产品销售管理系统

作者:计算机学姐 开发技术:SpringBoot、SSM、Vue、MySQL、JSP、ElementUI、Python、小程序等,“文末源码”。 专栏推荐:前后端分离项目源码、SpringBoot项目源码、Vue项目源码、SSM项目源码、微信小程序源码 精品专栏:…

android11使用gpio口控制led状态灯

目录 一、简介 二、解决方法 A、底层驱动 B、上层调用 C、验证 一、简介 1、需求:这里是用2个gpio口来控制LED灯,开机时默认亮蓝灯,按开机键,休眠亮红灯,唤醒亮蓝灯。 原理图: 这里由于主板上电阻R63…

ASP .NET Core 学习(.NET9)Serilog日志整合

Serilog 是一个功能强大的 .NET 日志库,以其简洁的配置和灵活的输出方式而受到开发者喜爱。支持多种日志输出目标(如控制台、文件、数据库等),并且可以通过结构化日志的方式记录丰富的上下文信息,便于后续的日志分析和…

基于python+flask+mysql的川渝地区天气数据分析系统

系统首页 天气数据分析 历史天气数据查询 python爬虫代码展示 import requests import re import time as delay from bs4 import BeautifulSoup import pandas as pd import pymysql import json# 定义一个函数,用于获取网页的源代码 def get_page(url, headers)…