自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(57)
  • 资源 (1)
  • 收藏
  • 关注

原创 Flink Forward Asia 2020:超大规模 Flink 调度优化

**作者介绍:**胡伟华/辛朝晖,字节跳动基础架构工程师整理:MWT(Apache Flink China 社区志愿者)**校对:**DJG(Apache Flink China 社区志愿者)**摘要:**本文主要介绍在字节跳动在比较大的规模的 Flink 应用场景下遇到的一些问题,以及在调度层面所做的一些优化。内容主要包括6个方面:相关背景:字节跳动的作业规模,以及在此规模下遇到的问题与挑战;黑名单机制:Flink 层面针对 NodeManager 异常节点所做的优化;启动速度优化:Flin

2021-03-07 22:38:17 650 2

原创 Flink源码编译:Flink1.11+版本编译及部署

文章目录1. 背景2. 官方推荐配置3. 现状4. 解决1. 背景从flink1.11开始,flink项目打包时不再强制依赖hadoop-common、hadoop-hdfs、hadoop-yarn-client等组件,虽然flink-hadoop-fs有依赖hdoop组件,如下: <dependency> <groupId>org.apache.hadoop</groupId> <artifactId>hadoop-common</

2021-02-22 17:54:20 719

原创 Kafka实战:KafkaConsumer#seek方法不生效

文章目录1. 背景2. 示例3. 结论1. 背景现需要在Kafka管理平台中加入数据预览功能,浏览topic最新的10条数据,我们需要用startOffset = HighWatermark - 10公式求出起始startOffset,从startOffset开始查询分区中的数据。但是,在使用KafkaConsumer#seek方法设置offset时不生效,KafkaConsumer#poll始终无法拉取到历史数据,更精确地说,始终只能拉取到最新插入的数据。环境:CDH 6.3.2Kafka

2021-01-28 15:23:22 1803

原创 Flink源码剖析:自定义TableSink与TableFactory定位过程剖析

文章目录1. 背景2. user-defined redis sink2.1 RedisTableSinkFactory2.2 RedisTableSink2.3 RedisSink3. TableFactory定位1. 背景现有自定义redis sink的需求,我们借此学习一下如何自定义flink sink connector,以及flink是如何通过ddl建表语句中的properties来定位具体的TableFactory,进而创建StreamTableSink的。该文介绍的写法是Flink1.1

2021-01-19 22:21:02 519

原创 Flink Forward Asia 2020:Flink SQL的功能扩展与深度优化

文章目录1. 背景及现状1.1 三种模式的分析1.2 腾讯目前的工作2. 窗口功能扩展2.1 新的窗口操作2.1.1 先Join再开窗2.1.2 Interval Join2.1.3 Windowing Table-Valued Function2.1.4 实现细节2.1.4.1 窗口的传播2.1.4.2 时间属性字段2.1.4.3 时间水印2.1.4.4 使用约束2.2 新的窗口类型2.2.1 Incremental Window2.2.1.1 多次触发2.2.1.2 Lazy Trigger2.2.2

2021-01-11 11:17:44 598

原创 Flink源码编译:加快你的编译速度

文章目录1. 去除不必要的操作2. 用install替代package3. 指定hadoop版本和flink.shaded版本4. 失败继续5. 正确使用mirror和repository1. 去除不必要的操作mvn install -DskipTests -Dmaven.javadoc.skip=true -Dcheckstyle.skip=true -Drat.skip=true2. 用install替代packageinstall会把Flink中的module安装到本地仓库,这样依赖当前mo

2020-12-27 23:42:31 326

原创 Kafka源码剖析:Kafka客户端网络通信模型

文章目录0. 概述1. KafkaProducer数据发送流程1.1 宏观流程1.2 微观流程2. 元数据更新流程2.1 流程2.2 元数据变化动态感知2.2.1 强制更新2.2.2 周期更新3. Kafka客户端通信模型3.1 连接3.2 发送3.3 读写3.4 处理返回0. 概述本文旨在借助对ProduceRequest和MetadataRequest两种请求的请求链路的分析,得出kafka客户端网络模型的通用步骤。1. KafkaProducer数据发送流程1.1 宏观流程确认数据要发

2020-12-18 10:28:17 525

原创 Kafka源码剖析:内存池

文章目录1. Why BufferPool ?1.1 Why two kinds of pools ?2. What is a BufferPool ?3. How BufferPool run ?1. Why BufferPool ?Kafka Producer以ProducerBatch为单位发送数据,而ProducerBatch中的数据以ByteBuffer的形式进行存储。当发送端数据量极大时,ByteBuffer就会无限制地频繁申请,可能会引发OOM;另外,发送完数据后,ByteBuffer就会

2020-12-10 19:25:50 366

原创 Flink编码:FlinkSQL全面指南

文章目录1. FlinkSQL定位2. 流与表的对偶性3. 持续查询/增量计算4. 回撤流5. Flink 1.11关于SQL的增强5.1 DDL写法5.2 主键5.3 Catalog6. JOIN算子6.1 双流JOIN原理6.1.1 Inner Join6.1.2 Left Join6.1.3 State数据结构7. 窗口7.1 OverWindow7.1.1 基于数据条目的overwindow7.1.2 基于时间的overwindow7.2 GroupWindow7.2.1 滚动窗口7.2.2 滑动窗

2020-11-25 11:57:03 2014

原创 Flink源码剖析:回撤流

文章目录1. 定义2. 示例2.1 源码分析2.1.1 聚合算子回撤2.1.2 Sink算子回撤2.1.3 聚合算子回撤 VS Sink算子回撤1. 定义Flink中,Kafka Source是非回撤流,Group By是回撤流。所谓回撤流,就是可以更新历史数据的流,更新历史数据并不是将发往下游的历史数据进行更改,要知道,已经发往下游的消息是追不回来的。更新历史数据的含义是,在得知某个Key(接在Key BY / Group By后的字段)对应数据已经存在的情况下,如果该Key对应的数据再次到来,会生成

2020-11-23 01:15:22 7629

原创 Flink源码剖析:ValueState

文章目录1. 定义2. 示例3. 源码3.1 Update方法3.2 Value方法1. 定义State一般指一个具体的task的状态,而checkpoint则表示了一个Flink Job在一个特定时刻的一份全局状态快照,即对所有task的state进行持久化。Flink中有两种基本类型的State:Keyed State,Operator State。2. 示例下面一个有关定时器timer和Keyed State的代码示例,实现将10s内未出现的消息发往下游的功能,示例代码可以运行,有兴趣的同学不

2020-11-15 09:21:00 3427

原创 Kafka问题:如何保证消息不丢失?

文章目录1.消息不丢失的含义总结来说,**Kafka 只对“已提交”的消息(committed message)做有限度的持久化保证。**这里面主要有两个意思。1.1 已提交的消息当 Kafka 的若干个 Broker 成功地接收到一条消息并写入到日志文件后,它们会告诉生产者程序这条消息已成功提交。此时,这条消息在 Kafka 看来就正式变为“已提交”消息了。那为什么是若干个 Broker 呢?这取决于你对“已提交”的定义。你可以选择只要有一个 Broker 成功保存该消息就算是已提交,也可以是令所

2020-10-26 21:05:49 713

原创 Flink源码剖析:Metrics运作机制

文章目录1. Metrics简介1.1 什么是 Metrics?1.2 Metric Types1.3 Metric Group2. Metrics运行机制2.1 初始化Reporter2.1.1 PrometheusReporter2.1.2 PrometheusPushGatewayReporter2.2 注册Reporter2.3 收集Metrics到内存2.4 发送Metrics到第三方存储1. Metrics简介1.1 什么是 Metrics?Flink 提供的 Metrics 可以在 Fl

2020-10-26 08:00:26 742 1

原创 Flink调优:数据倾斜优化

文章目录1. 定义1.1 危害1.1.1 任务瘫痪1.1.1 checkpoint时间边长1.1.2 state变大2. 解决办法2.1 修改分区策略2.1.1 目标2.1.2 手段2.2 两阶段聚合2.2.1 目标2.2.2 手段2.2.2.1 修改sql2.2.2.2 localglobal2.2.2.3 PartialFinal1. 定义当进行聚合运算时(Group By/KeyBy + Agg),如果聚合所使用的key存在热点,则会导致数据倾斜。如统计某日各个省份的车流量,则负责运算北京、上海等

2020-10-12 14:06:32 3658

原创 Flink部署:flink-on-kubernetes 实践

文章目录1. Mac 安装 Docker2. Minikube 搭建 Kubernetes 实验环境2.1 安装 Minikube3. Flink 实时处理 demo4. 构建 Docker 容器镜像5. 部署 JobManager6. 部署 TaskManagerkubernetes 是目前非常流行的容器编排系统,在其之上可以运行 web 服务、大数据处理等各类应用。这些应用被打包在非常轻量的容器中,我们通过声明的方式来告知 kubernetes 要如何部署和扩容这些程序,并对外提供服务。flink o

2020-09-30 11:01:42 1953

原创 Kafka Connect:Debezium Connector远程调试

文章目录1. 分析启动脚本1.1 启动命令1.2 kafka-run-class2. idea配置1. 分析启动脚本1.1 启动命令# background running modecd /home/lenmom/workspace/software/confluent-community-5.1.0-2.11/ &&./bin/connect-distributed -daemon ./etc/schema-registry/connect-avro-distributed.pro

2020-09-23 15:16:03 564

原创 Flink原理:窗口原理详解

文章目录1. 定义2. 窗口分类2.1 Time Window2.1.1 Flink中的时间种类有哪些2.1.2 Tumbling Time Window2.1.3 Sliding Time Window2.2 Count Window2.2.1 Tumbling Count Window2.2.2 Sliding Count Window2.3 Session Window3. 窗口组件4. 源码分析4.1 Count Window源码4.2 Time Window源码5. 窗口state5.1 stat

2020-09-01 09:40:16 1179 1

原创 Flink原理:定时器

1. 用途Flink定时器存在于窗口的触发,窗口状态的清理,TTL等诸多用途,因此搞清楚其原理对于理解这些知识点至关重要。2. 示例在flink实时处理中,涉及到延时处理可使用KeyedProcessFunction来完成,KeyedProcessFunction是flink提供面向用户的low level api,可以访问状态、当前的watermark或者当前的processingtime, 更重要的是提供了注册定时器的功能,分为:注册处理时间定时器,直到系统的processingTime超过了

2020-09-01 09:32:05 5224

原创 Flink监控:自定义消费延迟Metrics

文章目录1. 需求2. 名词解释1. 需求现有如下需求,以kafka作为source,实时统计flink任务的消费偏移量current-offset和分区偏移量总长度log-end-offset,并计算两者差着,得到消费延迟lag,如图:2. 名词解释current-offset:相比current-offset,我们更熟悉commit-offset,每一次poll(),...

2020-08-07 18:24:48 2221 2

原创 Flink源码剖析:Flink Async I/O的三种模式

文章目录1. 维表join2. richmapfunction2.1 示例3. asyncio3.1 示例3.2 Ordered模式3.2.1 生产3.2.2 消费3.3 基于processtime的unordered模式3.3.1 生产3.3.2 消费3.4 基于eventTime的unordered模式3.4.1 生产3.4.2 消费4. 总结1. 维表join流计算系统中经常需要与外部系统进行交互,比如需要查询外部数据库以关联上用户的额外信息。通常,我们的实现方式是向数据库发送用户a的查询请求,然

2020-06-16 16:12:52 855

原创 Flink原理:Flink中的日志框架配置

文章目录1. 背景2. 日志门面slf4j2.1 log4j2.2 log4j23. 避免冲突4. 总结1. 背景很多同学在进行Flink开发时,无论是使用log4j或log4j2,常常出现各种问题,如下图所示:今天我们就要拨开云雾见天日,聊聊日志相关的知识,搞清楚这些报错的原因。众所周知,现代框架都是用门面模式进行日志输出,例如使用Slf4j中的接口输出日志,具体实现类需要由log4j,log4j2,logback等日志框架进行实现,如Flink的类中是这样输出日志的:// org.apache

2020-06-13 22:46:04 4257 2

原创 Flink源码剖析:flink-cep 自带测试用例

文章目录1.testSimplePatternCEP2.testSimpleKeyedPatternCEP3.testSimplePatternEventTime4.testSimpleKeyedPatternEventTime5.testProcessingTimeWithWindow6.testTimeoutHandling7.testSimpleOrFilterPatternCEP8.testSimplePatternEventTimeWithComparator9.testSimpleAfterMa

2020-06-06 23:36:46 622

原创 Flink源码编译:问题记录

背景跑 flink-examples,各种报错,各种test类之间依赖找不到,极其头大!疑惑寻找解决办法时,心中不禁冒出三个问题:为什么跑 flink-examples的时候,Intellij idea会自动build一些无关紧要的代码 ?build是否可以绕过Test,直接运行当前flink-exmaples中的代码?build与maven compile的区别是什么?答案针对以上3个问题,一一解答:跑Intellij idea时,默认会强制进行build,包括一些无关代码,如图

2020-06-04 22:45:10 1109

原创 NIO进阶篇:Page Cache、零拷贝、顺序读写、堆外内存

文章目录DMADMA原理Page Cache文件Page Cache的作用Page Cache相关的数据结构零拷贝常规文件读写mmapsendfile顺序读写堆外内存堆内存与堆外内存的关系堆外内存的回收DMA在学习零拷贝等NIO技术之前,我们需要先知道什么是DMA。DMA(Direct Memory Access,直接存储器访问)。在DMA出现之前,CPU与外设之间的数据传送方式有程序传送方式、中断传送方式。CPU是通过系统总线与其他部件连接并进行数据传输。不管何种传送方式,都要消耗CPU,间接影响了其

2020-05-31 16:32:53 1623

原创 NIO基础篇:Buffer、Channel、Selector

NIO概念Java NIO(New IO)是从Java 1.4版本开始引入的 一个新的IO API,可以替代标准的Java IO API。 NIO与原来的IO有同样的作用和目的,但是使用 的方式完全不同,NIO支持面向缓冲区的、基于 通道的IO操作。NIO将以更加高效的方式进行文 件的读写操作。IONIO面向流(Stream Oriented)面向缓冲区(Buffer Oriented)阻塞IO(Blocking IO)非阻塞IO(Non Blocking IO)(无

2020-05-27 07:09:35 248

原创 表达式引擎性能对比

文章目录1. 表达式引擎选型2. 性能测试2.1 测试维度2.2 测试方式2.3 结论3. 附录3.1 机器配置3.2 Java 测试代码1. 表达式引擎选型如果要做一个规则引擎,需要匹配一组规则集来做决策,此时就需要一个表达式引擎来辅助。选择 5 种主要的表达式引擎进行性能对比,从而选择最优表达式引擎和最优方案。Janino、QLExpress、MEVL、JUEL、FEL。当然,除了计算性能,还有考虑功能是否满足,以及是否有安全漏洞等,本文仅进行表达式引擎的性能对比。2. 性能测试2.1 测试

2020-05-24 18:38:41 4996 1

原创 Kafka核心源码分析-生产者-Sender

Kafka核心源码分析-生产者-Sender1.简单介绍2.Sender分析2.1 请求头分析2.2 KSelector2.3 InFlightRequests2.4 MetadataUpdater2.5 NetworkClient1.简单介绍我们来了解下Sender线程发送消息的整个流程:首先,它根据RecordAccumulator的缓存情况,筛选出可以向哪些Node节点发送消息,即上一篇的介绍的RecordAccumulator.ready()方法;然后根据生产者与各个节点的连接情况(由Netwo

2020-05-14 12:53:34 399

原创 Kafka监控:consumer消费进度查询方案的演变

文章目录1. 背景2. 方案一:__consumer_offsets2.1 消息格式2.2 代码3. 方案二:AdminClient3.1 流程3.2 代码1. 背景大数据平台经常以Kafka作为消息中间件,且需要有完整的针对Kafka的管理和监控体系,例如实时查看:current-offset:topic在不同消费者组中的消费进度log-end-offset: topic中的可见消息总量Lag:消费延迟,lag=logEndOffset - currentOffset消费进度的保存机制在不同的

2020-05-10 23:37:48 538

原创 Kafka核心源码分析-生产者-RecordAccumulator

Kafka核心源码分析-生产者-RecordAccumulator1.简单介绍2.源码分析2.1 MemoryRecords2.2 RecordBatch2.3 BufferPool2.4 RecordAccumulator1.简单介绍主线程调用KafkaProducer.send()方法发送消息的时候,先将消息放到RecordAccumulator中暂存,然后主线程就可以从send()方法中返回了,此时消息并没有真正发送给Kafka,而是在RecordAccumulator中暂存,当RecordAcc

2020-05-09 12:40:35 453

原创 Kafka核心源码分析-生产者-KafkaProducer

KafkaProducer1.发送消息流程2.实例3.kafkaProducer分析3.1 ProducerInterceptors3.2 集群元数据3.3 Serialiser&DeseriaLizer3.4 Partitioner1.发送消息流程生产者与服务端完成一次网络通信步骤如下:生产者客户端应用程序产生消息客户端连接对象将消息包装到请求中,发送到服务端服务短...

2020-05-05 09:38:36 448

原创 Flink源码剖析:flink-streaming-java 之 JobGraph

文章目录1. 调用链路2. 源码剖析2.1 JobVertex2.2 JobEdge2.3 IntermediateDataSet2.4 StreamConfig2.5 StreamGraph 到 JobGraph 的核心转换3. 自带 WordCount 示例详解本文主要围绕 Flink 源码中 flink-streaming-java 模块。介绍下 StreamGraph 转成 JobGra...

2020-05-05 00:11:30 726

原创 Flink源码剖析:flink-examples-streaming 自带demo示例

文章目录1.wordcount2.socket3.async4.iteration5.join6.sideoutput7.windowing7.1 session window7.2 count window7.2.1 slide count window7.2.2 tumble count window本文主要分析下 Flink 源码中 flink-examples-streaming 模块,...

2020-05-02 15:48:55 3666

原创 Kafka安全认证:SASL/GSSAPI (kerberos)

文章目录kafka和zookeeper开启kerberos认证1. 环境2. 创建主体并生成keytab3. 配置jaas.conf4. 配置kafka server.properties5. 配置kafka zookeeper.properties6. kafka broker+zookeeper启动脚本7. kafka client的使用7.1 producer7.2 consumerkaf...

2020-05-01 16:51:57 5914

原创 Kafka安全认证:CentOS7上安装kerberos

文章目录1.kerberos概念介绍2. kerberos认证过程3. kerberos安装4. 创建 KDC 数据库5. 编辑 `kadm5.acl`6. 启动kdc和admin7. 添加principal8. 使用keytab登陆1.kerberos概念介绍principal:认证的主体,如kafka/[email protected],其中kafka是主体的用...

2020-05-01 16:49:28 1478

原创 Flink实战:flink监控prometheus_influxdb + grafana企业实战

文章目录1. 功能点2. 方案对比2.1 方案一:prometheus+flink2.1.1 安装部署2.1.2 有价值资料2.1.3 错误总结2.1.4 参考命令2.2 方案二:influxdb(当前与监控系统无关)2.2.1 influxdb常用命令2.2.2 使用经验2.2.2 错误总结本文档为实时计算相关的监控系统的整体说明,记录监控系统相关的部分细节。监控大盘如图:1. 功能点...

2020-04-28 23:24:33 2930

原创 Flink问题:记Flink Metrics时断时续问题排查

文章目录1. 背景2. 问题分析2.1 实验设计2.2 源码分析3. 解决方法1. 背景用prometheus+pushgateway+grafana监控体系对flink的各项metrics进行监控,出现如下图所示状况:可以发现,指标每过一些时间就会消失,然后又出现。2. 问题分析2.1 实验设计存在三种可能,1:prometheus有bug导致拉不到数据;2:pushgateway...

2020-04-28 20:50:13 2116 4

原创 Flink原理:这一次带你彻底搞懂watermark

文章目录背景定义生成1. 生成时机2. 生成方式更新规则1. 单并行度2. 多并行度传播窗口触发时机分析1. 示例一2. 示例二3. 示例三如何设置最大乱序时间延迟数据处理1. 定义2. 触发条件3. 示例延迟数据重定向背景我们知道,流处理从事件产生,到流经source,再到operator,中间是有一个过程和时间的。虽然大部分情况下,流到operator的数据都是按照事件产生的时间顺序来的,...

2020-04-23 13:15:20 1392

原创 Flink源码剖析:flink-streaming-java 之 StreamGraph

文章目录1.DataStream API使用一览2. 源码剖析2.1 StreamExecutionEnvironment2.2 Transformation2.3 DataStream2.4 StreamOperator2.5 Function2.6 StreamGraph2.7 类之间的层级关系本文主要围绕 Flink 源码中 flink-streaming-java 模块。介绍如何使用 D...

2020-04-22 16:37:47 1585

原创 设计模式:行为类

文章目录1. 模版方法模式2. 中介者模式3. 命令模式3.1 实例-电视遥控器4. 责任链模式5. 策略模式6. 观察者模式7. 备忘录模式8. 访问者模式9. 状态模式10. 解释器模式本文介绍Java开发中的行为类设计模式。1. 模版方法模式图1: 模板方法模式AbstractClass:抽象模板,它的方法分为两类,基本方法和模板方法。基本方法:是由子类实现的方法,并且在模板方...

2020-04-20 00:50:04 232

原创 设计模式:结构类

文章目录1. 代理模式2. 装饰者模式2.1 实例-变形金刚3. 适配器模式4. 组合模式5. 门面模式6. 享元模式7. 桥梁模式本文介绍Java开发中常见的结构类设计模式。1. 代理模式用一个代理类来隐藏真实类的实现细节,通常还用于在真实的实现前后添加一部分逻辑。图1: 代理模式Project:抽象主题类public interface Subject { void...

2020-04-20 00:40:13 193

计算机组成原理第四版 白中英主编 课后习题答案

计算机组成原理第四版 白中英主编 课后习题答案

2012-03-22

空空如也

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

TA关注的人

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