自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

JasonLee实时计算

Stay hungry Stay foolish

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

原创 Flink on yarn 实时日志收集到 kafka 打造日志检索系统

点击上方"JasonLee实时计算",选择"设为星标"再也不用担心错过重要文章后台回复"监控",获取 grafana 监控 Flink最...

2021-08-15 17:35:11 1569 10

原创 【Flink 监控系列】Flink on yarn 任务实时监控最佳实践(Prometheus + Grafana)打造企业级监控方案

我们都知道 Flink 任务是一个 7*24 小时不停运行的任务,所以对于任务的实时监控就显得尤为重要,因为任务运行的状态对于我们来说是一个黑盒,比如任务是否挂掉,是否存在反压,使用的内存...

2021-08-08 19:14:14 3779 2

原创 【Flink实战系列】Flink 各种报错汇总以及解决方案(持续更新中)

这篇文章主要用来记录平时使用 Flink 过程中遇到的问题以及解决方案,其实前面已经有一篇这样的文章了,但是那篇文章里面的问题已经很多了,不太方便浏览,所以新开了一篇文章,后面的问题都会更新到这篇文章中....

2021-02-06 21:02:33 4564 1

原创 【Flink实战系列】自定义通用的 flatmap 实现数据预聚合功能(keyby + countWindow)

需求有时候我们需要对数据做预聚合操作,比如下游需要批量写入或者批量请求访问的时候,关于预聚合大概有两种解决方案,一种是使用 keyby + countWindow 的方式,第二种就是今天要介绍的 flatmap 的方式.并且还要实现一个通用的 flatmap .思路实现过程非常的简单,定义一个泛型类实现 FlatMapFunction 接口,然后定义一个成员变量 List 重写 flatMap 方法,每次把数据缓存到 List 里面攒一个 batch 然后发送到下游,并清空 List 的数据.

2021-01-23 11:56:20 1952 7

原创 【Flink实战系列】通用的反序列化类把 JSON 转成 POJO 对象

背景 & 痛点1, Flink 在消费到 kafka 的数据后,我们经常会把数据转成 POJO 对象,方便后面对数据的处理,但是每个人 POJO 类型是不一样的,每次都需要新开发一个反序列化的类,这样会带来大量的重复代码.能不能实现一个通用的反序列类来解决这个问题?2, 如何获取到 kafka 的元数据信息? 比如我有这样的需求,一个 Flink 任务消费了多个 topic 的数据后面要根据不同的 topic 名称做不同的处理逻辑,再比如我需要获取到数据写入 kafka 的时间戳,做全链路的

2021-01-21 19:40:12 3721 16

原创 【Flink实战系列】为什么不建议用 JSONKeyValueDeserializationSchema 反序列化

为什么不建议用JSONKeyValueDeserializationSchema?上一篇文章中在反序列化kafka的数据时候用的是KafkaDeserializationSchema,因为我要获取kafka的元数据信息,有同学问我说为什么不直接用Flink自带的JSONKeyValueDeserializationSchema呢? 这个也可以获取到kafka的元数据信息啊,而且使用起来也非常的简单,JSONKeyValueDeserializationSchema 确实可以获取到kafka的元数据信息,但

2020-09-05 15:53:41 2544 1

原创 【Flink实战系列】Flink 晚到(迟到)的数据怎么更新之前窗口计算结果

最近有一个朋友问我,Flink使用窗口计算的时候,如果设置了允许数据晚到时间,这个时候又来了一条属于前面窗口的数据,但是前面窗口的计算结果已经写到mysql了,怎么更正之前的结果,而不是在写入一条数据呢?今天这篇文章就来介绍一下怎么使用Flink的窗口函数更新之前计算的不完全的(不准确的结果)对于晚到的数据,一般有几种常用的处理方式:1,直接丢弃掉(这个也是窗口的默认做法,也就是说一个迟到的元素不会创建一个新的窗口)2,用测流输出的方式,拿到晚到的元素,可以进行,相关的逻辑处理,或者保存起.

2020-05-08 20:54:54 2035 1

原创 Flink项目实战系列(Spark项目实战系列)

本人的知识星球内发布了大量的Flink和Spark的项目实战,文章的目录如下:初识FlinkFlink读取Kafka源码解读Flink的状态后端Flink的runtimeFlink系列之数据流编程模型Flink系列之checkpointFlink系列之savepointFlink系列之checkpoint和savepoint的区别Flink系列之部署Standalone模式...

2019-08-08 10:09:21 5572 1

原创 scala的模式匹配

scala提供了一个非常强大的模式匹配机制,那什么是模式匹配呢?模式匹配是检查某个值(value)是否匹配某一个模式的机制,一个成功的匹配同时会将匹配值解构为其组成部分。它是Java中的switch语句的升级版,同样可以用于替代一系列的 if/else 语句。语法一个模式匹配包含了一系列备选项,每个都开始于关键字case。每个备选项都包含了一个模式及一到多个表达式。箭头符号=>...

2019-04-10 20:54:44 877

原创 【Spark实战系列】spark 各种报错汇总以及解决方案(持续更新中)

这篇文章主要记录下spark中遇到的各种问题,以及解决方法(以后会持续的更新)1.File does not exist. Holder DFSClient_NONMAPREDUCE_-67513653_1 does not have any open files今天早上发现程序报了一个这个错误,目前还没找到报错的原因,先记录一下吧.2.org.apache.kafka.clients...

2019-01-30 15:12:25 5977

原创 hive2.2.0安装与配置(元数据保存在mysql中)

Hive有3中运行模式,今天主要来介绍一下把元数据保存在mysql中的配置方法.mysql的详细安装步骤(1)内嵌模式将元数据保存在本地内嵌的 Derby 数据库中,这是使用 Hive 最简单的方式。但是这种方式缺点也比较明显,因为一个内嵌的 Derby 数据库每次只能访问一个数据文件,这也就意味着它不支持多会话连接。(2)本地模式这种模式是将元数据保存在本地独立的数据库中(一般是 M...

2019-01-12 01:27:56 653

原创 centos7安装mysql5.6.38史上最详细的安装步骤

最近由于要用到mysql,就想着装一个mysql,但是因为我的虚拟机是centos7的,centos7将默认数据库mysql替换成了Mariadb安装起来就比较的麻烦,遇到各种各样的问题,网上的教程很多,但是基本没有好使的,按照他们的步骤到最后没有一个成功的,搞了很长时间才装好,我记得之前在centos6.5上面安装也没那么复杂啊,但是在7上面不管是用yum方式,还是安装包的方式都搞了好几遍,最后...

2019-01-12 00:14:17 1777 2

原创 carbondata1.5.1编译

What is CarbonData?Apache CarbonData is an indexed columnar data format for fast analytics on big data platform, e.g. Apache Hadoop, Apache Spark, etc.因为我的spark是2.3.1的版本,而最新版的carbondata1.5.1才支持,但是...

2018-12-08 18:55:25 567

原创 hbase的常用命令

现在做的项目用到了hbase,今天就记录一下hbase的一些常用的命令,只是一些比较常用的,当然还有很多命令.1.进入hbase shell console2.查看所有的表: list3.创建表: create 't1', {NAME => 'f1', VERSIONS => 5, TTL => 2592000, BLOCKCACHE => true},创建表...

2018-07-29 13:10:00 713

原创 【Flink实战系列】Flink 双流 Join 出现数据倾斜如何解决?

从上面两种数据倾斜场景可以看出,解决所有数据倾斜问题的核心都是打散,但是不同的场景略有不同,如果是计算场景,需要两段聚合,如果是 Join 场景,不仅需要打散,还需要对维表数据做膨胀处理,保证数据能正确的关联上。

2024-04-04 13:14:32 631

原创 【Flink实战系列】Hash collision on user-specified ID “Kafka Source”

当我们在同一个 Flink 任务里面,多次调用了某个算子,并且我们给这个算子设置了 uid,那么必须保证两次调用的算子的 uid 是不一样的,否则会抛出 uid 哈希冲突的异常。

2023-09-13 13:47:37 809 1

原创 【Flink实战系列】Flink 消费多个 Topic 数据利用侧流输出完成动态的分流操作

这样就实现了动态分流的功能,这样做的好处是比较灵活,减少了大量重复的代码,可以专注于自己的业务需求开发即可。

2023-05-15 13:31:31 1060

原创 【Flink 实战系列】Could not find any factory for identifier ‘wechat-alarm‘ that implements ‘org.apache.fli

但是我确实把相关的代码都打到最终的 jar 包里了,还是遇到了这个问题,这是咋回事呢?大家都知道 Flink 是通过 SPI 机制来识别这些 connector 的,那么就需要添加 META-INF/services 相关的配置文件,我也添加了 META-INF/services/org.apache.flink.table.factories.Factory 这个文件,并且我在本地已经测试过 wechat-alarm connector 是可以正常使用的,但是打完包放到集群上就不行了呢?

2023-05-10 13:39:56 601

原创 Flink SQL Gateway REST Endpoint 使用第二弹

在上一篇文章中,我们只是使用 Rest API 通过 Flink SQL Gateway 向 standalone 集群提交了 SQL 任务,但是还存在一些问题没有解决,比如如何设置任务的 job name, checkpoint 等配置,以及如何从 checkpoint 恢复任务等,今天这篇文章就来解决这些问题。SQL Gateway Configuration在启动 SQL Gateway 的...

2023-03-02 10:00:18 767

原创 Flink SQL Gateway REST Endpoint 使用教程

介绍SQL Gateway 是一种支持远程多个客户机并发执行 SQL 的服务。它提供了一种提交 Flink Job、查找元数据和在线分析数据的简单方法。SQL Gateway 由可插拔 Endpoints 和 SqlGatewayService 组成。SqlGatewayService 是一个被 Endpoints 重用来处理请求的处理器。Endpoints 是允许用户连接的入口点。根据 End...

2022-12-13 12:30:43 2152 18

原创 【Flink 实战系列】Incremental snapshot for tables requires primary key, but table test.ab doesn’t have pri

getChunkKeyColumn 方法其实就是获取表的主键信息,如果没有获取到的话,会直接抛出 ValidationException 也就是标题中的报错信息,所以我们必须给 mysql 中的表设置主键。splitTable 方法主要用来把整个表划分成多个 chunks,具体的实现是在 splitChunks 方法中,我们接着来看下 splitChunks 的源码。这个报错非常简单,报错的意思是说表的增量快照需要主键,但是我们读取的表 ab 没有主键,所以就报错了。我们简单看下相关的源码。

2022-12-01 21:07:43 2260

原创 【Flink 实战系列】Flink CDC 实时同步 Mysql 全量加增量数据到 Hudi

Flink CDC 是基于 Flink 开发的变化数据获取组件(Change data capture),简单的说就是来捕获变更的数据,Apache Hudi 是一个数据湖平台,又支持对数据做增删改查操作,所以 Flink CDC 可以很好的和 Hudi 结合起来,打造实时数仓,实时湖仓一体的架构,下面就来演示一下同步的过程。

2022-11-30 13:40:29 3524

原创 【Spark 实战系列】Spark 使用 BulkLoad 同步数据到 hbase 排序优化

最近群里有同学问我 spark 用 bulk 写入 hbase 的时候报错,因为 rowkey 排序的问题,今天带大家分析一下这个问题,先看下面的 demo。

2022-11-20 14:49:28 1372

原创 【Spark 实战系列】sparkstreaming 任务出现堆积如何优化?(流量突然大增资源不够怎么办?)

在日常的生产中,什么情况下会出现数据堆积呢?

2022-11-18 15:39:02 1136

原创 【Spark 实战系列】Phoenix 整合 spark 进行查询分析

Phoenix 是一个开源的 HBASE SQL 层。它不仅可以使用标准的 JDBC API 替代 HBASE client API 创建表,插入和查询 HBASE,也支持二级索引、事物以及多种 SQL 层优化。

2022-11-17 22:20:01 823

原创 【Spark 实战系列】sparkstreaming 中使用 StreamingListener 完成程序的异常报警功能

上一篇文章中说了 StreamingListener 的使用,可以自己获取到很多的信息,比如程序的处理延迟,调度延迟,在流式的任务中,报警是非常重要的,比如程序运行延迟太大,或者调度延迟变大,都会对程序的稳定性造成影响,我们需要及时的知道这些信息,做出相应的处理,下面就来看一下如何基于 StreamingListener 完成对 sparkstreaming 程序异常的监控报警功能(代码还是之前的)。

2022-11-17 22:00:35 691

原创 【Spark 实战系列】SparkStreaming 累加器的使用

累加器(accumulator)是Spark中提供的一种分布式的变量机制,其原理类似于mapreduce,即分布式的改变,然后聚合这些改变。如果你想知道处理成功了多少条,失败了多少条,可以定义两个累计器,一个放在程序处理的最后面,失败的在catch里面进行累计,就可以了,需要注意的是,如果你把程序停了,在启动后,累计器会初始化,不会从上次的结果出接着累计,如果你想要让他接着累计的话,可以把每个批次的结果保存到第三方存储,然后第二次启动的时候,直接把第一个批次的累计器的结果和之前保存的结果相加就好了。

2022-11-17 21:47:31 1117

原创 【Flink 实战系列】如何给 Flink 任务设置合理的并行度?

最近看到很多朋友都在问这个问题,当我在开发 Flink 实时计算任务的时候,如何给每个算子设置合理的并行度呢?如果设置多了可能会出现资源浪费的情况,如果设置少了任务可能会出现反压,所以给 Flink 任务设置一个合理的并行度就显得尤为重要,那今天就针对这个问题做一个详细的分析。一个 Flink 任务通常是由三个部分组成的,Source,Transformation,Sink,下面就分别说一下每一部分如何设置。

2022-10-18 14:57:50 2202

原创 【Flink 实战系列】Flink 使用 ParameterTool 动态加载外部配置文件

直接在代码里面写死。把配置信息维护在一个类里面,所有用到的地方直接引用即可。把配置信息放在项目 resource 下面的一个配置文件中,然后从这个配置文件中加载配置。把配置文件放在外部,启动任务的时候传入一个路径参数,在代码里面解析配置文件。

2022-10-15 13:28:10 2442

原创 【Flink 实战系列】Flink SQL 实时同步 Kafka 数据到 Hudi(parquet + snappy)并且自动同步数据到 Hive

本文主要介绍了 Flink 实时同步数据到 Hudi,然后再把数据加载到 Hive 的流程,加载数据可以通过手动的方式也可以配置让 Hudi 自动创建 Hive 表完成加载数据,以及这两种方式的区别,和使用过程中遇到问题的解决方案。

2022-10-06 18:47:40 1597

原创 【Flink 实战系列】Flink SQL 使用 filesystem connector 同步 Kafka 数据到 HDFS(parquet 格式 + snappy 压缩)

我们用 datastream API 实现了从 Kafka 读取数据写到 HDFS 并且用 snappy 压缩,今天这篇文章我们来实现一个 Flink SQL 版本的,为了方便我直接采用 sql-client 提交任务的方式来演示。可以看到分区正常生成了,数据也都正常,_SUCCESS 文件也生成了,这里我就不在把数据加载到 hive 表里测试了,上一篇文章中有测试,大家可以自己测一下。在这里面会把所有需要用到的 parquet 相关的依赖都打进来,所以我们不需要添加其他 parquet 相关的包了。

2022-10-05 14:57:13 1618

原创 【Flink 实战系列】Flink 同步 Kafka 数据到 HDFS parquet 格式存储 snappy 压缩

这里使用的是 bulk encoding 格式,这个方法有两个参数,第一个表示的是数据存储的路径,第二个表示的是数据的存储逻辑。这个消费 Kafka 用的是 KafkaSource 也是实现了新的接口 Source,在反序列的时候还是用的我们自定义的通用反序列化类 PoJoDeserializationSchema 直接把 JSON 格式的数据转成 JasonLeePOJO 对象。提交任务这里就省略了,我们直接在 hive 创建个表,然后把 HDFS 上的数据加载进来,看看能否正常读取出来。

2022-10-04 17:19:11 1689 4

原创 【Flink 实战系列】No Watermark (Watermarks are only available if EventTime is used)

本文主要是从一个简单的 DEMO 出发,通过分析底层的源码,让大家了解了为什么 Watermark 没有正常更新,这个在生产环境还是比较常见的,只要是窗口不触发计算的问题,基本上都是因为 Watermark 没有正常推进,如果遇到这种问题,直接就去找为什么 Watermark 没有推进,如果是上面的情况,可以选择上面三种方案中的任意一种解决,当然还是推荐第一种,第二种和第三种都会打破 operator Chain 会带来性能损耗。

2022-10-02 23:04:46 2565 1

原创 【Flink 实战系列】Flink 消费多个 Topic 数据利用侧流输出完成分流功能

本文主要介绍了 Flink 消费多个 Topic 数据,实现分流的逻辑,通过自定义反序列类 PoJoDeserializationSchema 去获取 Topic 的元数据信息,然后通过侧流输出的方式实现一个流分成多个流的操作。

2022-10-01 14:32:42 1742

原创 【Flink 源码系列】Flink Collector Output 接口源码解析

0在 Flink 中 Collector 接口主要用于 operator 发送(输出)元素,Output 接口是对 Collector 接口的扩展,增加了发送 WaterMark 的功能,在 Flink 里面只要涉及到数据的传递都必须实现这两个接口,下面就来梳理一下这些接口的源码。Output Collector UML 图WatermarkGaugeExposingOutputCollector...

2022-09-19 10:00:44 2042

原创 Flink Collector Output 接口源码解析

0在 Flink 中 Collector 接口主要用于 operator 发送(输出)元素,Output 接口是对 Collector 接口的扩展,增加了发送 WaterMark 的功能,在 Flink 里面只要涉及到数据的传递都必须实现这两个接口,下面就来梳理一下这些接口的源码。Output Collector UML 图WatermarkGaugeExposingOutputCollector...

2022-09-19 10:00:44 396

原创 【Flink 源码系列】Flink 侧流输出源码解析

Flink 的 side output 为我们提供了侧流(分流)输出的功能,根据条件可以把一条流分为多个不同的流,之后做不同的处理逻辑,下面就来看下侧流输出相关的源码。先来看下面的一个 Demo,一个流被分成了 3 个流,一个主流,两个侧流输出。SingleOutputStreamOperator<JasonLeePOJO>process=kafka_source...

2022-09-14 10:00:04 1365

原创 Flink 侧流输出源码解析

Flink 的 side output 为我们提供了侧流(分流)输出的功能,根据条件可以把一条流分为多个不同的流,之后做不同的处理逻辑,下面就来看下侧流输出相关的源码。先来看下面的一个 Demo,一个流被分成了 3 个流,一个主流,两个侧流输出。SingleOutputStreamOperator<JasonLeePOJO>process=kafka_source...

2022-09-14 10:00:04 156

原创 【Flink 实战系列】Flink on yarn 为什么 Allocated CPU VCores 显示不正确?

任务的并行度也是 3,所以只需要一个 TM 即可,那么问题就来了,这个任务一共需要多少个 CPU VCores,很明显答案应该是 4 个,3(TM)+ 1 (JM) = 4 个,这里不要忘了,JM 也是需要一个 CPU 的,那我们再来看下 Yarn UI 上面显示的 CPU VCores 是多少个呢?这个问题被问到了好多次,今天就来详细的解释一下原因。但是在生产环境中可能会遇到一个问题,任务的 CPU 使用率比较低,可能会出现浪费 CPU 资源的情况,比如这个任务的 CPU 使用率。

2022-09-03 15:30:14 1041 2

原创 【Flink 实战系列】Flink pipeline.operator-chaining 参数使用以及源码解析

当我们使用 Flink SQL 提交一个任务,没有给算子单独设置并行度的情况下,默认所有的算子会 chain 在一起,像下面的这样:此时,整个 DAG 图只会显示一个算子,虽然这样有利于数据的传输,可以提高任务的性能,但是缺点也很明显,我们无法看到数据的输入和输出,以及反压相关的 metrics。那在 datastream api 开发的任务中我们可以使用 disableChaining 方法来打断 operatorChain,但是在 SQL 开发的任务中怎么办呢?如果我们想要查看每一个算子的输入和输出的数

2022-08-28 14:35:11 2462

空空如也

空空如也

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

TA关注的人

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