9 淡定一生2333

尚未进行身份认证

我要认证

暂无相关简介

等级
TA的排名 3w+

Flink的低延迟、高吞吐与Task之间的通信机制

Flink自称是一个低延迟、高吞吐、有状态、容错的流式计算矿建。其中容错在之前的《Flink的ExactlyOnce语义与Checkpoint的实现》文章中已经说过了,容错是在数据流中周期性的注入一条CheckPointBarrier记录,各Task看到这种记录时,会将State持久化到后端存储中。如果发生了异常,可以从CheckPoint目录中恢复任务运行以及状态。 本文主要了解下Flink是如何实现低延迟与高吞吐的。低延迟 VS高吞吐: 低延迟和高吞吐其实是悖论。...

2020-10-19 22:18:45

ElasticSearch scroll查询原理

一、 ES搜索两阶段简介ES的搜索是分2个阶段进行的,即Query阶段和Fetch阶段。Query阶段比较轻量级,通过查询倒排索引,获取满足查询结果的文档ID列表。Fetch阶段比较重,需要将每个shard的结果取回,在协调结点进行全局排序。 通过From+size这种方式分批获取数据的时候,随着from加大,需要全局排序并丢弃的结果数量随之上升,性能越来越差。二、 scroll分析Scroll查询,先做轻量级的Query阶段以后,免去了繁重的全局排序过程。 它只是将查询结果集,也...

2020-09-27 11:11:24

Flink中的状态一致性(再细说下Checkpoint)

CheckPoint流程如下:Coordinator发起trigger Source中注入barrier Source保存自己的状态 将状态的保存路径state handle汇报给coordinator下游task接收到barrier后继续保存状态,并向下继续传递barrier所有的operator都snapshot完成后,jobmanager会标记此次Checkpoint为completed checkpoint,并将meta存储到backend中...

2020-09-13 22:54:23

Kafka的幂等性与事务性理解

最近在深入理解Flink的Exactly-Once,发现Flink Checkpoint只能保障Flink程序内部的一致性,无法保证Sink到外部系统的Exactly-Once语义。但是Sink到外部如果实现了TwoPhaseCommitSinkFunction这个抽象类就能实现端到端的Exactly-Once语义,而Kafka刚好也实现了这个这个类,所以先来研究下Kafka的Exactly-Once是怎么实现的。 在Producer向Kafka发送消息的时候,如果消息成功被写入到日志文件...

2020-09-08 12:53:27

Flink中的Window原理分析

Flink中Window的概念及原理分析Window的作用: Window是无限流上的一种核心机制,可以将流按照用户指定的策略分隔为一个个有限大小的窗口,然后对窗口中的数据进行聚合或者一些复杂计算的操作,例如统计最近5分钟某网站的点击数。 在流式计算领域,Window概念具有通用性,并非是Flink特有的机制。Window中的一些概念:先再来回顾下Flink中的几种时间概念:Event Time:事件时间指的是数据真实发生的时间,这个时间在进入Flink之前已经记录到了数...

2020-08-17 08:34:15

Flink On Yarn container频繁被Kill

Q3经验案例 将Flink Job提交到Yarn上运行,命令行中指定:-p 3 –yts 1,那么便会启动一个拥有3个TaskManager的Flink集群,在Yarn中对应的就是3个container。但是运行一段时间后发现其中某个Container会反复重新启动,如下图所示,Container的编号都到49了:从TaskManager的Flink WebUi界面点击进去,查询到对应的Container的日志文件位置,在文件中找到了如下内容,发现Container被Kil...

2020-08-09 23:16:05

Flink的容错机制了解

本文介绍下Flink的容错机制,目的主要是了解下如果Flink环境发生异常,会不会对计算结果造成影响。JobManager的容错: Flink JobManager的HA仅支持StandAlone和Yarn Cluster两种集群模式。StandAlone和Yarn Cluster模式下的HA实现方式各不相同: Standalone 集群的 JobManager 高可用性的概念是,任何时候都有一个主 JobManager 和 多个备 JobManagers,在主JobM...

2020-08-07 08:31:56

Spark的容错机制

项目中会经常使用到Spark和Flink这些分布式框架,使用的时候老是担心如果出现异常了会怎样,今天就来了解下Spark以及Flink的容错机制。 容错是指一个系统部分出现错误的情况还能持续的提供服务,当集群达到较大的规模以后,很可以出机器故障以及网络延迟等情况,导致某个节点不能提供服务,所以分布式框架一般都会进行高容错设计。Spark的容错机制:Master异常退出: 个人理解是,只有StandAlone模式下才需要额外进行Master容错配置。如果是On Yar...

2020-08-01 16:35:24

同一个电脑安装两个jdk版本

项目中分别使用到了JDK8和JDK11,需要在两个JDK之间切换,所以了解下如果在一台服务器上安装多个版本的JDK。1 . 准备两个版本的jdk我的两个jdk路径为:D:\jdk1.7.0_80D:\Program Files\Java\jdk1.8.0_1112 . 设置两个子JAVA_HOME,和一个总的JAVA_HOME共三个环境变量:JAVA_HOME7 = D:\jdk1.7.0_80JAVA_HOME8 = D:\ProgramFiles\Java\jdk...

2020-08-01 15:16:27

Flink如何清除过期的CheckPoint

生产环境中,Flink Job运行过程中会定期执行CheckPoint,将内部状态持久化到外部的存储系统中,一般会选择使用HDFS。多种外部存储系统之间的差异详见之前写的那篇文章《Flink的状态后端(State Backends)》。随着程序不停的执行, CheckPoint文件会越来越多,如何清理过期的文件就是一个很大的问题。 一般建议大家选用RocksDB作为StateBackend。RocksDB使用的LSM树,会将状态存储到磁盘sst文件(类似HBase中的HFile)中,避免S...

2020-07-15 23:37:03

Flink的状态后端(State Backends)

一、前言 Flink提供不同的状态后端(State Backend)来区分状态的存储方式和存储位置。Flink状态可以存储在java堆内存内或者内存之外。通过状态后端的设置,Flink允许应用持有大容量的状态。开发者可以在不改变应用逻辑的情况下设置状态后端。二、可用的State BackendFlink提供三种开箱即用的State Backend:MemoryStateBackend FsStateBackend RocksDBStateBackend 2.1...

2020-06-30 22:42:54

Flink Job启动及执行流程分析

之前写过一篇文章分析过Flink的基本架构,当时大概了解了JobManager、TaskManager、Slot等概念,本文主要是想了解下Flink中Job的执行流程,老是把Job执行当成一个黑盒总感觉难受。 之前说过FlinkJob Client负责讲任务提交给JobManager执行,Client可以和JobManager通信获取作业的执行状态。JobManager负责接收Flink作业、资源管理(Slot)、task调度、Checkpoint发起等等,TaskManager负责真正...

2020-06-27 21:57:31

整理一些Spark数据倾斜解决的思路

项目中经常会使用到Spark进行批处理,数据量大的时候总是会遇到数据倾斜的情况,参考了项目中遇到的情况以及网上的一些案例,写篇文章来总结下如何处理Spark中常见的数据倾斜问题。当然由于业务场景不一样,本文说到的一些解决数据倾斜的思路肯定不全,如果有更好的方法,方便的话在评论里也告诉我一下哈。啥叫数据倾斜: Spark的RDD由多个Partition组成,如果某个Partition的数据比其他Partition的数据要多很多,这个就是数据倾斜,如下图所示: 数据倾斜...

2020-06-22 23:45:10

Flink的内存模型的一些个人理解

其实官方文档中的对于Flink内存模型讲解的已经很详细了,本文主要是介绍下个人对这个内存模型的理解,如果有理解不对的地方,希望大家帮忙指正下! 因为接触Flink的时间比较晚,所以一上来我们使用的就是V1.10版本,TaskManager的内存模型与配置在该版本中做了很大的优化。Flink 1.10之前的的内存模型存在的缺点: 1.流处理与批处理内存配置方法不同。比如TaskManager这块内存,在批处理中有用,在流处理中使用不到的 2.内存配置细节繁...

2020-06-19 00:27:48

Flink的ExactlyOnce语义与Checkpoint的实现

本文主要是想了解下Flink如何实现Exactly_Once语义以及它的CheckPoint机制。消息发送三种语义介绍:我们在一般的流处理程序中,消息发送会有三种处理语义:At_Most_Once: 至多一次,表示一条消息不管后续处理成功与否只会被消费处理一次At_Least_Once: 至少一次,表示一条消息从消费到后续的处理成功,可能会发生多次Exactly_Once: 精确一次,表示一条消息从其消费到后续的处理成功,只会发生一次 ...

2020-06-14 23:47:46

Strom、SparkStreaming以及Flink三种流式框架了解

本文主要是想了解下Storm、Flink、Spark Streaming这三种流式计算框架的区别以及它们适合的应用场景。Storm:Storm 是 Twitter 开源的分布式实时大数据处理框架,擅长处理海量数据,适用于数据实时处理而非批处理。Storm也是主从架构,主节点Nimbus负责资源分配和任务调度,工作节点Supervisor负责真正执行任务。一个Supervisor可以有多个工作进程Worker,每个工作进程中可以运行多个Task,每个Task都是一个线程,执行实...

2020-06-10 23:28:31

Flink运行时环境介绍

一. Apache Flink是什么? Apache Flink 是一个开源的分布式,高性能,高可用,准确的流处理框架。支持实时流处理和批处理。无界流有定义流的开始,但没有定义流的结束。无界流的数据必须持续立即处理,通常要求以特定顺序摄取事件,例如事件发生的顺序,以便能够推断结果的完整性。无界流处理通常被称为流式处理。有界流有定义流的开始,也有定义流的结束。有界流处理通常被称为批处理二. Flink基本架构Flink也是Master/Slave架构, 运行时包含两类进...

2020-06-07 22:46:17

JAVA中优先队列PriprityQueue详解

Java中PriorityQueue通过二叉小顶堆实现,可以用一棵完全二叉树表示。本文从Queue接口函数出发,结合生动的图解,深入浅出地分析PriorityQueue每个操作的具体过程和时间复杂度,将让读者建立对PriorityQueue建立清晰而深入的认识。总体介绍前面以JavaArrayDeque为例讲解了Stack和Queue,其实还有一种特殊的队列叫做PriorityQueue,即优先队列。优先队列的作用是能保证每次取出的元素都是队列中权值最小的(Java的优先队列每次取最小元素,C++.

2020-06-03 22:44:08

JVM指针压缩性能问题

当前一台个人台式机的内存都能随随便便超过4G内存,所以现在基本上大家用的都是64位的JVM。对于32位的JVM来说,对象引用(指针)的长度是32个字节,能表示的最大范围是2^32 = 4G,而对于64位的JVM来说,对象应用的长度就变成了2^64...懒得算剋以表示多大的范围了,总之来说就是64位长度的指针来说有点浪费了,平白增加了内存的使用量和GC的开销。 所以在JDK 1.6的版本后,我们在64位中的JVM中可以开启指针压缩(UseCompressedOops)来压缩我们对象指针的大小...

2020-05-25 21:03:41

Kafka部分Partition中无数据导致Window不触发问题

业务上需要将同一个时间段的两种数据收集到一起做一些计算,这两种数据分别存在于Kafka的两个Topic中。计算逻辑是这样的: 使用两个DataStream分别消费两个Topic中的数据,对两条流先分别设置WaterMark,然后union,接着进行keyBy操作,最后使用Window将同一个时间窗口中的两种数据汇聚在一起进行计算。但是发现程序无论是在本地运行还是在yarn-cluster模式下运行,只要并行度不为1,程序都不能正常执行。明明显示已经收到了数据,但是Window就是不触发:...

2020-05-11 10:29:36

查看更多

勋章 我的勋章
  • 持之以恒
    持之以恒
    授予每个自然月内发布4篇或4篇以上原创或翻译IT博文的用户。不积跬步无以至千里,不积小流无以成江海,程序人生的精彩需要坚持不懈地积累!
  • 勤写标兵Lv1
    勤写标兵Lv1
    授予每个自然周发布1篇到3篇原创IT博文的用户。本勋章将于次周周三上午根据用户上周的博文发布情况由系统自动颁发。