自定义博客皮肤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=

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

原创 Flink RichFunction题目一则

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

2023-03-08 00:31:33 608

原创 浅谈软件工程中的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 985

原创 浅谈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 1342

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

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

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

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

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

2022-10-26 01:01:32 695

原创 Hudi Timeline简析

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

2022-08-22 14:33:13 802

原创 流批一体随想

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

2022-06-30 01:27:39 560

原创 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 2652

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

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

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

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

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

2022-02-01 19:38:55 4003

原创 从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 12201 4

原创 2021。

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

2021-12-31 20:00:05 3283

原创 使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 4060 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 1669

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

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

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

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

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

2021-12-09 21:40:40 797

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

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

2021-11-30 21:01:03 9410 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 2795 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 877

原创 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 1469 1

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

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

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

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

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

2021-07-12 20:18:36 1321

原创 为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 397

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

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

2021-04-23 19:19:10 3486

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

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

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

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

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

2021-03-18 22:42:04 838

原创 实战自定义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 1681 9

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

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

2021-02-08 18:39:12 773

原创 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 757 1

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

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

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

原创 2020。

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

2020-12-31 23:59:01 343 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 998 3

原创 聊聊ClickHouse中的低基数(LowCardinality)类型

2020年快要过去了,写博客的习惯还是得捡起来。最近刚刚忙完搬家的事情,抽出一点时间简单聊两句。为什么要有LowCardinality在常见数据库系统的类型体系中,字符串是最灵活、表意性最强的类型,但是存储成本无疑也最高。ClickHouse提供了两种简单字符串的更优的存储方式,即:存储固定长度(按字节数计)字符串的FixedString类型,以及将字符串转为定长整形枚举值的Enum类型...

2020-12-27 23:22:40 4368 2

原创 TiDB 101(TiDB入门分享讲义)

昨天为公司多个部门的小伙伴们做了关于TiDB的科普,把写的讲义直接贴在下面吧。(Markdown直接渲染成网页真的比做PPT简便太多了TiDB 101Part I - IntroductionWhat is TiDB?TiDB is an open-source, distributed, relational databaseIt is NewSQL -- takin...

2020-12-10 22:38:28 844 1

原创 漫谈Google Percolator分布式事务

前言前段时间忙双11忙到废寝忘食,这期间又被各种奇奇怪怪的小病折腾了半个多月,整个人状态不是很好,博客也连续吃灰到现在,请看官勿怪。好在今天感觉还不错,可以继续写点东西了。为了应对业务数据的爆炸性增长以及MySQL业务库分库分表现状的各种不便,笔者的团队近期用一周时间突击调研TiDB,并部署了由16个节点组成的TiDB集群,同时开始逐渐探索利用它替代MySQL的可能性。在调研过程中,我们了解到...

2020-12-05 23:46:50 681 1

原创 浅谈Java SPI原理与其在JDBC、Flink中的应用

API vs SPIAPI(Application Programming Interface)的概念对我们来说已经是见怪不怪了。在日常开发过程中,我们需要调用平台/框架提供的API,而我们的下游应用也需要调用上游提供的API。一句话:API站在应用的角度定义了功能如何实现。但是,如果我们作为服务提供方,想要丰富现有的系统,加入一些原本不具备的相对完整的能力,若是直接hack代码的话,不仅要新...

2020-11-03 23:01:13 454 1

原创 高吞吐量Flume Agent调优小结

前言所有电商企业在一年一度的双11都要迎来大促与大考,我司也不例外(所以最近真是前所未有的忙乱)。前段时间在配合执行全链路压测的过程中,发现平时不太关注的Flume配置可能存在瓶颈。Flume在笔者负责的实时计算平台里用于收集所有后端访问日志和埋点日志,其效率和稳定性比较重要。除了及时扩容之外,也有必要对Flume进行调优。今天在百忙之中挤出一点时间来写写。Flume系统以一个或多个Flume...

2020-10-27 22:51:44 871 2

原创 Kafka Partition重分配流程简析

节日快乐~今天是属于广大程序员的节日,祝自己快乐hhhhhh随着业务量的急速膨胀和又一年双11的到来,我们会对现有的Kafka集群进行扩容,以应对更大的流量和业务尖峰。当然,扩容之后的新Kafka Broker默认是不会有任何Topic和Partition的,需要手动利用分区重分配命令kafka-reassign-partitions将现有的Partition/Replica平衡...

2020-10-24 22:52:39 2374

原创 大数据流的在线Heavy Hitters算法(下篇):基于略图的方法

Continue...之前有好几篇分上下篇写的文章都鸽了,惭愧惭愧。为了不食言,今天继续聊Heavy Hitters(频繁项)算法之基于略图(Sketch)的方法。时间紧张且限于水平,写得简单些,看官勿怪。什么是略图顾名思义,略图(Sketch)就是能够大致准确地描述一份数据集的摘要。当数据量非常大时,往往不能直接放入内存中,普通的查找树、哈希表等受制于数据规模,自然也就没有用武之地了。然而...

2020-10-20 21:11:24 1792

原创 Flink流量控制与反压机制完全总结

前言笔者最近回顾自己对Flink技术栈细节的理解,发现对Flink的网络栈、流控与反压这一套机制存在比较大的盲区。虽然平时多次处理过作业反压的问题,但是不完全理解背后的实现显然说不过去。于是专门写一篇总结,站在大佬们的肩膀上彻底搞清楚Flink是怎么做流控与处理反压的。Flink网络传输的数据流向Flink网络传输的数据流向如下图所示。Sender在发送数据时,首先写入Tas...

2020-10-19 23:11:04 1470 1

空空如也

空空如也

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

TA关注的人

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