Flink FAQ

Flink是一个非常通用的系统,用于数据处理和数据驱动的应用程序,数据流作为核心构建块。这些数据流可以是实时数据流或存储的历史数据流。例如,在Flink的视图中,文件是存储的字节流。因此,Flink支持实时数据处理和应用程序,以及批处理应用程序。

流可以是无界的(没有结束,事件不断发生)或受限制(流有开始和结束)。例如,来自消息队列的Twitter馈送或事件流通常是无界的流,而来自文件的字节流是有界流。

如果一切都是流,为什么Flink中有DataStream和DataSet API?

有界流通常比无界流更高效。在(近)实时处理无限事件流需要系统能够立即对事件起作用并产生中间结果(通常具有低延迟)。处理有界流通常不需要产生低延迟结果,因为无论如何数据都是旧的(相对而言)。这允许Flink以简单且更高效的方式处理数据。

DataStream API 捕获无界和有界的流的连续处理,以支持低等待时间的结果以及对事件和时间(包括事件时间)灵活反应的模型。

DataSet API 具有加快有界的数据流的处理的技术。将来,社区计划将这些优化与DataStream API中的技术相结合。

Flink如何与Hadoop栈相关联 …

read more

Flink Dataflow 编程模型

Apache Flink是一个用于分布式流和批处理数据处理的开源平台。Flink的核心是流数据流引擎,为数据流上的分布式计算提供数据分发,通信和容错。Flink基于流引擎之上构建批处理,覆加本地迭代支持,内存托管和程序优化。

抽象层次

Flink提供不同级别的抽象来开发流/批处理应用程序。

编程抽象级别

  • 最低级抽象只提供stateful streaming。它通过Process Function嵌入到DataStream API中。它允许用户自由处理来自一个或多个流的事件,并使用一致的容错状态。此外,用户可以注册事件时间和处理时间回调,允许程序实现复杂的计算。

  • 在实践中,大多数应用程序不需要上述低级抽象,而是针对Core API编程, 如DataStream API(有界/无界流)和DataSet API(有界数据集)。这些流畅的API提供了用于数据处理的通用构建块,例如各种形式的用户指定的转换,连接,聚合,窗口,状态等(transformations, joins, aggregations …

read more

Flink用例

Apache Flink因其丰富的功能集而成为开发和运行多种不同类型应用程序的绝佳选择。Flink的功能包括支持流和批处理,复杂的状态管理,事件时间处理语义以及状态的精确一次一致性保证。此外,Flink可以部署在各种资源提供者(如YARN,Apache Mesos和Kubernetes)上,也可以作为裸机硬件上的独立群集。配置为高可用性,Flink没有单点故障。Flink已被证明可扩展到数千个核心和TB级的应用程序状态,提供高吞吐量和低延迟,并为世界上最苛刻的流处理应用程序提供支持。

下面,我们将探讨由Flink提供支持的最常见类型的应用程序,并指出实际示例。

事件驱动的应用程序

什么是事件驱动的应用程序?

事件驱动的应用程序是一个有状态的应用程序,它从一个或多个事件流中提取事件,并通过触发计算,状态更新或外部操作对传入事件做出反应。

事件驱动的应用程序是传统应用程序设计的演变。传统应用一般具有独立的计算和数据存储层,在此体系结构中,应用程序从远程事务数据库读取数据并将数据持久化。

相反,事件驱动的应用程序基于有状态流处理应用程序。在这种设计中,数据和计算是共同定位的,即本地(内存或磁盘)数据访问。通过定期将检查点写入远程持久存储来实现容错。下图描绘了传统应用程序体系结构和事件驱动应用程序之间的差异。

img

事件驱动的应用程序有哪些优点?

事件驱动的应用程序不是查询远程数据库,而是在本地访问其数据,从而在吞吐量和延迟方面产生更好的性能。远程持久存储的定期检查点可以异步和递增完成。因此,检查点对常规事件处理的影响非常小。但是 …

read more

Flink入门

一、架构

Apache Flink是一个分布式处理引擎和框架,用于对无界和有界数据流进行状态计算。Flink可在所有常见的集群环境中运行,可以内存级速度和任意规模执行计算。

接下来首先我们阐述Flink的架构。

处理无界和有界数据

任何类型的数据都是作为事件流产生的。信用卡交易,传感器测量,机器日志或网站或移动应用程序上的用户交互,所有这些数据都作为流生成。

数据可以作为无界有界流处理。

  1. 无界流有一个开始但没有明确定义的结束。它们不会终止,并且数据在生成时即提供。必须连续处理无界流,即必须在摄取事件后立即处理事件。无法等待所有输入数据到达,因为输入是无界的,并且在任何时间点都不会完成。处理无界数据通常要求以特定顺序摄取事件,例如事件发生的顺序,以便能够推断结果完整性。无界流的处理也称为流处理。
  2. 有界流具有明确定义的开始和结束。可以通过在执行任何计算之前先摄取所有数据的方式来处理有界流。处理有界流不需要有序摄取,因为可以始终对有界数据集进行排序。有界流的处理也称为批处理。

Apache Flink擅长处理无界和有界数据集。精确控制时间和状态使Flink的运行时能够在无界流上运行任何类型的应用程序。有界流由算法和数据结构内部处理,这些算法和数据结构专为固定大小的数据集而设计,从而产生出色的性能。

随处部署应用程序

Apache Flink是一个分布式系统,需要计算资源才能执行应用程序。Flink可与所有常见的集群资源管理器(Resource …

read more

OpenShift 详细教程 - 基础知识入门

简介

自由和开放源码的云计算平台使开发人员能够创建、测试和运行他们的应用程序,并且可以把它们部署到云中。

OpenShift是红帽的云开发平台即服务(PaaS)。是一个基于主流的容器技术Docker和K8s构建的开源容器云平台。底层以Docker作为容器引擎驱动,以K8s作为容器编排引擎组件,并提供了开发语言,中间件,DevOps自动化流程工具和web console用户界面等元素,提供了一套完整的基于容器的应用云平台。

Openshift提供比任何PaaS更多的灵活性,它支持用于Java、Python、PHP、Perl、node.js、go和Ruby的更多的开发框架,包括 Spring、Seam、Weld、CDI、Rails、Rack、Symfony、Zend Framework、Twisted、Django和Java E。数据库语言则支持MySQL、MongoDB和PostgreSQL。

另外它还提供了多种集成开发工具如Eclipse integration,JBoss Developer Studio和 Jenkins等。

OpenShift Online服务构建在Red Hat Enterprise Linux上。Red Hat …

read more

详解Java中的final关键字

final 简介1

final关键字可用于多个场景,且在不同场景具有不同的作用。首先,final是一个非访问修饰符适用于变量,方法或类。下面是使用final的不同场景:

java中的final关键字

上面这张图可以概括成:

  • final修饰变量时,被修饰的变量必须被初始化(赋值),且后续不能修改其值,实质上是常量;
  • final修饰方法时,被修饰的方法无法被所在类的子类重写(覆写);
  • final修饰时,被修饰的类不能被继承,并且final类中的所有成员方法都会被隐式地指定为final方法,但成员变量则不会变。

final 修饰变量

当使用final关键字声明类成员变量或局部变量后,其值不能被再次修改 …

read more

Put your desktop in the cloud using MEGASync

Demo

Here is a demo showing a "cloud" desktop:

MEGASync Desktop

If you don't like application icons and want to only have files and folders on desktop (as shown in the picture), but still want to be able to launch applications in a convenient way, you can remove all the icons, and …

read more

A Java TFTP Server

简介

一个完全多线程的tftp服务器。可以同时处理多个客户端。实现 RFC 1350 并包装块号以获得大文件支持。

通过判断监听到的请求tftpPacket_的类型是TFTPReadRequestPacket(读)或者TFTPWriteRequestPacket(写),将其对应交由handleRead()或者handleWrite()方法处理。

要启动,只需创建该类的实例。如果服务器由于正在使用的端口,端口被拒绝等原因而无法启动,则将抛出IOException。

要停止,请使用shutdown方法。

要检查服务器是否仍在运行(或者由于错误而停止),请调用isRunning方法。

默认情况下,事件不会记录到stdout/stderr。可以使用setLog和setLogError方法更改此设置。

示例用法如下:

 public static void main(String[] args) throws Exception
  {
      if (args.length != 1)
      {
          System.out
                  .println("You must provide 1 argument - the …
read more

Java代码优化35点总结

前言

代码优化,一个很重要的课题。可能有些人觉得没用,一些细小的地方有什么好修改的,改与不改对于代码的运行效率有什么影响呢?这个问题我是这么考虑的,就像大海里面的鲸鱼一样,它吃一条小虾米有用吗?没用,但是,吃的小虾米一多之后,鲸鱼就被喂饱了。代码优化也是一样,如果项目着眼于尽快无BUG上线,那么此时可以抓大放小,代码的细节可以不精打细磨;但是如果有足够的时间开发、维护代码,这时候就必须考虑每个可以优化的细节了,一个一个细小的优化点累积起来,对于代码的运行效率绝对是有提升的。

代码优化的目标是:

1、减小代码的体积

2、提高代码运行的效率

代码优化细节

1、尽量指定类、方法的final修饰符

带有final修饰符的类是不可派生的。在Java核心API中,有许多应用final的例子,例如java.lang.String,整个类都是final的。为类指定final修饰符可以让类不可以被继承,为方法指定final修饰符可以让方法不可以被重写。如果指定了一个类为final,则该类所有的方法都是final的。Java编译器会寻找机会内联所有的final方法,内联对于提升Java运行效率作用重大,具体参见Java运行期优化。此举能够使性能平均提高50%。

2、尽量重用对象

特别是String对象的使用,出现字符串连接时应该使用StringBuilder …

read more

人之一生

热爱生命

我不去想, 是否能够成功 , 既然选择了远方 , 便只顾风雨兼程。

我不去想, 能否赢得爱情 , 既然钟情于玫瑰 , 就勇敢地吐露真诚 。

我不去想, 身后会不会袭来寒风冷雨 , 既然目标是地平线, 留给世界的只能是背影 。

我不去想, 未来是平坦还是泥泞 , 只要热爱生命 , 一切,都在意料之中。


决心

人之一生,总会有许多困惑不已、纠缠不清的琐事,难免受其影响,绝不为其左右。

此时所需的就是断然的取舍与明智的抉择,唯一会限制我们的,是我们自己的决心。


延续

万物善变,人生泛滥的是那些冲动和急躁:即兴的热情、肤浅的思考、仓促的决定、敷衍的搪塞和最终的草草了事;

而珍贵的是生命中那些经久和坚持,一种信仰,一段情感,一个习惯。一句独白自视为约定,一段感情权当作余生。


动力

如果说不清追逐的动力源于何处,就至少要让优秀成为自己的习惯,要乐观阳光,要知道自己身在何处,路在何方。


初心

愿我们在心底埋下的勇气、乐观和向善的种子,最后都成长为自己一直所追寻的最喜欢的样子 …

read more

因为博客需要,发现了一个生成美化简约风格的标签云的JQuery插件。 官网地址:http://mistic100.github.io/jQCloud/index.html

使用方法很简单,可以把JS和CSS文件下载到本地,也可以直接通过Script标签src=“”的方法在线引用。

具体的使用方法官网都能查到。

贴出自己微博使用JQCloud的前端代码:

<script src="{{ SITEURL }}/theme/jqcloud.js"></script>
<link href="{{ SITEURL }}/theme/jqcloud.css" rel="stylesheet">
<script>
    var words = [];
    {% for tag, articles in tags|sort %}
        words.push({text: "{{tag}}", weight: Math.random(), link: '{{ SITEURL }}/{{ tag …
read more

使用Pelican在Github(国外)和Coding(国内)同步托管博客

介绍: Github Pages 禁用了百度爬虫,因此百度搜索引擎经常抓取不到在Github上托管的博客链接。本文介绍一种可行的解决方法:
- 注册Coding用来托管一份和Github上一样的博客仓库专门服务国内的索引
- 配置DNS解析,将国内的线路解析到Coding,国外的线路解析到Github
- 配置Pelican,支持一键将同一份本地博客仓库同时发布到Github和Coding ​


一、《Pelican+Github博客搭建详细教程》


按照标题链接给出的教程先搭建出一个基于Github托管的博客系统。接下来将说明如何将博客同步到Coding。


二、在Coding创建一个新的项目


  1. Coding首页进行注册并登陆,创建项目的方法与Github类似,不同之处在于coding新建的公开项目名和用户名相同,而不像Github那样是<用户名>.github.io。创建完成后,生成的新的项目链接应该类似于:https://coding.net/<usrname>/<username>.git

  2. 将本地SSH公钥拷贝到coding。操作同样与Github类似。由于本地已经为Github生成了一个公钥,这里只用cd进入~/.ssh文件夹查看一个名为id_rsa.pub文件的内容,类似于如下。我们只拷贝邮箱之前的所有内容到coding的公钥管理页面。
ssh-rsa AAAAfafjIJGOF …
read more

使用Pelican基于Github Pages搭建博客教程

操作系统:Mac OS / Linux
工具集:
1.Pelican——基于Python的静态网页生成器
2.马克飞象——Evernote出的Markdown文本编辑器
3.GoDaddy——域名供应商
4.DNSPod——提供免费域名解析注册服务
5.Github Pages——Github为每个注册用户提供300M的站点空间
6.Python——Pelican工具需要Python运行环境
7.Google Analytics——谷歌站点数据监测分析工具
8.Google Custom Search——谷歌自定义搜索引擎可用作站内搜索工具
9.Google Webmasters——谷歌站长工具
10.Disqus——用来提供博客评论功能
11.Sitemap——站点地图,供谷歌,百度等搜索引擎收录
12.七牛云存储——静态资源管理,上传自动生成网盘直链
最终效果展示 …

read more

Build and Install OpenDaylight on Ubuntu

Operating System:Linux x64 / Ubuntu 14.04
Prerequisites:Linux system with Java and Maven installed
Chinese version is also available at Ubuntu系统下OpenDaylight源码编译安装


STEP 1, Environment Tuning


1. Install Git tool by command line:

sudo apt-get install git-core

2. After the installation of Java and Maven, you need to edit a …

read more

Windows系统配置WiFi无线热点

Windows 版本: Windows 7/8/10
前提:电脑装配无线网卡
方法:通过Dos命令行创建WiFi热点,然后启用共享


1.首先确定无线网卡是否支持承载网络(Hosted Network)。在管理员模式的CMD窗口输入命令:

netsh wlan show drivers

在输出信息中找到 “支持承载网络:是” 则继续。


2.确定电脑是否已经配置承载网络。同样在CMD窗口分别输入命令:

netsh wlan show hostednetwork
netsh wlan show hostednetwork setting=security

如果看到第一条命令输出已经配置好的WiFi热点的SSID,第二条输出WiFi热点的密码,直接跳到第四步。


3.创建WiFi热点。命令行输入:

netsh wlan set hostednetwork mode=allow ssid …
read more

photo-zzz.png

Hao JiangJustin Time

We only live once, and time just goes by.

  • R&D Engineer @H3C
  • Hangzhou, China

  • Facebook
    微博
    Linkedin
    Github
    Email
    Instagram
    ResearchGate
    知乎
    OSChina