<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"><channel><title>Liebing&apos;s Blog</title><description>一行代码，点滴生活。关于流式系统、数据湖与分布式系统的思考和实践。</description><link>https://liebing.org.cn/</link><language>zh-CN</language><item><title>使用Fluss的7大理由 - 是时候一统流湖仓了</title><link>https://liebing.org.cn/top-7-reasons-to-choose-fluss.html</link><guid isPermaLink="true">https://liebing.org.cn/top-7-reasons-to-choose-fluss.html</guid><description>Apache Fluss(Incubating)是一款新型的流式存储系统, 同时兼顾流式读写和实时分析. 它深度集成数据湖架构, 弥合了流数据与数据湖之间的鸿沟, 解决了数据湖的&quot;最后一分钟&quot;延迟问题. 本文总结了使用Fluss的7大理由, 包括其在数据能力及运维管理方面的先进性.</description><pubDate>Sat, 25 Oct 2025 04:00:00 GMT</pubDate></item><item><title>Flink MT + Paimon - 开源低成本增量计算的曙光</title><link>https://liebing.org.cn/flink-mt.html</link><guid isPermaLink="true">https://liebing.org.cn/flink-mt.html</guid><description>自Google&quot;三驾马车&quot;伊始, 大数据处理技术已经发展了二十年. 在前十年中, Hive+Spark这套离线处理技术就已经基本完善; 近十年来, Flink的快速发展又有效地解决了实时处理的问题. 然而, 低成本的近实时处理依然面临挑战. 近来, 随着业界对近实时处理及流批一体架构的需求愈发强烈, 增量计算开始重新被关注.</description><pubDate>Sat, 07 Dec 2024 14:34:09 GMT</pubDate></item><item><title>Flink SQL源码 - Table API &amp; SQL概览</title><link>https://liebing.org.cn/flink-sql-table-api.html</link><guid isPermaLink="true">https://liebing.org.cn/flink-sql-table-api.html</guid><description>本文是Flink SQL执行框架源码分析系列的第二篇, 将从整体上介绍与Table API和SQL实现相关的模块, 并解析内部是如何通过组合各个模块实现SQL的解析, 优化与执行的. 最后通过对现有模块的简单扩展来实现一个新的用户接口executeStatements, 该接口可直接运行用户提供的整个SQL脚本.</description><pubDate>Fri, 17 May 2024 11:00:00 GMT</pubDate></item><item><title>Flink SQL源码 - 整体架构及处理流程</title><link>https://liebing.org.cn/flink-sql-overview.html</link><guid isPermaLink="true">https://liebing.org.cn/flink-sql-overview.html</guid><description>Flink SQL作为Stream SQL的事实标准, 已经得到了广泛的应用. 然而不同于Hive, Spark等离线引擎或数据库的SQL, 流式系统中的SQL有更多的隐藏特性和复杂度, 理解其内部实现是更好使用Flink SQL的基础. 为此, 笔者计划通过一系列文章对Flink SQL的执行框架进行抽茧剥丝, 详细介绍其内部实现.</description><pubDate>Thu, 16 May 2024 13:00:00 GMT</pubDate></item><item><title>Flink源码 - RPC原理与实现</title><link>https://liebing.org.cn/flink-code-rpc.html</link><guid isPermaLink="true">https://liebing.org.cn/flink-code-rpc.html</guid><description>Flink作为一个分布式计算系统, 其组件间的通信是由RPC实现的. 为方便使用, Flink抽象了一套RPC框架, 并提供了基于Akka的实现. 本文首先介绍Flink RPC框架的整体设计, 之后介绍其基于Akka的实现. 理解Flink的RPC实现是理解其底层组件之间通信原理的基础.</description><pubDate>Wed, 01 May 2024 02:00:00 GMT</pubDate></item><item><title>Flink SQL源码 - Mini-Batch原理与实现</title><link>https://liebing.org.cn/flink-sql-minibatch.html</link><guid isPermaLink="true">https://liebing.org.cn/flink-sql-minibatch.html</guid><description>Mini-Batch是在进行有状态流处理时的一种重要优化手段, 通过在内存中攒批后再处理可以降低State访问次数, 从而提升吞吐量降低CPU资源使用. 目前, Flink SQL已经在多个场景中支持了Mini-Batch优化, 本文首先介绍Flink SQL的Mini-Batch实现原理, 在此基础上通过相关案例进一步介绍具体实现.</description><pubDate>Thu, 11 Jan 2024 13:00:00 GMT</pubDate></item><item><title>Flink SQL源码 - Changelog原理与实现</title><link>https://liebing.org.cn/flink-sql-changelog.html</link><guid isPermaLink="true">https://liebing.org.cn/flink-sql-changelog.html</guid><description>Changelog起源于数据库领域, 代表变更操作, 可用于增量的数据同步. Flink SQL同样也引入了Changelog记录数据的变更, 来实现增量的数据处理, 只不过在实现上与数据库的Changelog有所不同. Changelog是隐藏在Flink SQL背后的重要概念, 是流与表可以统一的基础, 也是多个流式操作(如Group By)正确性的保障.</description><pubDate>Tue, 05 Dec 2023 13:00:00 GMT</pubDate></item><item><title>Flink SQL源码 - SQL函数原理与实现</title><link>https://liebing.org.cn/flink-sql-functions.html</link><guid isPermaLink="true">https://liebing.org.cn/flink-sql-functions.html</guid><description>Flink SQL函数丰富了SQL层的数据处理能力, 除了大量的内置函数, Flink还支持用户自定义函数(User-defined function, UDF). 在Flink SQL优化器中, 会对函数进行多层转换, 本文将对此进行详细介绍. 理解了这一流程, 便可为Flink添加更多内置函数, 亦可理解UDF的执行原理与可能出现的问题.</description><pubDate>Sat, 18 Nov 2023 13:00:00 GMT</pubDate></item><item><title>Apache Calcite查询优化器之VolcanoPlanner</title><link>https://liebing.org.cn/apache-calcite-volcanoplanner.html</link><guid isPermaLink="true">https://liebing.org.cn/apache-calcite-volcanoplanner.html</guid><description>本文是Apache Calcite原理与实践系列的第七篇. 上一篇文章介绍了Calcite中的规则优化器HepPlanner, 本文将介绍成本优化器VolcanoPlanner. VolcanoPlanner是Volcano/Cascades风格的优化器, 支持基于成本的搜索, 并具有良好的扩展性. 本文首先介绍VolcanoPlanner中相关的概念和数据结构, 之后介绍现有的两种优化算法.</description><pubDate>Sun, 12 Nov 2023 04:00:00 GMT</pubDate></item><item><title>Apache Calcite查询优化器之HepPlanner</title><link>https://liebing.org.cn/apache-calcite-hepplanner.html</link><guid isPermaLink="true">https://liebing.org.cn/apache-calcite-hepplanner.html</guid><description>本文是Apache Calcite原理与实践系列的第六篇. 上一篇文章介绍了与查询优化器相关的基本理论, 本文开始介绍Calcite中的查询优化器HepPlanner的实现, HepPlanner是基于规则的优化器, 相对于VolcanoPlanner来说实现比较简单. 本文首先介绍HepPlanner中引入的相关概念和数据结构, 之后介绍HepPlanner的整个优化流程.</description><pubDate>Mon, 21 Aug 2023 12:00:00 GMT</pubDate></item><item><title>Apche Calcite查询优化概述</title><link>https://liebing.org.cn/apache-calcite-query-optimization-overview.html</link><guid isPermaLink="true">https://liebing.org.cn/apache-calcite-query-optimization-overview.html</guid><description>本文是Apache Calcite原理与实践系列的第五篇. 经过前面几篇文章的铺垫, 本文终于开始进入Calcite中最为核心的查询优化器的介绍. 由于查询优化器所涉及的概念多且实现逻辑复杂, 后续将分几篇文章进行介绍. 本文首先介绍与查询优化相关的理论基础, 之后介绍Calcite中与查询优化相关的概念和数据结构.</description><pubDate>Wed, 09 Aug 2023 01:00:00 GMT</pubDate></item><item><title>Flink源码 - 从Kafka Connector看Source接口重构</title><link>https://liebing.org.cn/flink-code-kafka-source.html</link><guid isPermaLink="true">https://liebing.org.cn/flink-code-kafka-source.html</guid><description>Flink原始的Source接口(SourceFunction)随着Flink在数据集成和流批一体上的不断发展, 暴露出了越来越多的问题. 为了实现更优雅的数据接入, 社区提出了FLIP-27来重构Source接口. 新的Source接口已经在Flink 1.12中得到实现, 该接口将成为Flink数据接入的新标准.</description><pubDate>Sun, 21 May 2023 02:00:00 GMT</pubDate></item><item><title>Apache Calcite关系代数</title><link>https://liebing.org.cn/apache-calcite-relational-algebra.html</link><guid isPermaLink="true">https://liebing.org.cn/apache-calcite-relational-algebra.html</guid><description>本文是Apache Calcite原理与实践系列的第四篇, 前两篇文章介绍了SQL语句的解析及验证, 本文开始介绍关系代数的原理与实现. 关系代数最早由E. F. Codd在1970年的论文&quot;A Relational Model of Data for Large Shared Data Banks&quot;中提出, 是关系型数据库查询语言的基础, 也是查询优化技术的理论基础.</description><pubDate>Tue, 04 Apr 2023 01:00:00 GMT</pubDate></item><item><title>Flink最佳实践 - Table与DataStream互相转换</title><link>https://liebing.org.cn/flink-table-datastream-convert.html</link><guid isPermaLink="true">https://liebing.org.cn/flink-table-datastream-convert.html</guid><description>Flink SQL在很多场景下可以简化实时数据处理管道的开发，然而SQL的表达能力毕竟有限, 一些复杂的处理逻辑还是不得不借助DataStream API实现, 如复杂Lookup Join, 自定义定时器处理等. 然而如果所有处理逻辑都用DataStream API实现, 则又需要编写大量的Java代码, 不仅效率低下, 而且相比于SQL更难维护.</description><pubDate>Sun, 21 Aug 2022 12:00:00 GMT</pubDate></item><item><title>论文阅读 - Delta Lake: High-Performance ACID Table Storage over Cloud Object Stores</title><link>https://liebing.org.cn/paper-delta-lake.html</link><guid isPermaLink="true">https://liebing.org.cn/paper-delta-lake.html</guid><description>本文是对Databricks的Delta Lake论文(Delta Lake: High-Performance ACID Table Storage over Cloud Object Stores)的阅读总结. Delta Lake是前文所说的Lakehouse架构中的数据湖上的表格存储实现. 论文详细描述了Delta Lake的产生背景, 原理以及特征.</description><pubDate>Wed, 29 Jun 2022 08:30:00 GMT</pubDate></item><item><title>Apache Calcite SQL验证</title><link>https://liebing.org.cn/apache-calcite-sql-validator.html</link><guid isPermaLink="true">https://liebing.org.cn/apache-calcite-sql-validator.html</guid><description>本文是Apache Calcite原理与实践系列的第三篇, 上一篇文章介绍了Calcite解析器的实现原理, 本文将介绍如何对解析器输出的SQL解析树进行语义分析, 如表名, 字段名, 函数名和数据类型的检查.</description><pubDate>Thu, 12 May 2022 03:55:00 GMT</pubDate></item><item><title>Apache Calcite SQL解析及语法扩展</title><link>https://liebing.org.cn/apache-calcite-sql-parser.html</link><guid isPermaLink="true">https://liebing.org.cn/apache-calcite-sql-parser.html</guid><description>本文是Apache Calcite原理与实践系列的第二篇, 将会详细介绍Calcite的SQL解析器的实现原理. 最后讲述如何通过扩展Calcite的SQL解析器来实现自定义SQL语法的解析, 比如解析Flink中的CREATE TABLE (...) WITH (...)语法等.</description><pubDate>Thu, 05 May 2022 07:52:02 GMT</pubDate></item><item><title>Apache Calcite整体架构及处理流程</title><link>https://liebing.org.cn/apache-calcite-overview.html</link><guid isPermaLink="true">https://liebing.org.cn/apache-calcite-overview.html</guid><description>Apache Calcite是一个动态的数据管理框架, 它可以实现SQL的解析, 验证, 优化和执行. 称之为&quot;动态&quot;是因为Calcite是模块化和插件式的, 上述任何一个步骤在Calcite中都对应着一个相对独立的模块. 用户可以选择使用其中的一个或多个模块, 也可以对任意模块进行定制化的扩展.</description><pubDate>Mon, 02 May 2022 13:12:02 GMT</pubDate></item><item><title>Flink最佳实践 - Watermark原理及实践问题解析</title><link>https://liebing.org.cn/flink-watermark.html</link><guid isPermaLink="true">https://liebing.org.cn/flink-watermark.html</guid><description>Watermark在Google的The Dataflow Model论文中被首次提出, 它在基于Event Time的流处理中具有重要作用, 是一种平衡计算结果准确性和延迟的机制. 虽然Watermark的概念不难理解, Flink中也有完善的Watermark策略, 但是在实际场景中生成合理的Watermark却并非那么简单, 在并行流下更是可能会出现多种问题.</description><pubDate>Fri, 29 Apr 2022 12:10:02 GMT</pubDate></item><item><title>论文阅读 - Lakehouse: A New Generation of Open Platforms that Unify Data Warehousing and Advanced Analytics</title><link>https://liebing.org.cn/paper-lakehouse.html</link><guid isPermaLink="true">https://liebing.org.cn/paper-lakehouse.html</guid><description>本文是对Databricks的Lakehouse(湖仓一体)论文(Lakehouse: A New Generation of Open Platforms that Unify Data Warehousing and Advanced Analytics)的阅读总结.</description><pubDate>Wed, 20 Apr 2022 11:18:02 GMT</pubDate></item><item><title>2021年大数据/数据库开发校招总结</title><link>https://liebing.org.cn/2021-interview.html</link><guid isPermaLink="true">https://liebing.org.cn/2021-interview.html</guid><description>我在今年(2021年)参加了大数据和数据库开发相关的校招岗位招聘, 整个应聘流程包括春招的实习生招聘以及秋招的正式招聘, 最终获得了阿里/腾讯/Shopee/网易/华为/有赞等多家公司的实习或正式offer, 当然也收到过一家公司的拒信. 虽然网络上分享计算机相关岗位面试经验的文章已经浩如烟海, 但是这些经验大多针对后端开发和算法, 鲜有介绍大数据或数据库开发的应聘经验.</description><pubDate>Tue, 09 Nov 2021 13:18:02 GMT</pubDate></item><item><title>Hadoop YARN原理 - 编写YARN Application</title><link>https://liebing.org.cn/hadoop-yarn-write-application.html</link><guid isPermaLink="true">https://liebing.org.cn/hadoop-yarn-write-application.html</guid><description>本文是Hadoop YARN原理系列的第二篇, 主要讲述如何编写YARN Application. 实际上, MapReduce, Spark以及Flink等框架在YARN上运行时, 都可以视为一种特定的YARN Application.</description><pubDate>Tue, 19 Oct 2021 09:45:00 GMT</pubDate></item><item><title>Hadoop YARN原理 - 整体架构</title><link>https://liebing.org.cn/hadoop-yarn-architecture.html</link><guid isPermaLink="true">https://liebing.org.cn/hadoop-yarn-architecture.html</guid><description>YARN(Yet Another Resource Negotiator)是一个分布式的资源调度和管理系统, 负责管理和分配集群的资源(目前主要是vcores和memory), 在一些资料中形象地把YARN比作一个分布式的操作系统.</description><pubDate>Sat, 25 Sep 2021 12:01:00 GMT</pubDate></item><item><title>Glink SQL最佳实践 - GeoMesa SQL Connector应用</title><link>https://liebing.org.cn/glink-sql-geomesa.html</link><guid isPermaLink="true">https://liebing.org.cn/glink-sql-geomesa.html</guid><description>GeoMesa已经成为时空数据存储领域重要的索引中间件, 京东城市时空数据引擎JUST和阿里云的HBase Ganos均是在GeoMesa的基础上扩展而来. GeoMesa采用键值存储, 支持多种类型的存储后端, 如HBase, Kafka, Redis等.</description><pubDate>Sat, 20 Feb 2021 14:04:18 GMT</pubDate></item><item><title>Flink SQL最佳实践 - HBase SQL Connector应用</title><link>https://liebing.org.cn/flink-sql-hbase.html</link><guid isPermaLink="true">https://liebing.org.cn/flink-sql-hbase.html</guid><description>HBase作为谷歌BigTable的开源实现, 是构建在HDFS上的分布式键值数据库. 由于具有极高的读写性能, HBase已经在实时计算领域得到了广泛运用. 随着Flink在实时计算领域的普及, Flink与HBase的结合应用也是趋势使然. 从Flink 1.9开始就在SQL API层面增加了对HBase Connector的支持.</description><pubDate>Tue, 19 Jan 2021 14:34:09 GMT</pubDate></item><item><title>深入探索Java虚拟机运行时数据区域</title><link>https://liebing.org.cn/jvm-runtime-data-area.html</link><guid isPermaLink="true">https://liebing.org.cn/jvm-runtime-data-area.html</guid><description>&apos;Java虚拟机规范&apos;把Java虚拟机的运行时数据区域划分为线程隔离的程序计数器, 虚拟机栈, 本地方法栈和线程共享的方法区, 堆. 然而, &apos;Java虚拟机规范&apos;所描述的是Java虚拟机的概念模型(代表所有Java虚拟机的统一外观), 并未规定上述5个运行时数据区域的具体实现细节, 因此各款具体的Java虚拟机可能会用各种平台相关的, 更高效的方式进行等价的实现.</description><pubDate>Wed, 22 Apr 2020 07:48:58 GMT</pubDate></item><item><title>HBase最佳实践 - Bulk Loading原理与Spark实现</title><link>https://liebing.org.cn/hbase-bulk-loading.html</link><guid isPermaLink="true">https://liebing.org.cn/hbase-bulk-loading.html</guid><description>Apache HBase能够在大数据集上为我们提供随机, 实时的读写访问. 然而, 在实际业务中, 我们的原始应用并非基于HBase构建. 这时候, 如何将大量的数据(这些数据的存储量可能是TB甚至PB级别的)导入到HBase中成了我们首先需要解决的问题. 最基本的, 我们可能会想到使用Client APIs或利用MapReduce Job通过TableOutputFormat写入.</description><pubDate>Thu, 12 Mar 2020 14:33:21 GMT</pubDate></item><item><title>HBase最佳实践 - HBase过滤器源码剖析及自定义过滤器</title><link>https://liebing.org.cn/hbase-filter.html</link><guid isPermaLink="true">https://liebing.org.cn/hbase-filter.html</guid><description>本文首先结合HBase过滤器的源码, 讲述HBase过滤器抽象基类Filter中各个函数的作用. 最终给出一个简单的自定义过滤器的案例, 在此基础上分析了Filter中各个方法的执行流程, 读者在理解该案例的基础上可以编写任何个性化的过滤器. 本文涉及的源码基于HBase 1.4.x.</description><pubDate>Fri, 06 Mar 2020 14:15:20 GMT</pubDate></item><item><title>拜占庭将军问题 (The Byzantine Generals Problem)</title><link>https://liebing.org.cn/byzantine-generals-problem.html</link><guid isPermaLink="true">https://liebing.org.cn/byzantine-generals-problem.html</guid><description>拜占庭将军问题(The Byzantine Generals Problem)提供了对分布式共识问题的一种情景化描述, 由Leslie Lamport等人在1982年首次发表. 本文首先以插图的形式描述拜占庭将军问题, 最后在理解拜占庭将军问题的基础上对现有的分布式共识算法进行分类.</description><pubDate>Fri, 14 Feb 2020 13:54:27 GMT</pubDate></item><item><title>Tinyflow - A Simple Neural Network Framework</title><link>https://liebing.org.cn/tinyflow.html</link><guid isPermaLink="true">https://liebing.org.cn/tinyflow.html</guid><description>In recent years, thanks to the rapid growth of computing power, deep learning has blossomed. The increase in computing power is largely due to the GPUs.</description><pubDate>Tue, 23 Jul 2019 04:00:00 GMT</pubDate></item><item><title>Automatic Differentiation Based on Computation Graph</title><link>https://liebing.org.cn/automatic-differentiation.html</link><guid isPermaLink="true">https://liebing.org.cn/automatic-differentiation.html</guid><description>Automatic differentiation (AD), also called algorithmic differentiation or simply &quot;autodiff&quot; is one of the basic algorithms hidden behind the deep learning framework such as tensorflow, pytorch, mxnet…</description><pubDate>Mon, 22 Jul 2019 04:00:00 GMT</pubDate></item><item><title>Softmax Regression (SR)</title><link>https://liebing.org.cn/softmax-regression.html</link><guid isPermaLink="true">https://liebing.org.cn/softmax-regression.html</guid><description>Softmax regression (SR) (or multinomial logistic regression) is a generalization of logistic regression to the case where we want to handle multiple classes.</description><pubDate>Tue, 02 Jul 2019 04:00:00 GMT</pubDate></item><item><title>Logistic Regression (LR)</title><link>https://liebing.org.cn/logistic-regression.html</link><guid isPermaLink="true">https://liebing.org.cn/logistic-regression.html</guid><description>Logistic regression (LR) is a binary classification algorithm for predicting discrete values (In general, the predicted result is 0 or 1).</description><pubDate>Mon, 01 Jul 2019 04:00:00 GMT</pubDate></item><item><title>数据库事务系列-本地事务模型基础</title><link>https://liebing.org.cn/local-transaction.html</link><guid isPermaLink="true">https://liebing.org.cn/local-transaction.html</guid><description>事务, 或者更严格地说数据库事务, 可能是数据库理论中最难理解的术语之一. 要真正理解事务的内涵和其外延, 最重要的是思考和理解以下问题: + 为什么会出现事务? 事务是一种自然法则还是人为创造的? + 什么是事务, 或者说事务的定义是什么? + 事务有什么样的特性? 能满足什么样的应用场景? + 事务是否存在劣势? 有没有弥补方法?</description><pubDate>Fri, 11 May 2018 14:32:57 GMT</pubDate></item><item><title>编译原理实践 - JavaCC解析表达式并生成抽象语法树</title><link>https://liebing.org.cn/javacc-expression-ast.html</link><guid isPermaLink="true">https://liebing.org.cn/javacc-expression-ast.html</guid><description>本文使用JavaCC实现表达式的解析, 并将解析结果生成为抽象语法树(Abstract Syntax Tree, AST). 实际上对于表达式这种简单的&quot;语言&quot;, 可以边解析边计算从而直接得出结果, 生成抽象语法树有点&quot;杀鸡焉用牛刀&quot;了. 但是对于更加复杂的语言, 如通用计算机编程语言(C, Java等)或数据库查询语言SQL, 生成抽象语法树就是必须的了.</description><pubDate>Tue, 06 Mar 2018 04:15:20 GMT</pubDate></item></channel></rss>