- 博客(212)
- 资源 (21)
- 收藏
- 关注
原创 Flink流处理迭代之化解反馈环
我们都知道Flink在可迭代的流处理中引入了反馈边来将本次迭代的结果反馈给迭代头以进行下一次迭代,这在执行拓扑中引入了环(反馈环)。Flink主要应对的执行拓扑还是有向无环图(DAG),最终它选择了将反馈环进行化解使其能够适配有向无环图的结构,而如何对反馈环进行化解是我们这一篇主要探讨的话题。
2016-12-06 19:26:07 3574 2
原创 Flink流处理之迭代API分析
Flink在DataStream中也是通过一个特定的可迭代的流(IterativeStream)来构建相关的迭代处理逻辑,这一点跟DataSet提供的可迭代的数据集(IterativeDataSet)的是类似的。
2016-12-04 21:30:04 5243
原创 Flink流处理之迭代案例
当前Flink将迭代的重心集中在批处理上,之前我们谈及了批量迭代和增量迭代主要是针对批处理(DataSet)API而言的,并且Flink为批处理中的迭代提供了针对性的优化。但是对于流处理(DataStream),Flink同样提供了对迭代的支持,这一节我们主要来分析流处理中的迭代,我们将会看到流处理中的迭代相较于批处理有相似之处,但差异也是十分之明显。
2016-11-29 20:14:27 10499 1
原创 Flink流处理之窗口算子分析
窗口算子WindowOperator是窗口机制的底层实现,它几乎会牵扯到所有窗口相关的知识点,因此相对复杂。本文将以由面及点的方式来分析WindowOperator的实现。
2016-10-29 19:40:20 15007 7
原创 Flink如何用窗格来优化窗口
对于处理时间类型的窗口(包含了翻滚窗口和滑动窗口),Flink会使用称之为”pane”的技术来优化这类时间窗口的计算。
2016-09-29 22:41:20 5299 1
原创 Apache Flink Client生成StreamGraph
概述上文我们分析提交流程时,RemoteStreamEnvironment类的execute方法的第一步就是生成StreamGraph。StreamGraph是用于表示流的拓扑结构的数据结构,它包含了生成JobGraph的必要信息。
2016-07-23 21:14:39 7303
原创 Apache Flink流作业提交流程分析
提交流程调用的关键方法链用户编写的程序逻辑需要提交给Flink才能得到执行。本文来探讨一下客户程序如何提交给Flink。鉴于用户将自己利用Flink的API编写的逻辑打成相应的应用程序包(比如Jar)然后提交到一个目标Flink集群上去运行是比较主流的使用场景,因此我们的分析也基于这一场景进行。
2016-07-17 22:36:55 11463 1
原创 Flink类型系统的根及基本接口
之前我们谈到了Flink通过自主管理内存的方式来,避免了让JVM管理内存带来的一些问题。自主管理内存之后,JVM中原生的类型也就不适合使用了。因此Flink也对Java的类型进行了扩展,这就是我们本节关注的内容。
2016-07-09 21:18:58 5435 1
原创 Apache Flink fault tolerance源码剖析完结篇
这篇文章是对Flinkfault tolerance的一个总结。虽然还有些细节没有涉及到,但是基本的实现要点在这个系列中都已提及。回顾这个系列,每篇文章都至少涉及一个知识点。我们来挨个总结一下。
2016-06-19 22:09:42 4309
原创 Apache Flink fault tolerance源码剖析(六)
上篇文章我们分析了基于检查点的用户状态的保存机制——状态终端。这篇文章我们来分析barrier(中文常译为栅栏或者屏障,为了避免引入名称争议,此处仍用英文表示)。检查点的barrier是提供exactly once一致性保证的主要保证机制。这篇文章我们会就此展开分析。
2016-06-13 22:33:57 5171
原创 Apache Flink fault tolerance源码剖析(五)
上一篇文章我们谈论了保存点的相关内容,其中就谈到了保存点状态的存储。这篇文章我们来探讨用户程序状态的存储,也是在之前的文章中多次提及的state backend(中文暂译为状态终端)。
2016-06-07 22:49:52 5893
原创 Apache Flink fault tolerance源码剖析(四)
上篇文章我们探讨了Zookeeper在Flink的fault tolerance中发挥的作用(存储/恢复已完成的检查点以及检查点编号生成器)。这篇文章会谈论一种特殊的检查点,Flink将之命名为——Savepoint(保存点)。
2016-06-04 17:00:38 8903
原创 Apache Flink fault tolerance源码剖析(三)
上一篇文章我们探讨了基于定时任务的周期性检查点触发机制以及基于Akka的actor模型的消息驱动协同机制。这篇文章我们将探讨Zookeeper在Flink的Fault Tolerance所起到的作用。其实,Flink引入Zookeeper的目的主要是让JobManager实现高可用(leader选举)。
2016-06-02 23:39:47 8052
原创 Apache Flink fault tolerance源码剖析(二)
继续Flink Fault Tolerance机制剖析。上一篇文章我们结合代码讲解了Flink中检查点是如何应用的(如何根据快照做失败恢复,以及检查点被应用的场景),这篇我们来谈谈检查点的触发机制以及基于Actor的消息驱动的协同机制。
2016-05-29 21:14:41 11227
原创 Apache Flink fault tolerance源码剖析(一)
因某些童鞋的建议,从这篇文章开始结合源码谈谈Flink Fault Tolerance相关的话题。上篇官方介绍的翻译是理解这个话题的前提,所以如果你想更深入得了解Flink Fault Tolerance的机制,推荐先读一下前篇文章理解它的实现原理。当然原理归原理,原理体现在代码实现里并不是想象中的那么直观。这里的源码剖析也是我学习以及理解的过程。
2016-05-26 07:03:36 16370 4
翻译 Apache Flink数据流的Fault Tolerance机制
简介Apache Flink提供了一个失败恢复机制来使得数据流应用可以持续得恢复状态。这个机制可以保证即使线上环境的失败,程序的状态也将能保证数据流达到exactly once的一致性。注意这里也可以选择降级到保证at least once的一致性级别。
2016-05-22 20:58:35 8109
原创 Apache Flink源码解析之stream-operator
前面我们谈论了Flink stream中的transformation。你可以将transformation看成编写Flink程序并构建流式处理程序的必要组成部分(静态表现形式);而本篇我们将探讨transformation在Flink运行时对应的动态表现形式——operator。
2016-05-21 22:59:43 14860
原创 Apache Flink源码解析之stream-transformation
之前我们聊了Flink程序的source、sink就差transformation了。今天我们就来解读一下Flink的transformation。它们三者的关系如下图:当然这还是从Flink编程API的角度来看的(编程视角)。所谓的transformation,用于转换一个或多个DataStream从而形成一个新的DataStream对象。
2016-05-14 20:33:53 14018
原创 Apache Flink源码解析之stream-windowfunction
Window也即窗口,是Flink流处理的特性之一。前一篇文章我们谈到了Winodw的相关概念及其实现。窗口的目的是将无界的流转换为有界的元素集合,但这还不是最终的目的,最终的目的是在这有限的集合上apply(应用)某种函数,这就是我们本篇要谈的主题——WindowFunction(窗口函数)。
2016-05-12 22:59:44 15696 1
原创 Apache Flink源码解析之stream-window
window(窗口)是Flink流处理中非常重要的概念,本篇我们来对窗口相关的概念以及关联的实现进行解析。本篇的内容主要集中在package org.apache.flink.streaming.api.windowing下。
2016-05-10 23:05:39 8749
原创 Apache Flink源码解析之stream-sink
上一篇我们谈论了Flink stream source,它作为流的数据入口是整个DAG(有向无环图)拓扑的起点。那么与此对应的,流的数据出口就是跟source对应的Sink。这是我们本篇解读的内容。
2016-05-07 22:21:20 7634
原创 Apache Flink源码解析之stream-source
今天我们来解读一下Flink stream里的source模块。它是整个stream的入口,也是我们了解其流处理体系的入口。
2016-05-05 23:22:13 11162 3
翻译 Flink中task之间的数据交换机制
Flink中的数据交换构建在如下两条设计原则之上:数据交换的控制流(例如,为实例化交换而进行的消息传输)是接收端初始化的,这非常像最初的MapReduce。数据交换的数据流(例如,在网络上最终传输的数据)被抽象成一个叫做IntermediateResult的概念,它是可插拔的。这意味着系统基于相同的实现逻辑可以既支持流数据,又支持批处理数据的传输。
2016-04-24 20:31:08 15594 8
原创 日志系统之定时任务执行引擎
概述最近这段时间在强化日志系统自身的稳定性和可靠性,一个稳定可靠的系统离不开监控,我们这里谈及的监控除了服务是否存活还有这些组件的核心metrics采集与抓取,为此我们将这些任务做成了定时任务来执行。由于大致的思路以及设计已经成型,所以今天来分享一下日志系统在定时任务这块的选型与设计。
2016-04-23 22:07:55 8457 2
翻译 Flink如何应对背压问题
经常有人会问Flink如何处理背压问题。其实,答案很简单:Flink没用使用任何通用方案来解决这个问题,因为那根本不需要那样的方案。它利用自身作为一个纯数据流引擎的优势来优雅地响应背压问题。
2016-04-21 23:37:12 25200 4
原创 Akka在Flink中的使用剖析
Akka与Actor 模型Akka是一个用来开发支持并发、容错、扩展性的应用程序框架。它是actor model的实现,因此跟Erlang的并发模型很像。在actor模型的上下文中,所有的活动实体都被认为是互不依赖的actor。actor之间的互相通信是通过彼此之间发送异步消息来实现的。每个actor都有一个邮箱来存储接收到的消息。
2016-04-14 23:48:35 16070
原创 Flink内存管理源码解读之内存管理器
回顾上一篇文章我们谈了Flink自主内存管理的一些基础的数据结构。那篇中主要讲了数据结构的定义,这篇我们来看看那些数据结构的使用,以及内存的管理设计。概述这篇文章我们主要探讨Flink的内存管理类MemoryManager涉及到对内存的分配、回收,以及针对预分配内存而提供的memory segment pool。还有支持跨越多个memory segment数据访问的page view。
2016-04-06 22:55:54 7519 2
原创 Flink内存管理源码解读之基础数据结构
概述在分布式实时计算领域,如何让框架/引擎足够高效地在内存中存取、处理海量数据是一个非常棘手的问题。在应对这一问题上Flink无疑是做得非常杰出的,Flink的自主内存管理设计也许比它自身的知名度更高一些。正好最近在研读Flink的源码,所以开两篇文章来谈谈Flink的内存管理设计。
2016-03-24 23:18:10 7192 12
原创 日志系统之基于flume收集docker容器日志
最近我在日志收集的功能中加入了对docker容器日志的支持。这篇文章简单谈谈策略选择和处理方式。
2016-02-07 09:56:09 11938 1
原创 日志系统之基于Zookeeper的分布式协同设计
最近这段时间在设计和实现日志系统,在整个日志系统系统中Zookeeper的作用非常重要——它用于协调各个分布式组件并提供必要的配置信息和元数据。这篇文章主要分享一下Zookeeper的使用场景。这里主要涉及到Zookeeper在日志系统中的使用,但其实它在我们的消息总线和搜索模块中也同样非常重要。
2015-12-26 20:34:44 5474 3
原创 消息总线之模型重构
前段时间重新对消息总线的通信模型进行设计&重构,这篇文章谈谈其中的一些想法。消息总线对RabbitMQ的官方java client进行了定制、简化。
2015-12-11 14:58:08 3208
原创 日志系统之Flume采集加morphline解析
这段时间花了部分时间在处理[消息总线](https://github.com/yanghua/banyan)跟日志的对接上。这里分享一下在日志采集和日志解析中遇到的一些问题和处理方案。
2015-11-20 22:17:12 7853
原创 消息总线重构之简化客户端
这段时间对消息总线进行了再次重构。本次重构主要针对消息总线的pubsub组件以及对client的简化,同时谈谈对消息总线的一些想法。
2015-10-30 21:11:21 4006 1
原创 一个基于redis和disque实现的轻量级异步任务执行器
简介horae是一个基于redis和disque实现的轻量级、高性能的异步任务执行器,它的核心是disque提供的任务队列,而队列有先进先出的时序关系,顾得名:horae。horae : 时序女神,希腊神话中司掌季节时间和人间秩序的三女神,又译“荷莱”。horae的关注点不是队列服务的实现本身(已经有不少队列服务的实现了),而是希望借助于redis与disque提供的纯内存的高性能的队列机制,实现一
2015-08-29 13:28:48 8061 2
翻译 redis实现访问频次限制的几种方式
结合上一篇文章《redis在学生抢房应用中的实践小结》中提及的用redis实现DDOS设计时遇到的expire的坑。其实,redis官网中对incr命令的介绍中已经有关于如何用redis来做rate limit的探讨。这里将实现的两种模式翻译一下,并适当加了一些批注说明,原文可见官网。
2015-08-23 12:25:15 25662
原创 redis在学生抢房应用中的实践小结
背景简介最近一个月,我们做了一个学生抢房的项目。考虑到抢房有一定的并发量(其实并没有那么大,被批次给隔离开来了),我们在抢房的项目中采用了全量redis的做法,本文主要是关于这个项目中涉及到redis使用的一个总结。
2015-08-18 13:10:17 4087 1
OFBiz track @ Apachecon EU 2014 in Budapest, Hungary Nov 17th - Nov 19th 2014
2015-02-04
seda eclipse工程可运行版
2012-04-03
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人