深入理解大数据之——事务及其ACID特性

事务简介

事物的定义

事务(Transaction)是由一系列对系统中数据进行访问或更新的操作所组成的一个程序执行逻辑单元(Unit)。在计算机术语中,事务通常就是指数据库事务 。

57355-20190323094924183-1338282146.png

在数据库管理系统(DBMS)中,事务是数据库恢复和并发控制的基本单位。它是一个操作序列,这些操作要么都执行,要么都不执行,它是一个不可分割的工作单位。

例如,银行转帐工作:从源帐号扣款并使目标帐号增款,这两个操作必须要么全部执行,要么都不执行,否则就会出现该笔金额平白消失或出现的情况。所以,应该把他们看成一个事务。

在现代数据库中,事务还可以实现其他一些事情,例如,确保你不能访问别人写了一半的数据;但是基本思想是相同的——事务是用来确保无论发生什么情况,你使用的数据都将处于一个合理的状态

transactions are there to ensure, that no matter what happens, the data you work with will be in …

read more

Flink 词汇表

Flink应用程序集群是指仅执行一个Flink作业专用的Flink集群。该Flink集群的生命周期与对应Flink作业的生命周期相同。在工作模式下,以前的Flink应用程序集群也称为Flink集群。点击查看与Flink Session Cluster的比较。

一种分布式系统,通常由一个Flink Master和一个或多个 Flink TaskManager进程组成。

事件

事件是有关由应用程序建模的域的状态更改的声明。事件可以是流或批处理应用程序的输入和/或输出。事件是特殊类型的记录

执行图

物理图

函数

函数由用户实现,并封装Flink程序的应用程序逻辑。大多数函数由相应的算子包装 。

实例

术语实例用于描述在运行期间特定类型的特定实例(通常是 算子函数)。由于Apache Flink主要是用Java编写的 …

read more

大陆访问Vultr各节点VPS网速测试综合报告

限时福利

Vultr新用户赠送$50活动入口

vultr-promotion

测试方法

采用以下方法:

  • 本地Ping测试
  • 腾讯云主机Ping测试
  • 本地下载测试
  • 腾讯云主机下载测试
  • 站长工具综合测试

节点列表

Location Looking Glass Download Test File: IPv4
Frankfurt, DE fra-de-ping.vultr.com 100MB 1GB
Amsterdam, NL ams-nl-ping.vultr.com 100MB 1GB
Paris, France par-fr-ping.vultr.com 100MB 1GB
London, UK lon-gb-ping.vultr.com 100MB 1GB
Singapore sgp-ping.vultr.com …
read more

Flink DataStream API教程

在本文中,我们将从头开始,介绍从设置Flink项目到在Flink集群上运行流分析程序。

Wikipedia提供了一个IRC频道,其中记录了对Wiki的所有编辑。我们将在Flink中读取此通道,并计算每个用户在给定时间窗口内编辑的字节数。这很容易使用Flink在几分钟内实现,但它将为您提供一个良好的基础,从而开始自己构建更复杂的分析程序。

设置Maven项目

我们将使用Flink Maven Archetype来创建我们的项目结构。有关此内容的更多详细信息,请参阅Java API快速入门。出于我们的目的,运行命令是这样的:

$ mvn archetype:generate \
    -DarchetypeGroupId=org.apache.flink \
    -DarchetypeArtifactId=flink-quickstart-java \
    -DarchetypeVersion=1.8.0 \
    -DgroupId=wiki-edits \
    -DartifactId=wiki-edits \
    -Dversion=0.1 \
    -Dpackage=wikiedits \
    -DinteractiveMode=false

您可以编辑groupIdartifactIdpackage如果你喜欢 …

read more

深入理解大数据之——Lambda架构

传统系统的问题

“我们正在从IT时代走向DT时代(数据时代)。IT和DT之间,不仅仅是技术的变革,更是思想意识的变革,IT主要是为自我服务,用来更好地自我控制和管理,DT则是激活生产力,让别人活得比你好”

——阿里巴巴董事局主席马云。

数据量从M的级别到G的级别到现在T的级、P的级别。数据量的变化数据管理系统(DBMS)和数仓系统(DW)也在悄然的变化着。 传统应用的数据系统架构设计时,应用直接访问数据库系统。当用户访问量增加时,数据库无法支撑日益增长的用户请求的负载时,从而导致数据库服务器无法及时响应用户请求,出现超时的错误。出现这种情况以后,在系统架构上就采用下图的架构,在数据库和应用中间过一层缓冲隔离,缓解数据库的读写压力。

然而,当用户访问量持续增加时,就需要考虑读写分离技术(Master-Slave)架构则如下图,分库分表技术。现在,架构变得越来越复杂了,增加队列、分区、复制等处理逻辑。应用程序需要了解数据库的schema,才能访问到正确的数据。

商业现实已经发生了变化,所以现在更快做出的决定更有价值。除此之外,技术也在不断发展。Kafka,Storm,Trident,Samza …

read more

Flink 分布式运行时环境

Tasks and Operator Chains

对于分布式执行,Flink将多个算子子任务链串联成任务。每个任务由一个线程执行。将算子链接到任务是一项有用的优化:它可以减少线程到线程切换和缓冲的开销,并在降低延迟的同时提高整体吞吐量。可以配置链接行为; 有关详细信息,请参阅链接文档

下图中的示例数据流由五个子任务执行,因此具有五个并行线程。

算子链接到任务

Job Managers, Task Managers, Clients

Flink运行时包含两种类型的进程:

  • JobManagers(也称为masters)协调分布式执行。他们安排任务,协调检查点,协调故障恢复等。

Job Manager总是至少有一个。高可用性设置将具有多个JobManagers,其中一个始终是领导者,其他处于待机状态

  • TaskManagers(也叫workers)执行dataflow的任务(或者更具体地说应该是子任务),以及缓冲和交换data streams

必须始终至少有一个TaskManager。

JobManagers和TaskManagers可以通过多种方式启动:作为独立集群直接在计算机上,在容器中 …

read more

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

简介

方法其实很简单,而且很多人可能已经想到或者在用了。一言以蔽之,就是把桌面文件夹设置为网盘的同步文件夹。之所以要这么做,因为很多人习惯使用一些程序搜索工具来启动程序(比如wox, everything, 甚至系统自带的搜索功能等等),不在系统桌面保留桌面图标,而且通常为了平时工作方便,会直接把桌面当做文档库或者workshop来用,也就是把平时常用的一些文档直接保存在桌面。这个时候如果直接用网盘把桌面设置为同步文件夹,就可以直接实时备份桌面上的文件了。而许多人可能平时会用到诸多不同设备(比如工作场所的电脑,私人电脑,手机,ipad等等),这种方法就可以实现多个电脑之间桌面的实时文件共享,同时其他移动端设备也能实时进行同步了。平时工作或者收藏的文件或者个人材料,在外临时要用的时候随时随处都可以拿到,而不用刻意事先进行上传或者分享。

效果

以下是大致效果:

MEGASync Desktop

工具

程序启动

如果您不喜欢应用程序图标,并且只希望在桌面上放置文件和文件夹(如图所示),但仍然希望能够以一种方便的方式启动应用程序,则可以删除所有图标,然后安装 WOX,用于快速访问应用程序。

网盘同步

这里的网盘可以使用MEGASync或者坚果云,可以在多个设备之间同步桌面,并可以通过网页或者客户端随时随地访问文档。MEGASync提供以下功能:

  • 具有50GB免费存储空间的安全云网络磁盘
  • 通过端到端加密进行快速传输
  • 多个设备之间的文件夹同步

如我们所见,MEGASync的一个非常有用的功能是在多个设备之间同步文件夹。 但是 …

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

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