- 博客(2485)
- 资源 (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
1301
转载 货拉拉用户画像基于 Apache Doris 的数据模型设计与实践
货拉拉基于Apache Doris构建高效画像计算系统,实现人群标签批量计算与秒级圈选。面对3000+标签、5万+人群的业务规模,Doris通过宽表、高表和人群位图表三类存储模型协同工作,支撑精细化运营需求。系统采用位图计算为核心的异构查询方案,实现宽表、高表及人群表的无缝联动,查询性能提升30倍,内存开销降低50%。该架构支持无限层级规则嵌套,允许人群依赖计算,大幅提升营销活动效率。
2025-11-17 22:52:32
523
转载 数仓设计 I:数据模型架构的四层七阶,数据湖仓建模的第一块基石
本文深入探讨了数据仓库的分层架构设计原则。文章提出了"四层七阶"的分层模型:1)ODS层作为原始数据存储;2)DW层为核心数据处理区,细分为DWD(明细)、DWM(中间)和DWS(汇总)三层;3)APP层面向应用服务;4)维表层专供维度管理。作者强调分层设计应遵循五大原则:高内聚低耦合、核心与扩展分离、公共逻辑下沉、成本性能平衡、数据可回滚。同时指出主题域划分可按业务过程或数据域两种方式,最终目标是构建清晰、稳定、可扩展的数据架构,为业务提供准确高效的数据支撑。
2025-11-16 23:00:22
25
原创 Apache Paimon 入门 如何选择表模式
Apache Paimon数据湖支持多种表模式,包括主键表和Append表。主键表支持CDC数据变更处理,分为固定桶和动态桶模式,分别适用于分区内更新和跨分区更新场景。Append表则针对仅插入数据的场景,提供Scalable和Queue两种模式,前者适合高吞吐流处理和增强型Hive表场景,后者适用于严格顺序消费的需求。每种表模式均经过生产验证,用户可根据具体需求选择合适的数据处理方式。
2025-11-16 22:11:55
930
原创 深入解析基于 RoaringBitmap 实现的 Bit Slice Index (BSI)
然后对二进制数据从低位向高位遍历,将第 i 位值为 1 的 user_id 存入切片 RoaringBitmap 的 slices[i] 中,形成位切片索引 BSI(Bit Slice Index)。剩下最重要的事情就是为 BSI 添加新的 KV,核心逻辑是在 value 二进制位对应切片 RoaringBitmap 中添加 key:从低位到高位遍历切片 RoaringBitmap,如果 value 二进制位对应的 bit 为 1 则对应的切片 RoaringBitmap 添加 key。
2025-11-16 22:03:36
543
原创 Maven 实战:Failure to find com.github.RoaringBitmap.RoaringBitmap:roaringbitmap:jar
摘要:Maven项目配置RoaringBitmap依赖时出现下载失败问题,错误显示阿里云镜像中未找到该依赖。分析表明Maven镜像配置将阿里云设为全局镜像,覆盖了JitPack仓库请求。解决方案分两步:1)在pom.xml中添加JitPack仓库配置;2)修改settings.xml文件,通过添加!jitpack.io将JitPack仓库从阿里云镜像覆盖中排除。这样可确保RoaringBitmap依赖从正确的仓库下载。
2025-11-15 10:17:11
486
原创 用户画像实战:使用 RoaringBitmap 存储画像标签
摘要:本文探讨了用户画像标签存储方案,指出宽表存储在超大规模场景下存在效率问题,推荐使用Bitmap索引方案。文章分析了属性标签和行为标签的不同特点,提出属性标签适合Bitmap压缩存储,并通过实例说明如何避免多列层级关系导致的错误。实践部分展示了将宽表转换为Bitmap表并利用位图运算实现高效查询的方法,同时强调了对字符型用户ID进行整数编码的必要性,推荐使用RoaringBitmap和自定义Hive函数实现位图计算。该方案适用于标签数量多、数据规模大的场景,能显著提升查询性能。
2025-11-08 22:53:38
602
原创 源码解读 | Flink SQL 深入了解 TableFactory 发现机制
可扩展性:基于 SPI 机制,支持用户自定义扩展灵活性:通过多级匹配策略处理复杂的 TableFactory 选择场景错误诊断:提供详细的错误信息帮助用户调试配置问题。
2025-11-02 22:18:52
918
转载 深入解读 Flink SQL 1.11
自 2019 年初阿里巴巴宣布向 Flink 社区贡献 Blink 源码并在同年 4 月发布 Flink 1.8 版本后,Flink 在社区的活跃程度犹如坐上小火箭般上升,每个版本包含的 git commits 数量以 50% 的增速持续上涨, 吸引了一大批国内开发者和用户参与到社区的生态发展中来,中文用户邮件列表(user-zh@)更是在今年 6 月首次超出英文用户邮件列表(user@),在 7 月超出比例达到了 50%。假设你在一个电商公司,订单和物流是你最核心的数据,你想要实时分析订单的发货情况。
2025-11-01 22:11:51
119
转载 官宣 | Apache Flink 1.13 发布公告
在流式 SQL 查询中,一个最经常使用的是定义时间窗口。Flink 1.13 中引入了一种新的定义窗口的方式:通过 Table-valued 函数。这一方式不仅有更强的表达能力(允许用户定义新的窗口类型),并且与 SQL 标准更加一致。Flink 1.13 在新的语法中支持 TUMBLE 和 HOP 窗口,在后续版本中也会支持 SESSION 窗口。我们通过以下两个例子来展示这一方法的表达能力。例 2:用户在 table-valued 窗口函数中可以访问窗口的起始和终止时间,从而使用户可以实现新的功能。
2025-11-01 10:05:18
54
原创 Flink SQL 深入了解日期与时间函数
Flink SQL 提供了丰富的日期时间函数,包括获取当前系统时间的函数如 LOCALTIME、LOCALTIMESTAMP、CURRENT_DATE、CURRENT_TIMESTAMP/NOW()等。这些函数在不同时区下会返回对应时区的值(Flink 1.13.0+版本),类型分别为TIME(0)、TIMESTAMP(3)、DATE等。在流模式下会对每个记录计算,而批处理模式下只在查询开始时计算一次。使用时需注意时区设置对结果的影响。
2025-10-26 15:59:17
925
转载 官宣 | Apache Flink 1.12 发布公告
Flink 1.12.0正式发布,带来了多项重要改进:DataStream API支持批处理模式,实现流批统一;新增基于Kubernetes的高可用方案;Kafka SQL connector支持upsert模式;PyFlink扩展支持DataStream API和Kubernetes部署。其他优化包括:新的Data Sink API、Pipelined Region调度、Sort-Merge Shuffle等。该版本包含300多位贡献者的1000多项修改,显著提升了可用性和API一致性。用户可从官网下载体
2025-10-22 23:16:48
94
原创 实战 | Flink DataStream 如何通过 GenericWriteAheadSink 实现 WAL Sink
Flink 通过 WAL(预写日志)机制实现端到端 Exactly-Once 语义。核心原理是将每个 Checkpoint 周期的数据暂存到算子状态中,待 Checkpoint 完成后再写入外部系统。GenericWriteAheadSink 抽象类简化了 WAL Sink 的实现,但仍存在两种极端情况可能导致数据重复:发送过程中断或提交确认失败。文中以 StdOutWALSink 为例展示具体实现,采用 FileCheckpointCommitter 持久化已提交的 Checkpoint 信息。该方案虽不
2025-10-19 22:11:06
340
原创 源码解读 | Flink DataStream GenericWriteAheadSink 深度解析
Flink 1.13.6 的 GenericWriteAheadSink 通过检查点机制实现端到端精确一次语义。该抽象类继承自 AbstractStreamOperator,采用预写日志模式,将输入元素暂存至状态后端,仅在检查点完成时提交数据。核心机制包括:1)构造器初始化检查点提交器;2)open()清理已提交的检查点;3)processElement()序列化数据到任务管理的状态流;4)检查点恢复时重建待提交列表。通过 CheckpointCommitter 标记成功提交的检查点,确保故障恢复时数据不丢
2025-10-19 20:08:29
693
原创 Flink SQL 如何使用 Upsert Kafka Connector
Flink Upsert Kafka Connector支持以upsert方式读写Kafka Topic数据,作为源表时可将Kafka数据转为变更日志流,作为结果表时能消费上游变更日志流。该连接器需要定义主键约束,提供至少一次语义保证,并支持分区级watermark。本文详细介绍了依赖配置、元数据、连接器参数及特性,并通过订单统计示例展示了如何创建Upsert Kafka结果表,将商品类别的订单数据聚合后写入Kafka。
2025-10-18 23:47:27
539
原创 原理解析 | Flink SQL 流查询的确定性
本文探讨了SQL中确定性的概念及其在批处理和流处理中的表现差异。确定性指相同输入总能产生相同结果,但批处理中仍存在非确定性场景,主要源于动态函数(如CURRENT_TIMESTAMP)和不确定函数(如UUID())的行为差异。流处理中,由于数据无界性,动态表上的连续查询会放大不确定性,包括源连接器回溯、处理时间计算和状态TTL淘汰等因素。Flink SQL的确定性仅限于计算部分,不包含外部数据源的不确定性。
2025-10-14 23:12:31
1018
转载 Flink SQL 非确定性更新(NDU)问题探索和规避
本文探讨了Flink流处理系统中的非确定性更新(NDU)问题及其解决方案。NDU问题主要由非确定函数(如RAND()、NOW())、CDC元数据字段变化和维表JOIN引起,会导致状态匹配错误、数据丢失等问题。Flink 1.16版本通过物理计划检测和物化能力引入,能够识别并处理这些问题:对非确定函数直接报错提示,对维表JOIN则通过缓存状态避免不一致。虽然这些方案需要手动开启且存在一定代价,但建议用户尽早启用以降低修复成本。文章强调NDU问题无法彻底解决,需要根据业务场景权衡处理。
2025-10-13 22:39:40
683
原创 Flink SQL Kafka Connector
本文介绍了Flink 1.13版本中Kafka Connector的使用方法。主要内容包括:1) Kafka Connector的Maven依赖配置;2) 如何创建Kafka Source表并配置连接参数;3) 如何获取Kafka的元数据信息,如topic、partition、offset等;4) 详细列出了Kafka Connector的各项配置参数及其说明。文章通过SQL示例展示了如何定义Kafka表结构和元数据字段,并提供了完整的示例代码链接。该Connector支持从Kafka topic消费数据以
2025-10-12 23:09:49
815
翻译 Spark SQL 自适应查询执行 AQE: 在运行时加速执行性能
Spark 3.0引入的自适应查询执行(AQE)框架通过运行时优化显著提升了查询性能。AQE在查询执行过程中基于物化点收集的统计信息动态调整计划,提供三大核心功能:1)动态合并shuffle分区以优化任务粒度;2)运行时调整Join策略为更高效的广播hash join;3)自动检测并处理数据倾斜Join。TPC-DS测试显示查询性能最高提升8倍,平均提升1.1倍以上。AQE有效解决了静态统计信息不准确的问题,减少了对精确统计和手动调优的依赖,使查询优化对数据变化更具弹性。通过设置spark.sql.adap
2025-10-11 22:43:27
831
原创 实战 | Flink CDC 使用 CDC 构建 Streaming ETL
本文介绍了如何使用Flink CDC构建MySQL和Postgres的实时ETL流程。教程通过Docker环境部署了MySQL(存储商品和订单数据)、Postgres(存储物流信息)、Elasticsearch(数据接收器)和Kibana(数据可视化)等组件。详细演示了如何准备数据源(在MySQL中创建products/orders表,Postgres中创建shipments表并插入测试数据),以及如何配置Flink环境(下载依赖包)。最终目标是实现订单表与商品、物流信息的实时关联,构建宽表并写入Elast
2025-10-08 19:16:38
741
原创 Flink CDC The MySQL server has a timezone offset which does not match the configured timezone Asia S
Flink CDC程序运行时因MySQL服务器时区(UTC)与配置时区(Asia/Shanghai)不匹配导致异常。解决方案包括修改MySQL时区为+08:00(临时或持久化配置),或调整Flink CDC的server-time-zone参数。建议根据业务需求选择合适方案,确保时间字段处理一致。修改MySQL时区后需验证配置是否生效(SHOW VARIABLES LIKE '%time_zone%')。注意临时修改重启后失效,持久化配置需修改my.cnf文件或使用MySQL 8.0+的SET PERSIS
2025-10-08 18:43:00
342
原创 优化 | Hive Join 优化之 Skew Join 实战
文章摘要: 本文介绍了Hive中的Skew Join优化技术,用于解决数据倾斜问题。当某些Join Key记录数异常多时,常规Join会导致性能问题。Skew Join通过自动检测倾斜Key(通过hive.skewjoin.key参数设置阈值),将处理分为两部分:对倾斜Key使用Map Join策略,对非倾斜Key仍用Common Join,最后合并结果。文章通过订单表关联省份表示例,对比了优化前后的执行计划差异,并说明了需要配置hive.optimize.skewjoin和hive.skewjoin.ke
2025-10-08 10:39:42
614
原创 优化 | Hive Join 优化之 Sort Merge Bucket Map Join 实践
Hive中的Sort Merge Bucket Map Join(SMB Map Join)是在Bucket Map Join基础上优化的连接方式,它要求两表在Join Key上预先分桶且排序。相比Bucket Map Join使用Hash Join算法,SMB Map Join采用更高效的Sort Merge Join算法。启用该优化需配置hive.optimize.bucketmapjoin.sortedmerge=true等参数,支持自动转换无需手动提示。通过案例演示,SMB Map Join能有效提
2025-10-05 19:56:57
902
原创 优化 | Hive Join 优化之 Bucket Map Join 实践
Hive的Bucket Map Join是一种优化大表Join大表的技术,要求两表均为分桶表且桶数量成倍数关系。使用时需手动添加Hint提示并配置相关参数(如关闭CBO优化)。以订单表关联支付表为例,优化前使用Common Join需MapReduce作业完成,而Bucket Map Join可显著提升性能。执行计划显示优化前包含两个阶段:MapReduce阶段和结果返回阶段。
2025-10-04 09:15:08
490
原创 实战 | Hive 执行计划可视化工具 hive-query-plan-viz
本文介绍了如何在Mac环境下搭建并运行Hive查询计划可视化工具。首先通过Homebrew安装必要的软件包管理器,然后使用nvm管理Node.js版本(需确保版本≤14)。接着下载源码并安装项目依赖,通过npm run serve启动开发服务器进行实时调试。文章详细说明了打包步骤(npm run build)以及如何通过Python或http-server预览打包后的项目。最后展示了如何使用格式化后的Hive执行计划(JSON格式)在可视化工具中生成执行计划图,并以COUNT DISTINCT查询为例演示了
2025-10-01 20:25:03
604
原创 实战 | Mac 如何使用 nvm 管理 node 版本
现在想使用 nvm 安装特定版本的 node,例如。当前你也可以再切换回原先 node 版本,使用。
2025-10-01 19:24:50
399
原创 Flink CDC YAML:面向数据集成的 API 设计
Flink CDC 是一个基于数据库日志的变更数据捕获技术,能够实现全量和增量数据的一体化读取,提供端到端的流式数据集成框架。3.0版本后,Flink CDC不仅支持数据源读取,还支持写入下游系统,确保实时性和精确一次语义。相比传统CDC方案(如DataX+Debezium组合),Flink CDC简化了流程,通过单一作业即可完成同步,支持亚秒级延迟和YAML配置。其核心优势包括全增量一体化处理、细粒度Schema Evolution支持、强大的ETL转换能力,以及社区驱动的持续演进。Flink CDC 3
2025-09-25 23:19:23
1076
原创 实战 | Flink SQL Deduplication 高效去重
摘要 本文介绍了 Flink SQL 中的去重操作(Deduplication),通过 ROW_NUMBER() 窗口函数实现数据去重。文章详细讲解了两种去重策略:保留第一行(Keep FirstRow)和保留最后一行(Keep LastRow),分别对应正序(ASC)和倒序(DESC)排序方式。针对每种策略,提供了基于处理时间和事件时间的示例代码,并分析了不同情况下的输出结果特性。保留第一行时,基于处理时间的去重输出为 Append-only 流,而基于事件时间的去重则可能产生 Retract 流。文章包
2025-09-21 22:40:28
895
原创 实战 | Flink SQL 窗口 TopN
窗口TopN是一种特殊的TopN操作,基于窗口表值函数(TVF)实现,为每个窗口和分区键返回N个最小或最大值。与流式TopN不同,窗口TopN在窗口结束时输出最终结果,产生Append-only流,不会出现回撤数据。其语法要求PARTITION BY子句必须包含window_start和window_end列。目前仅支持与滚动、滑动和累积窗口配合使用,不支持会话窗口。通过示例展示了如何计算每10分钟内销售额最高的前2个商品类目,结果以追加方式输出,不会产生中间结果或回撤记录。
2025-09-21 08:56:31
1108
转载 优化 | 如何写出简单高效的 Flink SQL
摘要:Flink SQL 最佳实践重点介绍了如何通过优化器提升查询性能,包括减少重复计算、状态访问等关键点。文章深入解析了 Flink SQL 的编译优化过程,特别强调了子图复用(Sub-Plan Reuse)和聚合优化(Fast Aggregation)两大核心技术。通过 MiniBatch 和两阶段聚合(Local/Global)可有效解决状态频繁访问和数据倾斜问题。最佳实践建议:对延迟不敏感场景开启 MiniBatch,结合视图复用减少计算量,利用两阶段聚合缓解热点问题。(149字)
2025-09-20 19:14:33
650
原创 实战 | Flink SQL 流式 TopN 实战
Flink SQL 中的 TopN 功能用于实时计算排行榜,支持分组和全局排序。语法通过两层查询实现:内层使用 ROW_NUMBER() 窗口函数计算排名,外层筛选 TopN 记录。TopN 支持两种算法:UpdateFastRank(高性能)和 RetractRank(通用)。示例展示了商品类目销售额 Top3 的计算过程,包括数据更新时的动态排名变化。该功能适用于实时统计报表和大屏展示场景,能够高效处理流式数据的动态排序需求。
2025-09-20 19:09:22
729
原创 Flink 1.13.6 VM option ‘UseG1GC‘ 异常导致 Task Slots 为 0
Flink集群启动后Task Slots显示为0,检查日志发现JVM因-XX:+UseG1GC参数冲突无法启动。问题源于Flink默认配置与低版本JDK8不兼容,需通过-XX:+UnlockExperimentalVMOptions解锁实验性功能。解决方案:1)升级Java版本(推荐);2)修改taskmanager.sh脚本,添加解锁参数后重启集群即可修复。后者为临时方案,适用于无法立即升级JDK的环境。问题解决后Web UI可正常显示可用Slots。
2025-09-13 23:38:57
351
原创 实战 | Kafka 3.9.1 安装与启动
本文详细介绍了Kafka 3.9.1伪分布式集群的安装与配置过程。主要内容包括:下载解压Kafka并配置环境变量;安装依赖的ZooKeeper服务;配置三个Kafka节点(9092/9093/9094端口)的server.properties文件;创建启动和停止脚本;验证集群启动状态;通过命令行工具测试Topic创建、消息生产和消费功能。文章提供了完整的配置参数说明和操作命令,帮助开发者快速搭建本地Kafka测试环境。
2025-09-13 23:14:06
965
转载 抖音集团基于Paimon的流式数据湖应用实践
抖音集团基于Paimon构建流式数据湖应用实践,针对实时数仓架构痛点进行优化。文章介绍了业务背景和原有Flink+MQ架构的局限性,重点阐述了Paimon在长周期指标聚合和大流量端到端场景中的落地实践。通过Paimon主键表和聚合表设计,解决了Flink任务状态膨胀问题,降低了90%的维表查询压力,同时简化了测试流程。新架构在保持高并发查询能力的同时,显著提升了系统稳定性和开发效率,为游戏内容生态的实时数据分析提供了可靠支撑。
2025-09-13 13:55:47
755
转载 淘宝闪购实时分析黑科技:StarRocks + Paimon撑起秋天第一波奶茶自由
淘宝闪购项目通过StarRocks + Paimon实时湖仓架构,成功应对了"秋天的第一杯奶茶"活动带来的亿级流量冲击。技术团队采用物化视图优化、RoaringBitmap去重和大查询治理等创新方案,将千亿级数据查询耗时从分钟级压缩至秒级,并实现99.9%的刷新成功率。该架构支持分钟级实时决策,解决了传统离线架构的时效性瓶颈,为业务提供了灵活高效的数据支撑。通过300个计算节点和20800 CU的资源规模,最终支撑单日17万次查询峰值,成为即时零售领域的技术标杆。
2025-09-07 23:19:20
1096
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关注的人
RSS订阅
2