自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

LittleMagic's Blog

与www.jianshu.com/u/49e6a4e2bf69同步更新=w=

  • 博客(316)
  • 收藏
  • 关注

原创 StarRocks Elasticsearch Catalog原理简析

前言Elasticsearch不仅是强大的全文搜索引擎,在很多场景下(特别是TiDB、ShardingSphere等框架成熟之前)也被当做分布式HTAP数据库使用,在存储、更新海量数据的同时,提供高效的点查和部分聚合查询能力。StarRocks从3.1版本开始支持Elasticsearch Catalog,极大方便了ES数据的联邦查询。本文简要分析其原理,并提出一个小问题和对应的临时解决方法。...

2024-09-26 20:34:10 941

原创 浅谈SIMD、向量化处理及其在StarRocks中的应用

前言单指令流多数据流(SIMD)及其衍生出来的向量化处理技术已经有了相当的历史,并且也是高性能数据库、计算引擎、多媒体库等组件的标配利器。笔者在两年多前曾经做过一次有关该主题的内部Geek分享,但可能是由于这个topic离实际研发场景比较远,当时听者寥寥。昨晚翻看硬盘中存的各种资料,翻到了相关内容,遂整理出来,顺便添加一些新东西。SIMDSIMD即"single instruction, m...

2024-08-13 19:10:48 635

原创 聊聊存算分离StarRocks的垃圾清理机制

前言大家已经了解,StarRocks的更新模型、主键模型等在Flush和Compaction过程中会产生历史版本数据,这些垃圾数据需要及时被清理,以防止存储空间浪费。而StarRocks在存算分离部署下,用户一般都会选择对象存储作为底层存储。对象存储是按照空间使用计费,且延迟比起本地盘更高,删除操作也相对更重,所以高效的垃圾清理机制显得尤为重要。本文简单介绍存算分离StarRocks的垃圾清理(...

2024-07-28 12:33:52 331

原创 大数据集群Linux系统参数预调优指南

前言当我们自建大数据集群(如OLAP集群、实时计算集群、分布式存储集群、全文搜索集群等)的时候,除了硬件资源要合理配备外,在操作系统层面也要进行一些事前配置,让大数据组件能够充分利用硬件资源,避免潜在性能问题和成本浪费。本文综合业内惯例和笔者在之前工作中运维大型集群的经验,对需要注意的部分Linux系统参数做一些解释,读者可参考实际情况设置。有操作系统理论和计算机组成原理基础的话,阅读本文会十分...

2024-05-20 22:46:51 716

原创 浅谈Deletion Vector及其在StarRocks中的应用

前言我们知道,列式存储的数据组织形式使得它适合海量数据在线查询、分析的场景,而写入性能相对于读取性能似乎并不那么重要(传统的ORC / Parquet on Hive方案就可以满足多数小时级到天级新鲜度的需求)。但是实际业务的发展是无止境的,越来越多的看板、报表要求分钟级甚至秒级刷新,对数据系统的实时性提出了极大挑战。当然,原始的列存格式并不支持行存风格的in-place update,高频更新...

2024-03-26 20:18:47 910

原创 「Excαlibur」

因为跨年有出游计划,所以稍微打破一下传统,选在平安夜发布2023年度最佳单曲。今年的Top 1是来自著名Indie乐团Mili的「Excαlibur」,同时是近十年来所有年度最佳中第一首非日语歌曲。收录这首歌的专辑「Hue」也是这几年听过的最好的EP,以至于不惜代价搞到了实体版来收藏(笑提前许个愿吧,祝2024年一切顺遂。My bones are titanium【我有钛金铸成的骨骼】...

2023-12-24 18:37:29 301

原创 简析StarRocks JNI Connector及其在数据湖Reader中的应用

前言最近在进行StarRocks与数据湖集成方面的一些工作(重点是SR 3.2与Paimon 0.6的适配),同时阅读和修改了部分代码,发现StarRocks JNI Connector是个称得上精妙的模块,为各类大数据组件适配StarRocks提供了方便的入口,从而丰富其联邦查询能力。本文尝试简单分析一下它的设计思路,并通过Paimon Reader看一下StarRocks的数据湖Reader...

2023-12-17 21:51:21 988

原创 关于使用Flink RocksDB状态后端时一定要写MapState而非ValueState<Map>这档事(以及解决方法)...

前言抱歉起这种烂大街的日本轻小说风格标题来吸引注意力。原本我认为这是常识,不需要专门写一篇文章来讲解如此细碎的点。但是在最近工作巡检中发现了越来越多如同ValueState<Map>的状态用法(当然大部分是历史遗留),部分Flink作业深受性能问题困扰,所以还是抽出点时间快速聊一聊,顺便给出不算优雅但还算有效的挽救方案。基于RocksDB的状态序列化我们已经知道,RocksDB是...

2023-10-30 18:45:15 75

原创 Flink RichFunction题目一则

前言祝广大女性节日快乐~快问快答Flink DataStream API中的RichFunction有哪些用途/特点?RichFunction中获取到的RuntimeContext是干什么用的?所有Function都有对应的RichFunction实现吗?所有Flink流处理的算子都可以传入RichFunction吗?前两个问题实际上可以合并成一个问题。RichFu...

2023-03-08 00:31:33 750

原创 浅谈软件工程中的Shim

什么是ShimShim一词的原本含义是“垫片”或者“楔子”,而首先将这个词应用到软件工程领域的似乎是微软。根据Wikipedia的总结:A shim is a library that transparently intercepts API calls and changes the arguments passed, handles the operation itself or red...

2023-03-04 00:14:41 1628

原创 浅谈Flink批模式Adaptive Hash Join

Flink批Hash Join递归超限问题随着Flink流批一体能力的迅速发展以及Flink SQL易用性的提升,越来越多的厂商开始将Flink作为离线批处理引擎使用。在我们使用Flink进行大规模join操作时,也许会发生如下的异常,导致任务失败:Hash join exceeded maximum number of recursions, without reducing partiti...

2022-12-30 19:55:45 1501

原创 无锁并发快照在Flink MySQL CDC 2.0中的实现

前言本文是两个月前参加黑马比赛时写了一半的,为了避免烂尾,今天补全发出来。Flink CDC经过长时间的发展,目前无疑是实现数据源端Pipeline的最简单直接的方式。而在1.0时代,因为存在一些主要的缺点,它还不能称得上是production-ready,这些缺点有:Debezium底层需要通过全局锁来保证全量和增量数据的一致性,对线上业务影响大;全量快照阶段只能单线程读取,大表同步非...

2022-10-27 00:02:41 1858 1

原创 从一例状态引发的性能问题谈Flink状态序列化

前言好久不见(鞠躬最近处在转型期,每天忙到飞起,关注具体技术细节的精力自然就比较少了(上一篇许下的周更承诺也食言了 = =)。上周帮助他人快速解决了一个因误用Flink状态类型引发的性能问题,在这里做个quick notes,并简要介绍一下Flink状态序列化方面的基础知识。问题及排查上游部门同事反馈,一个计算逻辑并不复杂的多流join DataStream API作业频繁发生消费积压、c...

2022-10-26 01:01:32 992

原创 Hudi Timeline简析

前言Long time no see(鞠躬最近终于开始尝试推广Hudi在部门内部的应用,作为流批一体计划的最后一块拼图,顺便复活许久未更的博客,希望今后至少能保持周更的节奏吧。在Hudi官方文档的开头列举了四大核心概念,分别是:TimelineFile LayoutTable TypesQuery Types本文就来简要地谈谈Timeline。Timeline作用与结构官网...

2022-08-22 14:33:13 931

原创 流批一体随想

前言好久不见(鞠躬今年以来的主要工作方向之一就是部门内流批一体能力的建设与落地。虽然这个概念早已成为老生常谈,并且笔者现在还没什么fancy的成果(惭愧),但今天还是想随便写几句来聊聊。Why?考虑经典的Lambda Architecture。这种架构的出现是历史必然,因为那时的流计算引擎以Storm为代表,而它们都无法提供Exactly-Once语义,所以任何一点小的扰动(延...

2022-06-30 01:27:39 626

原创 Flink RocksDB托管内存机制的幕后——Cache & Write Buffer Manager

前言为了解决Flink作业使用RocksDB状态后端时的内存超用问题,Flink早在1.10版本就实现了RocksDB的托管内存(managed memory)机制。用户只需启用state.backend.rocksdb.memory.managed参数(默认即为true),再设定合适的TaskManager托管内存比例taskmanager.memory.managed.fraction,即可...

2022-03-23 21:59:10 2843

原创 Flink新特性之网络缓存消胀(Network Buffer Debloating)机制

前言最近正在准备关于Flink 1.13 / 1.14版本新特性的内部分享,顺便做点记录。又见网络缓存很久没有聊过Flink的网络栈了,但相信大家对网络缓存(Network Buffer)这个概念不会陌生。它是Flink网络层数据交换的最小单元,承载序列化后的数据,以直接内存的形式分配,并且一个Buffer的大小就等于一个MemorySegment的大小,即taskmanager.memor...

2022-02-07 23:52:45 3836 2

原创 浅谈Flink对象重用(object reuse)

前言今天是大年初一,祝各位虎年大吉大利~近期受工作变动影响,博客又荒废了许久。今天难得有空,就前段时间内部技术分享里提到的一个小知识点来写几笔。对象重用(object reuse)在Flink文档的Execution Configuration一节中并不起眼,并且关于它的说明也语焉不详,如下:enableObjectReuse() / disableObjectReuse() ...

2022-02-01 19:38:55 4425

原创 从Flink SQL "doesn't support consuming update and delete changes" 错误谈起

前言相信我们在初学Flink SQL时,多少遇到过像这样的错误信息:org.apache.flink.table.api.TableException: X[算子名] doesn't support consuming update and delete changes which is produced by node Y[算子名]为什么有些下游算子不能接受上游算子发来的UPDATE和D...

2022-01-07 21:50:35 13782 4

原创 2021。

2021年的最后几个小时了,抽空来写几笔。待会儿再揭晓年度最佳单曲。健康新冠疫情仍然没有趋缓的迹象。看着近期又开始上涨的确诊病例数,还有承载着不同生活轨迹的流调报告,有时不免会感叹:这样的日子什么时候到头呢?然而感叹之余,还是要做好防护,按时吃饭睡觉,增强抵抗力,期盼着世界重回正轨的那天,也希望早就计划好的欧洲之旅早日成行。五一假期仍然在威海度过,回来就得知妈妈患病的消息。好在手...

2021-12-31 20:00:05 3321

原创 使Flink SQL Kafka Source支持独立设置并行度

前言社区在Flink 1.12版本通过FLIP-146提出了增强Flink SQL DynamicTableSource/Sink接口的动议,其中的一个主要工作就是让它们支持独立设置并行度。很多Sink都已经可以配置sink.parallelism参数(见FLINK-19937),但Source还没动静。这是因为Source一直以来有两种并行的标准,一是传统的流式SourceFunction与批...

2021-12-26 22:30:03 4423 4

原创 聊聊访问者模式与其在Calcite/Flink中的应用

前言“访问者模式”在之前的文章里已经出现过几次了,择日不如撞日,今天接着聊吧。The Visitor Pattern访问者模式属于GoF设计模式分类中的行为型模式。它的定义如下:Represents an operation to be performed on the elements of an object structure. Visitor lets you define a ...

2021-12-19 23:44:50 1763

原创 浅谈Flink SQL代码生成与UDF重复调用的优化

前言之前讲解Flink SQL执行流程时留下了代码生成的坑,在百忙之中抽时间补一补。代码生成简介代码生成(code generation)是当今各种数据库和数据处理引擎广泛采用的物理执行层技术之一。通过代码生成,可以将原本需要解释执行的算子逻辑转为编译执行(二进制代码),充分利用JIT编译的优势,克服传统Volcano模型虚函数调用过多、对寄存器不友好的缺点,在CPU-bound场景下可以获得大幅的性能提升。在大数据领域,看官最为熟知的代码生成应用可能就是Spark 2.x的全阶段代码生成(whol

2021-12-13 14:35:04 1050 1

原创 浅谈Flink SQL代码生成与UDF重复调用的优化

前言之前讲解Flink SQL执行流程时留下了代码生成的坑,在百忙之中抽时间补一补。代码生成简介代码生成(code generation)是当今各种数据库和数据处理引擎广泛采用的物理执行层技术之一。通过代码生成,可以将原本需要解释执行的算子逻辑转为编译执行(二进制代码),充分利用JIT编译的优势,克服传统Volcano模型虚函数调用过多、对寄存器不友好的缺点,在CPU-bound场景下可以获...

2021-12-09 21:40:40 1133

原创 基于Calcite解析Flink SQL列级数据血缘

数据血缘数据血缘(data lineage)是数据治理(data governance)的重要组成部分,也是元数据管理、数据质量管理的有力工具。通俗地讲,数据血缘就是数据在产生、加工、流转到最终消费过程中形成的有层次的、可溯源的联系。成熟的数据血缘系统可以帮助开发者快速定位问题,以及追踪数据的更改,确定上下游的影响等等。在数据仓库的场景下,数据的载体是数据库中的表和列(字段),相应地,数据血缘...

2021-11-30 21:01:03 10107 2

原创 Flink SQL窗口表值函数(Window TVF)聚合实现原理浅析

引子表值函数(table-valued function, TVF),顾名思义就是指返回值是一张表的函数,在Oracle、SQL Server等数据库中屡见不鲜。而在Flink的上一个稳定版本1.13中,社区通过FLIP-145提出了窗口表值函数(window TVF)的实现,用于替代旧版的窗口分组(grouped window)语法。举个栗子,在1.13之前,我们需要写如下的Flink SQ...

2021-09-20 22:19:09 3175 1

原创 From Calcite to Tampering with Flink SQL

今天为组内同学做了题为「From Calcite to Tampering with Flink SQL」的分享,将Markdown版讲义贴在下面。本次分享信息量极大,涵盖Calcite基础、Blink Planner执行原理、优化器与优化规则等。之后会择重点专门写文章二次讲解。From Calcite to Tampering with Flink SQLAugust 26th, 202...

2021-08-26 18:25:53 937

原创 Flink on Zeppelin问题四则(并没有优雅的解决方案

前言最近我们正式调研Zeppelin作为Flink SQL开发套件的可能性,于是clone了最新的Zeppelin v0.10-SNAPSHOT源码,自行编译并部署到了预发布环境的新Flink集群中。Flink版本为1.13.0,Hadoop版本为CDH 6.3.2自带的3.0.0。经过两天的探索,发现了一些问题,在百忙之中抽出点时间简要记录一下并不成功的troubleshooting过程。...

2021-07-30 20:01:01 1605 1

原创 无缝更改ClickHouse物化视图SELECT逻辑的方法

累成狗的一天,继续超短文模式。在我司的ClickHouse DWS层有一张ReplicatedAggregatingMergeTree引擎的物化视图,为近线推荐业务提供关键用户行为的计数值。该物化视图的底表(即所谓“inner”表)有两张,分别从不同的事实表聚合数据,如下图所示。Q:算法同学希望在物化视图中增加一些用户行为,如何在保证不影响线上业务(不删表)的前提下把这些行为加进去?...

2021-07-29 22:33:29 1842 1

原创 Flink JobManager占用注册端口引起的小问题

继续超短流水账一篇。今天午饭时间,一个向来非常稳定的Flink on YARN任务忽然持续报警。查看TaskManager日志均没有问题,但JobManager日志内报出大量Connection reset by peer信息,其中更夹杂着奇怪的错误,如下图所示。但是作业是一直正常运行的。根据日志,可以凭直觉推测JobManager的REST endpoint出了问题(遭到了RST攻...

2021-07-12 20:18:36 1404

原创 为TiDB DM添加阿里云RDS/DMS Online DDL支持

Foreword停更了好几个月,在百忙之中抽点时间写篇小的流水账吧。Online DDL即无锁表结构变更,能够避免对表(尤其是大表)进行更改时,长时间阻塞DML操作。我们当前采用TiDB的DM组件实现上游许多业务库的合库合表与数据汇聚,DM原生支持的Online DDL工具有pt-osc(Percona开源)与gh-ost(GitHub开源)两种。但是,我们的业务库绝大多数都是阿里云RDS M...

2021-07-09 18:37:55 433

原创 脱离ZooKeeper依赖的Kafka Controller Quorum(KRaft)机制浅析

前言好久没有更新过博客了,在百忙之中抽出一点时间来写两笔吧。相信这几天大家正在被“Kafka要弃用ZooKeeper”的消息刷屏,并且无一例外地将其视为这个老当益壮的消息系统近年来最重大的变革。当然,由于ZooKeeper在Kafka中承担了Controller选举、Broker注册、TopicPartition注册与Leader选举、Consumer/Producer元数据管理和负载均衡等等...

2021-04-23 19:19:10 3710

原创 Flink SQL流式聚合Mini-Batch优化原理浅析

前言流式聚合(streaming aggregation)是我们编写实时业务逻辑时非常常见的场景,当然也比较容易出现各种各样的性能问题。Flink SQL使得用户可以通过简单的聚合函数和GROUP BY子句实现流式聚合,同时也内置了一些优化机制来解决部分case下可能遇到的瓶颈。本文对其中常用的Mini-Batch做个简要的介绍,顺便从源码看一看它的实现思路。注意:截至当前版本,Flink ...

2021-03-25 23:21:44 3799 1

原创 (跳跃)一致性哈希及其在Greenplum中的应用

前言一致性哈希(consistent hashing)是分布式系统中非常重要的算法,在平滑扩缩容、动态负载均衡等方向有大量应用。相对于传统的线性(取模)哈希算法,一致性哈希可以保证在分布式哈希表中的桶数量发生变化时,受到影响需要重新映射的key尽量少。本文先简要复习下经典的割环一致性哈希方案,然后介绍它的变种——跳跃一致性哈希(jump consistent hash)。割环一致性哈希一致性...

2021-03-18 22:42:04 901

原创 实战自定义Flink SQL Connector(w/ Flink 1.11 & Redis)

ForewordFlink SQL之所以简洁易用而功能强大,其中一个重要因素就是其拥有丰富的Connector(连接器)组件。Connector是Flink与外部系统交互的载体,并分为负责读取的Source和负责写入的Sink两大类。不过,Flink SQL内置的Connector有可能无法cover实际业务中的种种需求,需要我们自行定制。好在社区已经提供了一套标准化、易于扩展的体系,用户只要按...

2021-03-04 21:00:20 1734 9

原创 一例TiDB DM同步任务写冲突的分析与解决

提出问题我们当前通过5个DM任务从RDS MySQL向TiDB同步数据。这些任务均非合库合表任务,且同步的库表相互之间没有交集,safe-mode均未显式打开,Syncer线程数16。且除DM任务外,几乎没有其他写入动作。同步开始后,通过Grafana的TiDB/KV Errors面板观察到持续的写冲突,如下图所示。同时AlertManager出现大量关于事务重试的报警。...

2021-02-08 18:39:12 838

原创 Flink SQL高效Top-N方案的实现原理

昨天的文章里恰好用Top-N Function来举了例子,那么择日不如撞日,今天接着聊吧。Top-NTop-N是我们应用Flink进行业务开发时的常见场景,传统的DataStream API已经有了非常成熟的实现方案,如果换成Flink SQL,又该怎样操作?好在Flink SQL官方文档已经给出了标准答案,我们只需要照抄就行,其语法如下:SELECT [column_list]FROM ...

2021-01-07 21:34:39 824 1

原创 Flink SQL空闲状态保留时间(idle state retention time)实现原理

前言如果要列举Flink SQL新手有可能犯的错误,笔者认为其中之一就是忘记设置空闲状态保留时间导致状态爆炸。2021年的第一篇技术文,时间很紧张,聊聊这个简单的话题吧。为什么要设置如果我们在数据流上进行分组查询,分组处理产生的结果(不仅仅是聚合结果)会作为中间状态存储下来。随着分组key的不断增加,状态自然也会不断膨胀。但是这些状态数据基本都有时效性,不必永久保留。例如,使用Top-N语法...

2021-01-06 23:35:14 5322 6

原创 2020。

2020年最后一天的最后一个小时了,还是来随便写两句吧。技术/工作有幸见证了我司业务的急速扩张,当然也全程参与了大数据架构的迭代与演进过程,特别是主导了实时数仓体系的建设。累,但收获颇丰,非常值得。Flink已经成为流式计算的事实标准,新特性层出不穷,越来越强大;Zeppelin为SQL任务平台化提供了巨大的便利;ClickHouse、TiDB分别在特定领域的OLAP、HTAP方面发光发热。...

2020-12-31 23:59:01 368 6

原创 解决TiKV节点JBD2进程I/O占用高的问题

今天事情甚多,草草写一篇,尽量赶在1点之前休息。问题我们的TiDB集群上线以来,所有TiKV节点的所有磁盘I/O Util指标总是偏高,大多数时候在50%以上,极端情况下接近90%。集群采用的阿里云ECS配备的都是PL2级别的ESSD云盘(标称吞吐量峰值750MB/s、10w IOPs,且添加了挂载参数noatime和nodelalloc),主要负载是通过DM同步与简单查询50+张业务库大表,...

2020-12-28 23:59:19 1131 3

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除