- 博客(2452)
- 资源 (69)
- 问答 (17)
- 收藏
- 关注

原创 Flink 高分笔记
这篇博客文章总结了Flink流计算相关的基础知识和实践指南。主要内容包括:1) 流计算基础概念,如事件时间、Watermark机制、Exactly-once语义;2) Flink基础操作,如安装部署、程序结构、并发设置、故障恢复;3) DataStream API核心功能,包括时间概念、窗口计算、状态管理、双流Join等;4) Table API与SQL的使用方法和工作原理。文章提供了丰富的技术文档链接,涵盖了Flink从入门到进阶的各个方面,既有理论讲解也有实践案例,是一个系统的Flink学习资源合集。
2025-06-22 22:50:13
1078
原创 淘宝闪购实时分析黑科技:StarRocks + Paimon撑起秋天第一波奶茶自由
淘宝闪购项目通过StarRocks + Paimon实时湖仓架构,成功应对了"秋天的第一杯奶茶"活动带来的亿级流量冲击。技术团队采用物化视图优化、RoaringBitmap去重和大查询治理等创新方案,将千亿级数据查询耗时从分钟级压缩至秒级,并实现99.9%的刷新成功率。该架构支持分钟级实时决策,解决了传统离线架构的时效性瓶颈,为业务提供了灵活高效的数据支撑。通过300个计算节点和20800 CU的资源规模,最终支撑单日17万次查询峰值,成为即时零售领域的技术标杆。
2025-09-07 23:19:20
571
转载 快手基于 Apache Flink 的实时数仓建设实践
快手基于Flink的实时数仓建设经历了四个发展阶段:从大型活动场景到核心指标实时化,再到业务数据域建设,最终扩展到线上推荐场景。在技术架构上采用Lambda架构,通过Flink+Kafka构建实时链路,结合维表关联、多机房容灾等技术保障数据质量与高可用。实时数仓分层建设包含ODS层流量拆分、DWD/DWS层维度建模、ADS层场景化方案设计,针对不同业务需求提供灵活解决方案。特别是在单直播间累计等典型场景中,通过动态窗口等技术实现了高效稳定的实时指标计算。
2025-09-05 23:24:13
638
转载 腾讯基于 Flink SQL 的功能扩展与深度优化实践
以 Left Outer Join 为例,且假设左流的数据比右流的数据先到,左流的数据会去扫描右流数据的状态,如果找不到可以 Join 的数据,左流并不知道右流中是确实不存在这条数据还是说右流中的相应数据迟到了。但是对于 SQL,目前是没办法做到的。因此,扩展了现有的 Tumble Window,把迟到的数据也收集起来,同时迟到的数据并不是每来一条就重新触发窗口计算并向下游输出,而是会重新定义一个 Trigger,Trigger 的时间间隔使用 SQL 中定义的窗口大小,以此减少向下游发送数据的频率。
2025-09-05 16:12:49
263
原创 源码解读 | Flink Kafka Connector Source 如何提交 Offset
本文深入解析了Apache Flink 1.13.6中FlinkKafkaConsumer的Offset提交机制。
2025-08-31 17:35:10
887
原创 实战 | Flink DataStream 周期性事件时间触发器 ContinuousEventTimeTrigger
ContinuousEventTimeTrigger是Flink中用于在事件时间窗口内定期触发计算的触发器,相比仅触发一次的EventTimeTrigger,它能在窗口结束前以固定间隔输出中间结果。这种设计在保证最终结果准确性的同时,降低了延迟,适用于需要实时监控的业务场景。通过示例代码展示了如何配置每10秒触发一次计算的分钟级窗口,实现了对单词频次的实时聚合。ContinuousEventTimeTrigger通过"随堂小测+期末考试"的模式,在数据处理延迟和结果准确性之间取得了平衡,
2025-08-30 22:22:03
671
原创 源码解读 | Flink DataStream 窗口触发器 Trigger
本文介绍了Flink中的Trigger接口及其实现,重点分析了ProcessingTimeTrigger和EventTimeTrigger两种核心触发器。Trigger接口定义了onElement、onProcessingTime和onEventTime三个关键方法,分别处理元素到达、处理时间和事件时间到达时的响应。ProcessingTimeTrigger基于系统时间触发,而EventTimeTrigger依赖Watermark处理乱序事件。文章详细说明了触发器的四种响应方式
2025-08-30 10:00:46
823
原创 Flink 窗口剔除器 Evictor
Flink 的窗口模型支持通过 Evictor 在窗口计算前后删除元素,提供了更灵活的数据处理能力。Evictor 接口包含 evictBefore 和 evictAfter 方法,分别用于窗口函数调用前后的元素剔除。Flink 内置了三种 Evictor:CountEvictor(保留指定数量元素)、DeltaEvictor 和 TimeEvictor。以 CountEvictor 为例,其通过迭代器从窗口头部删除多余元素,可通过参数控制在窗口函数前后执行剔除。示例代码展示了如何结合事件时间滚动窗口
2025-08-28 23:55:38
701
原创 Flink 窗口触发器 Trigger
Flink 窗口触发器(Trigger)决定了窗口何时触发计算。本文介绍了 Trigger 的接口方法(如 onElement、onProcessingTime 等)和返回结果(CONTINUE、FIRE、PURGE 等),并列举了内置触发器(如 EventTimeTrigger、CountTrigger 等)及其适用场景。针对特定需求(如按用户数触发窗口计算),文章还展示了如何通过继承 Trigger 抽象类实现自定义触发器,以统计文章点击次数和平均点击次数。通过状态管理和触发逻辑的结合,可以灵活控制窗口
2025-08-27 23:16:43
994
原创 Flink DataStream 如何选择时间特性
在无界流中,数据是持续不断产生的。当我们要计算“过去一小时的销售额”或“每分钟的异常用户数”时,必须明确一个问题:"过去一小时"和"每分钟"是基于哪个时钟定义的?是数据产生时的世界时间(事件时间),还是数据到达Flink系统时的机器时间(处理时间)?
2025-08-23 23:06:38
676
原创 kafka 3.9.1 Error: VM option ‘UseG1GC‘ is experimental and must be enabled via -XX:+UnlockExperiment
摘要: Kafka集群启动时因JVM参数冲突报错,提示UseG1GC是实验性功能需通过UnlockExperimentalVMOptions解锁。该问题源于Kafka新版默认配置与低版本JDK8的兼容性问题。解决方案包括:1)升级Java版本(推荐);2)临时修改Kafka启动脚本,在kafka-run-class.sh中添加-XX:+UnlockExperimentalVMOptions参数解锁G1GC功能。(149字)
2025-08-20 23:05:22
440
原创 实战 | ZooKeeper 3.8.4 伪分布式模式安装与启动
本文详细介绍了ZooKeeper伪集群的安装与配置步骤。主要内容包括:通过下载tar包安装ZooKeeper 3.8.4版本;配置多实例的zoo.cfg文件,设置不同端口实现单机伪集群;创建myid文件标识不同节点;配置环境变量;编写启动/停止脚本管理集群。关键点在于调整配置文件中的端口号和dataDir路径,确保各实例配置唯一性,并通过myid文件区分节点。最后给出了启动集群和验证状态的脚本示例,帮助用户快速搭建本地测试环境。
2025-08-17 22:45:48
605
原创 实战 | Zookeeper 3.8.4 Problem starting AdminServer on address 0.0.0.0, port 8080
摘要: Zookeeper 3.8.4集群部署时出现AdminServer端口冲突,因默认8080端口被占用导致启动失败。分析发现伪分布式部署中三个节点未显式配置admin.serverPort,均尝试绑定同一端口。解决方案是为每个节点的配置文件(zoo1.cfg/zoo2.cfg/zoo3.cfg)分别指定唯一端口(如2081/2082/2083),避免冲突。此问题在单机多实例部署时需特别注意端口唯一性。
2025-08-17 22:32:53
377
原创 优化 | Hive 简单查询 FetchTask
摘要: Hive的FetchTask机制通过绕过MapReduce/Tez/Spark引擎,直接从存储层读取数据,显著优化简单查询性能。核心配置参数hive.fetch.task.conversion(默认more)控制其行为,支持none(禁用)、minimal(仅基础查询)和more(扩展支持列筛选和过滤)。配合hive.fetch.task.conversion.threshold(默认1GB)可避免大数据量误触发。通过EXPLAIN查看Stage-0可确认是否启用FetchTask。该机制将简单查询
2025-08-16 19:00:19
625
原创 优化 | Hive 本地执行模式
Hive本地执行模式是一种优化小数据查询性能的轻量级方案。当满足输入数据量小于128MB且任务数少于4个时,Hive可自动在单机执行查询,避免了启动分布式MapReduce作业的系统开销。通过配置hive.exec.mode.local.auto等参数可启用该模式,测试显示本地模式查询耗时仅7.5秒,而远程模式需要89秒。本地模式特别适合处理小规模数据查询,能显著减少资源占用和执行时间。该功能自Hive 0.7.0版本引入,可通过临时SQL设置或修改hive-site.xml实现永久配置。
2025-08-14 23:29:30
829
原创 原理解析 | Hive 从 GROUP BY 查询看 MapReduce 执行全流程
本文通过分析Hive执行GROUP BY查询的MapReduce过程,展示了SQL到MapReduce作业的转换机制。以一个用户行为表为例,解析了计算不同行为类型数量的查询执行计划。执行过程分为两个Stage:Stage-1完成MapReduce作业(包括表扫描、分组聚合和结果输出),Stage-0负责最终结果获取。执行计划详细展示了每个阶段的算子操作(如TableScan、Select、GroupBy等)及数据流转过程,揭示了Hive如何将SQL逻辑转化为分布式计算任务。该案例帮助我们理解Hive查询优化
2025-08-12 23:29:13
946
转载 Apache Paimon 实时数据湖: Streaming Lakehouse 的存储底座
Apache Paimon作为实时数据湖存储底座,支持流计算3.0架构,通过CDC实时入湖实现高效数据更新。相比传统Hive数仓,Paimon采用主键表+Tag机制,提供实时查询、离线视图和增量查询能力,显著降低存储成本。其LSM文件复用特性可实现数十倍存储优化,同时支持Flink双流Join、Lookup Join和Partial Update等多种数据打宽方案。Paimon已形成包含83+贡献者的繁荣生态,兼容Flink、Spark等多种计算引擎,并持续扩展外键打宽等能力,为实时湖仓场景提供灵活高效的解
2025-08-07 23:43:59
995
转载 Apache Paimon 在抖音集团多场景中的优化实践
摘要 抖音集团采用Lambda架构进行实时数仓建设,存在维护成本高、计算口径难对齐等问题。通过引入Apache Paimon流式数据湖技术,优化了游戏视频指标上卷和财经多流拼接两个典型场景。在游戏场景中,Paimon作为维表存储,实现了流批一体开发模式,提高了数据新鲜度并解决了乱序问题;在财经场景中,通过多流拼接构建完整用户交易链路,支持实时OLAP查询。方案显著降低了开发维护成本,提升了数据处理效率和查询能力,为实时数仓建设提供了新思路。Paimon的序列字段、变更日志生成等特性在解决实际问题中发挥了关键
2025-08-04 00:00:28
572
原创 Hive 3.1.3 java.lang.NoSuchMethodError: com.google.common.base.Preconditions.xxx
摘要: Hive 3.1.3初始化时出现NoSuchMethodError异常,原因是Guava版本冲突(Hive依赖19.0,Hadoop 3.2.1依赖27.0)。解决方案是统一使用Hadoop的Guava 27.0版本:删除Hive的guava-19.0.jar,将Hadoop的guava-27.0-jre.jar复制到Hive的lib目录下,重新执行初始化命令即可解决。 关键词: Hive、Guava、版本冲突、NoSuchMethodError、解决方案
2025-08-03 22:24:23
301
转载 Apache Paimon:Streaming Lakehouse is Coming
本文介绍了数据分析架构从Hive到Lakehouse的演进过程。Lakehouse架构具有计算存储分离、冷热数据分层、操作灵活、查询速度快等优势,并能将时效性提升至分钟级。Flink是降低时效性的核心引擎,但现有Lakehouse与Flink实时数仓存在割裂问题。文章重点介绍了Apache Paimon这一新型流式数据湖格式,它专为流更新设计,支持Flink和Spark引擎,延迟仅1-5分钟,可实现CDC更新入湖、Partial-Update等场景,简化了流计算链路。Paimon社区发展迅速,已成为生产可用
2025-07-31 22:59:23
609
转载 Apache Fluss:面向实时分析设计的下一代流存储
当前业界呈现出一个显著的趋势,即大数据的处理正在从离线模式转向实时化。我们可以观察到,多个行业和应用场景都在进行实时化的演进。例如,互联网、车联网和金融等领域都正通过挖掘实时数据来提升业务价值。在技术方面,大数据计算架构经历了显著的演变。从最初的 Hive 传统数据仓库,到引入 Lakehouse 湖仓架构,再到目前国内流行的 Paimon 流式湖仓架构,这些演进的核心驱动力在于提升业务的时效性。从传统的 T+1 天模式,逐步缩短到 T+1 小时,再到 T+1 分钟。
2025-07-29 23:58:21
71
翻译 原理解析 | Hadoop 2.x HDFS 架构
HDFS(Hadoop分布式文件系统)是一个高容错、高吞吐量的分布式文件系统,专为大数据处理设计。其核心架构包括主节点NameNode(管理文件系统元数据)和从节点DataNode(存储实际数据块)。HDFS采用机架感知的副本放置策略确保数据可靠性,支持一次写入多次读取的简单一致性模型,并优先将计算任务调度到数据所在节点以提升效率。系统启动时通过安全模式进行数据块校验,使用FsImage和EditLog持久化元数据变更。HDFS适用于海量数据存储场景,可在低成本硬件上实现跨平台部署。
2025-07-19 22:12:14
80
原创 原理解析 | Hadoop HDFS 剖析文件写入
本文详细描述了HDFS文件写入过程和副本放置策略。写入过程涉及客户端通过DistributedFileSystem创建文件,数据被分块写入由DataNode组成的复制管线,并采用确认队列机制确保数据可靠性。当DataNode故障时,系统会自动处理确保数据完整性。副本放置策略综合考虑可靠性、读写带宽和负载均衡,默认策略将首个副本放在客户端节点,第二个副本置于不同机架,第三个副本在同一机架,其余随机分布。这种设计既保证了数据高可用性,又优化了读写性能。
2025-07-18 22:29:04
48
转载 Flink 1.9 Table API & SQL TableEnvironment 如何选择
本文详细介绍了Flink 1.9中的5种TableEnvironment及其适用场景。TableEnvironment是Table & SQL程序的入口,主要职能包括对接外部系统、表管理、SQL执行等。在Flink 1.9中,保留了1个TableEnvironment接口、2个BatchTableEnvironment和2个StreamTableEnvironment接口,分别支持Java和Scala API。文章对比了不同TableEnvironment在作业类型、API支持等方面的区别,并通过代
2025-07-14 23:23:38
53
翻译 原理解析 | 深入理解 Apache Flink SQL 动态表的持续查询
Apache Flink通过Table API和SQL为流处理提供统一的关系型接口,其核心创新在于动态表(Dynamic Tables)概念。动态表持续更新并可像常规表一样查询,实现流批统一语义。Flink的关系API将流数据转换为动态表,执行连续查询后转回数据流,支持窗口聚合、状态处理等复杂操作。当前版本(2017)已支持基本查询,未来将扩展更新结果功能,以覆盖更多流分析场景。这种设计使SQL成为流处理的标准语言,降低技术门槛,同时保持Flink的高吞
2025-07-07 23:28:19
103
原创 原理解析 | 深入理解 Apache Flink 数据流类型和转换关系
Flink提供了多种数据流类型来实现流批处理统一编程模型。核心数据流类型包括: DataStream:基础并行流,支持map、filter等逐条转换操作 KeyedStream:通过keyBy分组后的数据流,可访问keyed状态 WindowedStream:基于key分组和时间窗口的流,支持窗口聚合 JoinedStreams/CoGroupedStreams:双流join操作,基于窗口实现 ConnectedStreams:连接异构双流并共享状态,不同于union操作 这
2025-06-29 13:10:24
976
翻译 原理解析 | 深入了解 Apache Flink 1.10 TaskManager 内存管理改进
Apache Flink 1.10对内存模型进行了重大优化,提供了更灵活的内存配置选项。文章介绍了Flink的Task Manager内存组成,包括JVM Heap和Off-Heap内存,以及用户代码和框架如何利用这些内存。新版提供了三种内存配置方式:总进程内存、总Flink内存以及细粒度控制Task Heap和Managed Memory。文章还探讨了比例分配内存的方法,并给出了控制容器内存限制的实用建议,如调整RocksDB状态和JVM参数等。这些改进使Flink在容器化环境中运行更加稳定高效。
2025-06-23 23:10:57
92
翻译 原理解析 | 深入了解 Apache Flink 网络栈 II:监控、指标和处理背压
在前面的章节中,我们讨论了如何监控 Flink 的网络栈,主要涉及识别反压:发生的位置,发生的源头,以及(可能)发生的原因。可以通过两种方式来识别:对于简单的场景和调试会话,使用反压监测器;对于持续监控、更深入的分析和更少的运行时开销场景,使用 Flink 的任务和网络栈指标。反压可能由网络层本身引起,但在大多数情况下,是由高负载下的某些子任务引起的。可以通过分析上述指标来区分这两种场景。我们还提供了一些关于监视资源使用情况以及追踪从数据源到数据汇网络延迟的手段。
2025-06-22 22:35:20
79
转载 原理解析 | 深入了解 Apache Flink 的网络栈
原文:Flink 的网络栈是组成模块的核心组件之一,也是每个 Flink 作业的核心部分。它连接了 TaskManager 的各个子任务(Subtask),因此,对于 Flink 作业的性能(包括吞吐量和延迟指标)都至关重要。与 TaskManager 和 JobManager 之间通过基于 Akka 的 RPC 通信的控制通道不同,TaskManager 之间的网络栈依赖于 Netty 的低级 API。这篇博文是关于网络栈系列文章中的第一篇。
2025-06-22 15:34:54
76
转载 Flink Kafka Connector 实现机制简析
Flink Kafka Connector由Consumer和Producer两部分组成,通过Checkpoint机制实现Exactly-Once语义。Consumer通过KafkaFetcher线程和Handover队列异步获取数据,并定期保存分区和偏移量状态。Producer基于TwoPhaseCommitSinkFunction实现两阶段提交协议:preCommit阶段预提交数据,checkpoint完成后正式提交事务。这种机制使Flink能在
2025-06-15 21:52:37
86
原创 Flink 从 Savepoint 备份中启动作业
Apache Flink的Savepoint功能支持流处理程序的零停机升级、状态迁移、版本回滚等场景,显著优于其他流处理器。通过bin/flink savepoint手动触发Savepoint并指定存储路径,或从Savepoint恢复作业(bin/flink run -s)。示例展示了从Kafka消费单词并统计频率的作业,启动作业后手动触发Savepoint,记录消费位点和状态,后续可通过Savepoint恢复作业状态并继续处理。流程包括启动作业、触发Savepoint(保存状态和偏移量)及从Sav
2025-06-14 21:36:23
825
原创 Flink DataStream Hadoop is not in the classpath
本地运行Flink程序时出现 UnsupportedFileSystemSchemeException 异常,提示无法支持HDFS文件系统。原因是Flink需依赖Hadoop客户端实现HDFS支持。解决方法是在pom.xml中添加hadoop-client依赖(版本需匹配集群),如2.10.1版本。该问题常发生于代码中使用HDFS路径但未配置Hadoop依赖的情况。
2025-06-14 14:28:54
435
转载 Flink 1.13 State Backend 优化与生产实践
Flink 1.13版本在State Backend方面进行了多项重要改进:1)引入State访问性能监控功能,可通过采样记录延迟数据;2)实现Savepoint格式统一,支持不同State Backend类型间的切换;3)将状态存储和检查点概念分离,API设计更清晰;4)优化RocksDB的分区索引功能,显著提升内存受限场景性能;5)默认配置调整,如异步检查点和多线程传输。此外,持续优化RocksDB内存管控机制,通过统一管理Write Buffer和Block Cache来避免内存溢出,并改进小文件写入
2025-06-08 13:41:32
797
原创 Hive 实战:NULL 的隐身术陷阱
Hive SQL中NULL值在不等式比较中的陷阱解析 摘要:Hive开发中,NULL值在不等式比较(!=或<>)中的特殊行为是一个常见陷阱。NULL不是值而是未知标记,任何与NULL的比较结果都是NULL而非TRUE/FALSE。文章通过销售数据案例演示,当使用region != 'North'条件时,NULL区域的数据会被意外过滤。解决方法包括使用OR IS NULL或COALESCE函数。此外还分析了NULL在运算、IF、CASE WHEN、HAVING和聚合函数中的特殊表现,强调正确处理N
2025-06-07 09:35:18
887
apache-mahout-distribution-0.11.1-src
2015-11-30
log4j-1.2.17
2015-11-30
LINUX内核设计与实现
2015-12-14
JavaEE企业应用实战-Struts2+Spring3+Hibernate整合开发
2015-12-17
Android技术内幕.系统卷
2015-12-17
Android高级编程
2015-12-17
Android开发精要
2015-12-17
重构-改善即有代码的设计
2015-12-14
Mahout算法解析与案例实战
2015-12-16
apache-maven-3.3.9-bin
2015-11-30
算法艺术和信息学竞赛
2015-12-14
Better bitmap performance with Roaring bitmaps
2023-03-06
美团外卖离线数仓建设实践
2023-02-19
log4j所需jar包
2016-01-20
Hadoop实战中文版
2015-12-25
Spring-Jar-4.2.4
2016-01-28
Apache Spark源码剖析
2016-11-12
Android开发秘籍
2015-12-17
大型网站技术核心原理与案例分析
2015-12-25
Shell脚本学习指南
2016-05-28
Android应用开发揭秘
2015-12-17
Redis 入门指南
2017-06-02
精通Spring
2016-02-07
Hive Range Between 结果错误问题
2023-02-28
Storm Trident 抛异常不重发
2018-11-23
hive SERDEPROPERTIES 实现正则过滤
2018-06-05
Flink 关于窗口Window的问题
2018-01-17
Hive 运行SQL 重定向文件 输出WARN日志
2017-06-13
Hadoop Distcp报错 队列问题
2017-01-17
Hive Join 失败
2016-11-28
Hive 查询问题
2016-09-07
Hive LOAD DATA 错误
2016-07-23
[ElasticSearch] 中文字符串精确搜索 term 搜不到结果
2016-07-05
mysql group by 统计问题
2016-06-17
大型分布式网站架构的演进
2016-05-16
ubuntu IntelliJ Idea设置快捷方式问题
2016-03-08
罗技键盘 k380 连接上 没有任何的反应?
2016-03-06
Maven archetype:generate报错
2016-01-25
Log4j问题
2016-01-16
Java Stringbuilder调用append()方法报错
2015-12-20
nosql开放性问题
2015-12-18
TA创建的收藏夹 TA关注的收藏夹
TA关注的人