自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(67)
  • 资源 (6)
  • 收藏
  • 关注

原创 Flink实战之自定义UDF

一般flink sql平台化都会提供自定义udf的支持,用户通过平台上传udf jar,然后在sql中通过create function语法创建函数,并在DML中使用该udf。主要包括以下几个核心功能:平台支持用户上传udf jar,后台可以选择使用hdfs或oss来存储jar包通过http将jar包路径作为参数传递到gateway服务解析参数下载jar,并通过classloader加载jarsql中通过create function语法创建函数dml中使用函数以上步骤中最重要的就是如何通过

2021-06-01 00:10:16 1540 2

原创 Iceberg实战之小文件合并

Flink版本:代码Spark版本:代码Spark的api功能相对更加丰富一些,现在用spark版本的更合适一些。详细flink的api也会尽快跟进的。

2021-04-02 15:40:38 1576

原创 Flink实战之MysqlCDC To Iceberg

网上找了一圈没找到一个mysql to Iceberg的实践案例,总结下这几天的踩坑心血历程,希望能提供一些帮助。现状目前Iceberg 0.11版本只支持CDC streaming写入,sql 写入以及CDC 读取都是不支持的。mysql binlog的读取有现成的Connector可用,参考 flink-cdc-connectors。不错demo里面只提供了String的序列化方式,Iceberg需要接受RowData的数据格式。踩坑记录java.lang.ClassCastExcept

2021-03-15 16:00:22 1808 3

原创 MAC docker打包镜像并推送到仓库

在学《Kubernetes in Action》,有关如何使用docker运行镜像和打包自己的镜像并推送到docker hub仓库,这里做个笔记,万一以后用到。以下命令都出自书中。我是在MAC上实操的,步骤如下:创建一个目录作为根目录mkdir image在目录下创建app.js文件,内容如下const http = require('http');const os = require('os');console.log("Kubia server starting...");

2021-02-19 16:40:26 1389

原创 Flink源码阅读之JDBC Connector

JDBC connector的入口JdbcDynamicTableFactory,提供了source和sink的支持,详细内容参考官网。Source在Factory类中通过createDynamicTableSource来创建JdbcDynamicTableSource,并将需要的所有参数传递过去。jdbc作为source有两种用途:1.数据源使用Scan 2.维表关联使用Lookup。Scan通过JdbcRowDataInputFormat来实现数据读取,同时支持了列裁剪,limit下推。注意

2021-02-18 16:56:53 1804 1

原创 Flink源码阅读之SPI在Flink中的应用

SPISPI是Service Provider Interface的缩写,是“基于接口的编程+策略模式+配置文件”组合实现的动态加载机制。有关SPI的详细内容请自行百度,这里不赘述。使用SPI需要遵循的规范:当服务提供者提供了接口的一种具体实现后,在jar包的META-INF/services目录下创建一个以“接口全限定名”为命名的文件,内容为实现类的全限定名;接口实现类所在的jar包放在主程序的classpath中;主程序通过java.util.ServiceLoder动态装载实现模块,它通过

2021-02-10 15:30:18 785 2

原创 Flink源码阅读系列之Kafka Connector

本文基于Flink 1.12版本,目前这个版本已经不需要再指定具体的kafka版本了。本文从Sql角度分析一下,创建一个kafka的table之后,flink是如何从kafka中读写数据的。入口依然是通过SPI机制找到kafka的factory(KafkaDynamicTableFactory),Flink中大量使用了SPI机制,有时间再整理一篇SPI在Flink中的应用。话不多说,进入正题。Source通过createDynamicTableSource方法创建 kafka source,这里主

2021-02-08 17:57:27 719

原创 Flink实战之Parquet写复杂类型

上一篇Flink实战之Parquet支持读复杂类型说了如何扩展读复杂类型,本篇作为其姊妹篇介绍下如何扩展写复杂类型。现状StreamingFileSink在写parquet文件时,通过ParquetWriteSupport中的ParquetRowDataWriter来写的,在writersupport中会将Flink内部的 rowType类型转换为Parquet识别的MessageTypeprivate MessageType schema = convertToParquetMessageType

2021-02-03 11:31:36 1180

原创 java.io.IOException: Got error, status message , ack with firstBadLink

写HDFS任务时不时发送Checkpoint超时,查看了日志发下如下异常:location:org.apache.hadoop.hdfs.DFSOutputStream$DataStreamer.createBlockOutputStream(DFSOutputStream.java:1495)throwable:java.io.IOException: Got error, status message , ack with firstBadLink as ip:portat org.apache.

2021-01-10 00:10:37 1283 1

原创 org.apache.kafka.clients.consumer.CommitFailedException

最近遇到一个kafka分区提异常如下:throwable:org.apache.flink.kafka.shaded.org.apache.kafka.clients.consumer.CommitFailedException: Commit cannot be completed since the group has already rebalanced and assigned the partitions to another member. This means that the time b

2020-12-26 00:54:12 1451

原创 Flink实战之Parquet支持读复杂类型

背景前面写过几篇关于flink入库的文章,但是还有个通点一直未解决,那就是小文件问题。好在1.12版本已经支持了小文件合并,但是在使用时发现问题了,parquet居然不支持读复杂类型,这就有点蛋疼了。那么我们就来尝试解决他。1.11现状使用parquet读filesystem依赖于ParquetFileSystemFormatFactory#createReader来创建InputFormat,目前的实现是其内部类ParquetInputFormat,更进一步是使用ParquetColumnarRow

2020-12-25 15:39:02 947

原创 Flink实战之入库任务调优

背景在调试flink写hdfs和hive时,任务总是报各种各样的异常,其中255问题最多,异常信息如下:java.lang.Exception: Exception from container-launch.Container id: container_1597847003686_5818_01_000002Exit code: 255Stack trace: ExitCodeException exitCode=255: at org.apache.hadoop.util.Shell.r

2020-12-03 17:19:31 1201

原创 Flink实战之写Hive性能问题

上一篇中写了Kafka to Hive的样例,在实际测试过程中,发现性能比较差。问题1我使用的是Flink1.11.1版本,这个版本有个性能上的问题,见FLINK-19121。该问题已经在1.11.3版本中修复,在HiveTableSink中沿用了FileSystemTableSink的TableRollingPolicy,再该policy中每条数据都会调用@Override public boolean shouldRollOnEvent( PartFileInfo<String

2020-11-27 01:14:05 1416

原创 Flink实战之Kafka To Hive

背景传统的入库任务一般借助于MapReduce或者Spark来写hive表,一般都是天级别最多小时级别的任务。随着实时性要求越来越高,传统的入库不太能满足需求。Flink完全基于流式处理,同时也支持了写Hive表。本文介绍一下如果通过FlinkSQL实现kafka数据入库hive,并能够实时可查。Hive Catalog由于写hive表必须基于hive catalog,所以需要注册hive catalog。同时可以在一个job内切换catalog,如果我们不想把kafka的source table注册

2020-11-24 20:23:02 1894

原创 Flink实战之合并小文件

背景Flink的filesystem connector支持写入hdfs,同时支持基于Checkpoint的滚动策略,每次做Checkpoint时将inprogress的文件变为正式文件,可供下游读取。由于并行度设置、数据量大小、Checkpoint配置的不同、分区的选择,都有可能导致产生大量的小文件,这对hdfs产生很大影响。但是可以通过一些手段来减少小文件,本文主要探讨一些filesystem connector支持的partition commit policy,通过自定义policy来合并小文件

2020-11-20 01:42:33 4975 5

原创 Flink实战之FileSystem-parquet支持ZSTD压缩

==

2020-10-28 14:55:01 1487

原创 Flink实战之Flink必须依赖Hadoop2.7+?

====

2020-10-22 20:51:46 4741

原创 Flink源码阅读之FileSystem Connector

代码在flink-table-runtime-blink模块,用户指南参考官网.目前是旧的实现方式,将会按FLIP-95重新实现FLINK-19336入口类FileSystemTableFactory,如何做Factory discover的可以参考之前的博文,这里就不赘述了。Sink构造FileSystemTableSink对象,传入相关属性参数public TableSink<RowData> createTableSink(TableSinkFactory.Context con

2020-10-21 00:51:33 1098 1

原创 Flink实战之扩展JDBC Dialect

前言Flink jdbc connect已经为依赖于jdbc进行操作的数据库系统提供了非常完善的功能。对于扩展只需要扩展其Dialect即可。具体步骤定义CustomizedDialect类,具体可参考MySQLDialect修改点:TIMESTAMP_PRECISIONDECIMAL_PRECISIONdialectName()canHandle() → “jdbc:xxx:” 如:“jdbc:clickhouse:”getRowConverter() → 定义CustomizedR

2020-09-30 16:35:46 1075 2

原创 Flink源码编译命令

mvn clean package -T 4 -Dfast -Dmaven.compile.fork=true -DskipTests -Dscala-2.11

2020-09-15 16:46:51 244

原创 Flink实战之Flink SQL connector支持并行度配置

背景目前flink sql是不支持source/sink并行度配置的,flink sql中各算子并行度默认是根据source的partition数或文件数来决定的,比如常用的kafka source topic的partition是100,那么fink sql任务的并发就是100。但有时任务相对简单,比如datax任务,没有逻辑根本不需要很大的并发,100并发显然会造成资源的严重浪费。那么就有必要扩展connector使其支持并发度配置。如何做一、首先,需要在ddl的with参数中支持并发的配置,比如

2020-09-13 01:24:32 6364

原创 Flink源码阅读之Sql-Client的执行原理

前言sql-cli相信大家都用过,通过sql-client.sh embedded启动就会进入交互界面,每条sql都可以单独执行。在功能调试时非常方便,还有进入界面的那个大松鼠相当可爱。脚本先上脚本代码#!/usr/bin/env bash################################################################################# Licensed to the Apache Software Foundation (ASF

2020-09-12 01:48:48 957

原创 Flink实战之Flink SQL中的Map、Array、Row

Flink sql支持Map、Array、Row类型,这几种类型在DDL中如何定义、如何获取、如何构造,本文做个总结。以如下数据作为样例:{ "id":1238123899121, "name":"asdlkjasjkdla998y1122", "date":"1990-10-14", "obj":{ "time1":"12:12:43Z", "str":"sfasfafs", "lg":2324342345 },

2020-08-19 16:31:35 21584 12

原创 通过java执行Ansible命令遇到的问题

由于初次使用ansible,遇到一些问题在此记录一下,在网上资料也不多,有时候遇到一些奇葩问题真的毫无头绪。一通过Runtime.getRuntime().exec(cmd); 可以执行ansible ad-hoc命令比如:ansible all -m ping但是复杂一些的命令就会执行不了,不能说执行不力,就是执行之后没反应,也不报错,达不到预期的效果比如:ansible all -m copy -a ‘src=/xxx/xxx/a.log dest=/xxx/xxx/xxx/a.log’但是

2020-08-10 16:09:41 1205 2

原创 Flink源码阅读之flink run 背后做了什么

我们经常使用flink run命令提交一个jar任务,比如提交到yarn集群,那么执行这个命令的背后flink都做了什么,能将我们的job提交到集群呢。对此我有兴趣一探究竟。flink脚本#!/usr/bin/env bash################################################################################# Licensed to the Apache Software Foundation (ASF) under

2020-08-10 01:46:32 386

转载 Flink中的Network Buffer

前言看到一篇对flink Network Buffer 讲的比较好的文章,尤其当你碰到insufficient number of network buffers错误而程序起不来的时候,是不是一头雾水,这篇文章讲解了Network Buffer的内存是如何分配的已经你的程序实际需要的Network Buffer内存怎么计算。对理解Network Buffer相关知识有很大帮助,故搬运过来。原文链接:http://www.liaojiayi.com/flink-network-buffer/#more问

2020-08-04 10:45:53 2186

原创 No operators defined in streaming topology. Cannot generate StreamGraph

Flink 1.11版本对Table&SQL模块进行了重构,废弃了TableEnvironment.sqlUpdate方法,引入了TableEnvironment.executeSql、StatementSet.execute方法。在进行测试时报如下异常Exception in thread "main" java.lang.IllegalStateException: No operators defined in streaming topology. Cannot generate Str

2020-08-03 17:59:30 9526 1

原创 Flink实战之自定义TableFormat

自定义TableFormat主要包含如下步骤:实现TableFormatFactory接口实现SerializationSchemaFactory、DeserializationSchemaFactory 序列化和反序列化接口两个工厂接口用于创建Schema的序(反)列化对象类。实现SerializationSchema、DeserializationSchema在source或sink Function的invoke方法中对数据使用SerializationSchema的seri

2020-07-29 16:49:26 1256

原创 Execution default of goal org.springframework.boot:spring-boot-maven-plugin:2.2.2.RELEASE:repackage

问题背景:spring boot项目在idea 里面执行mvn install命令时报错如题解决方法:将父工程中下面的plugin注掉<plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> <v

2020-07-27 16:23:18 1306

原创 Flink实战之自定义flink sql connector

背景最近工作中需要自定义开发一些flink sql的connector,因为官方提供的connector毕竟有限,在我们工作中可能会用到各种各样的中间件。所以官方没有提供的就需要我们自定义开发。就是如:CREATE TABLE XXX(A STRING,B BIGINT)WITH(‘connect.type’ = ‘kafka’,…)所以开发一个自己的connector需要做哪些,本文就来总结一下开发的主要步骤,以及我遇到的问题怎么解决的。开发自定义Factory,根据需要实现S

2020-07-11 00:47:11 4725 8

原创 Flink源码阅读之Flinksql执行流程

基本结构Planner接口负责sql解析、转换成TransformationExecutor接口负责将planner转换的Transformation生成streamGraph并执行public interface Planner { /** * Retrieves a {@link Parser} that provides methods for parsing a SQL string. * * @return initialized {@link Parser} */

2020-07-03 17:35:36 1941

原创 Flink源码阅读之Checkpoint执行过程

前言对应Flink来说checkpoint的作用及重要性就不细说了,前面文章写过checkpoint的详细过程和checkpoint周期性触发过程。不熟悉checkpoint大概过程的同学可以查阅。本篇我们在一起根据源码看下checkpoint的详细执行过程。checkpoint过程源头我们都知道checkpoint的周期性触发是由jobmanager中的一个叫做CheckpointCoordinator角色发起的,具体执行在CheckpointCoordinator.triggerCheckpo

2020-06-18 17:13:40 647

转载 Flink 1.11 Unaligned Checkpoint 解析

作为 Flink 最基础也是最关键的容错机制,Checkpoint 快照机制很好地保证了 Flink 应用从异常状态恢复后的数据准确性。同时 Checkpoint 相关的 metrics 也是诊断 Flink 应用健康状态最为重要的指标,成功且耗时较短的 Checkpoint 表明作业运行状况良好,没有异常或反压。然而,由于 Checkpoint 与反压的耦合,反压反过来也会作用于 Checkpoint,导致 Checkpoint 的种种问题。针对于此,Flink 在 1.11 引入 Unaligned C

2020-06-13 17:22:15 2131 5

原创 Flink源码阅读之Timer定时器

概述在window执行过程篇也提到了定时器的注册,在flink中有很多定时器的使用,比如窗口trigger的触发、watermark的周期生成,其实定时器底层是依赖jdk的ScheduledThreadPoolExecutor来调度的。入口通过TimerService 接口注册和删除定时器。public interface TimerService { long currentProcessingTime(); long currentWatermark(); void registerPr

2020-06-10 19:53:59 618

原创 Flink源码阅读之Checkpoint周期触发过程

Flink的checkpoint原理就不说了,官网以及博客都有说明,有兴趣的同学可以自行查阅。本文主要从源码层面分析一下checkpoint是如何周期性触发的。分析首先通过如下配置启用CheckPointenv.enableCheckpointing(1000);不设置,则默认CheckPoint间隔为-1,即不启用CheckPoint/** Periodic checkpoint triggering interval. */private long checkpointInterval

2020-06-05 16:01:02 681

原创 Flink序列化和Java序列化对比

Java序列化Java的序列化机制一般是对象实现Serializable接口,并指定serialVersionUID。通过字节流的方式来实现序列化和反序列化。serialVersionUID的作用是用来作为版本控制,如果serialVersionUID发生改变则会反序列化失败。主要用途:用于网络传输对象深拷贝用于将对象存储起来缺点:无法跨语言序列化后码流太大序列化性能太低Flink的序列化Flink实现了自己的序列化框架,并结合自身的内存模型,实现了对象的密集存储也高效操作。

2020-06-04 19:55:06 754

原创 Flink为什么比Storm快

Flink的优势以及具有更多丰富的功能、特性,本文就不提了,网上资料很多。本文从底层原理分析一下为什么Flink要比Storm快。“快”说白了就是延迟低。Flink为什么延迟更低主要有以下几个原因:一、数据传输数据传输有分为进程之间和进程内部。进程之间进程之间的传输一般包含shuffle的过程,主要是序列化、网络传输、反序列化这三个步骤。Flink中一般是两个TM之间的传输,通过netty实现。Storm一般是两个woker间的传输,早期版本通过ZeroMQ实现,后来也改成了netty。同

2020-05-27 16:16:13 1345

原创 java.lang.ClassNotFoundException: org.apache.hadoop.crypto.key.KeyProvider

在hadoop2.2.0版本上搭建hive2.2.0环境,在用下面命令初始化时报错schematool -dbType derby -initSchemaException in thread "main" java.lang.RuntimeException: java.lang.NoClassDefFoundError: org/apache/hadoop/crypto/key/KeyProvider at org.apache.hadoop.hive.shims.ShimLoader.getHa

2020-05-24 15:22:16 2411

原创 Flink中串行的陷阱

问题背景在使用FlinkSql做topic复制程序时,遇到一个问题:一份kafka topic数据往多个topic中发,实现一份数据复制多份的功能,但是在做性能压测的时候发现tps上不来。问题分析由于flinksql目前不支持针对具体的算子设置并行度,所以整个job只设置了一个整体并行度。由于flink内部的operation chain机制,会将source和3个map、3个sink都chain到一起,形成一个串行的结构验证代码如下:import org.apache.flink.api.c

2020-05-23 17:57:53 1638

原创 Flink源码阅读之Watermark对齐

watermark的产生我们知道watermark的生成有两种方式:1.在sourceFunction中通过emitWatermark方法生成2.通过assignTimestampsAndWatermarks抽取timestamp并生成watermarkwatermark的流转watermark会像普通的element和stream status一样随着stream流不断的向下游流转watermark的处理前面文章写过job的执行过程,描述了数据怎么被处理的,所有流数据被封装成StreamEl

2020-05-23 16:20:44 814

StreamTask with Mailbox.pdf

Our motivation behind this proposal is to simplify the threading model of stream tasks with a mailbox-based approach (similar to execution model commonly found in the actor-model). With the current threading model in Flink’s stream tasks, there are multiple threads that potentially want to access object states concurrently, for example event-processing and checkpoint triggering. Threads are shielded from each other through mutually exclusive access with a single “global” lock - the infamous checkpointing lock.

2020-06-28

QueryableStateFLINK-3779.pdf

Flink QueryableState设计文档(FLINK-3779) Flink offers state abstractions for user functions1 in order to guarantee fault-tolerant processing of streams. Users can work with both non-partitioned (Checkpointed interface) and partitioned state (getRuntimeContext().getState(ValueStateDescriptor) and other variants).

2020-06-04

分布式一致性快照算法.pdf

Distributed Snapshots: Determining Global States of Distributed Systems 分布式一致性算法论文(Chandy-Lamport算法)

2020-06-04

storm原理分析

分析storm的相关框架,底层实现原理。

2019-03-04

phoenix-4.14.1-HBase-1.2-client.jar

phoenix-4.14.1-HBase-1.2-client.jar

2019-02-26

RedisDesktopManager

redis可视化工具。

2019-02-25

空空如也

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

TA关注的人

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