Java Timer定时器原理

  categories:资料  author:

做项目很多时候会用到定时任务,比如在深夜,流量较小的时候,做一些统计工作。早上定时发送邮件,更新数据库等。这里可以用Java的Timer或线程池实现。Timer可以实现,不过Timer存在一些问题。他起一个单线程,如果有异常产生,线程将退出,整个定时任务就失败。

下面是一个Timer实现的定时任务Demo,会向控制台每隔一秒输出Do work…
import java.util.Date;
import java.util.Timer;
import java.util.TimerTask;

/**
* Created by gxf on 2017/6/21.
*/
public class TestTimer {
public static void main(String[] args) {
Timer timer = new Timer();
Task task = new Task();
timer.schedule(task, new Date(), … 阅读全文

深入理解Apache Flink核心技术

  categories:资料  author:

Apache Flink(下简称Flink)项目是大数据处理领域最近冉冉升起的一颗新星,其不同于其他大数据项目的诸多特性吸引了越来越多人的关注。本文将深入分析Flink的一些关键技术与特性,希望能够帮助读者对Flink有更加深入的了解,对其他大数据系统开发者也能有所裨益。本文假设读者已对MapReduce、Spark及Storm等大数据处理框架有所了解,同时熟悉流处理与批处理的基本概念。

Flink简介

Flink核心是一个流式的数据流执行引擎,其针对数据流的分布式计算提供了数据分布、数据通信以及容错机制等功能。基于流执行引擎,Flink提供了诸多更高抽象层的API以便用户编写分布式任务:

DataSet API, 对静态数据进行批处理操作,将静态数据抽象成分布式的数据集,用户可以方便地使用Flink提供的各种操作符对分布式数据集进行处理,支持Java、Scala和Python。

DataStream API,对数据流进行流处理操作,将流式的数据抽象成分布式的数据流,用户可以方便地对分布式数据流进行各种操作,支持Java和Scala。

Table API,对结构化数据进行查询操作,将结构化数据抽象成关系表,并通过类SQL的DSL对关系表进行各种查询操作,支持Java和Scala。

此外,Flink还针对特定的应用领域提供了领域库,例如:

Flink ML,Flink的机器学习库,提供了机器学习Pipelines API并实现了多种机器学习算法。

Gelly,Flink的图计算库,提供了图计算的相关API及多种图计算算法实现。

Flink的技术栈如图1所示:

 

图1 Flink技术栈

此外,Flink也可以方便地和Hadoop生态圈中其他项目集成,例如Flink可以读取存储在HDFS或HBase中的静态数据,以Kafka作为流式的数据源,直接重用MapReduce或Storm代码,或是通过YARN申请集群资源等。

统一的批处理与流处理系统

在大数据处理领域,批处理任务与流处理任务一般被认为是两种不同的任务,一个大数据项目一般会被设计为只能处理其中一种任务,例如Apache Storm、Apache Smaza只支持流处理任务,而Aapche MapReduce、Apache Tez、Apache Spark只支持批处理任务。Spark Streaming是Apache Spark之上支持流处理任务的子系统,看似一个特例,实则不然——Spark Streaming采用了一种micro-batch的架构,即把输入的数据流切分成细粒度的batch,并为每一个batch数据提交一个批处理的Spark任务,所以Spark Streaming本质上还是基于Spark批处理系统对流式数据进行处理,和Apache Storm、Apache Smaza等完全流式的数据处理方式完全不同。通过其灵活的执行引擎,Flink能够同时支持批处理任务与流处理任务。

在执行引擎这一层,流处理系统与批处理系统最大不同在于节点间的数据传输方式。对于一个流处理系统,其节点间数据传输的标准模型是:当一条数据被处理完成后,序列化到缓存中,然后立刻通过网络传输到下一个节点,由下一个节点继续处理。而对于一个批处理系统,其节点间数据传输的标准模型是:当一条数据被处理完成后,序列化到缓存中,并不会立刻通过网络传输到下一个节点,当缓存写满,就持久化到本地硬盘上,当所有数据都被处理完成后,才开始将处理后的数据通过网络传输到下一个节点。这两种数据传输模式是两个极端,对应的是流处理系统对低延迟的要求和批处理系统对高吞吐量的要求。Flink的执行引擎采用了一种十分灵活的方式,同时支持了这两种数据传输模型。Flink以固定的缓存块为单位进行网络数据传输,用户可以通过缓存块超时值指定缓存块的传输时机。如果缓存块的超时值为0,则Flink的数据传输方式类似上文所提到流处理系统的标准模型,此时系统可以获得最低的处理延迟。如果缓存块的超时值为无限大,则Flink的数据传输方式类似上文所提到批处理系统的标准模型,此时系统可以获得最高的吞吐量。同时缓存块的超时值也可以设置为0到无限大之间的任意值。缓存块的超时阈值越小,则Flink流处理执行引擎的数据处理延迟越低,但吞吐量也会降低,反之亦然。通过调整缓存块的超时阈值,用户可根据需求灵活地权衡系统延迟和吞吐量。

 

图2 Flink执行引擎数据传输模式

在统一的流式执行引擎基础上,Flink同时支持了流计算和批处理,并对性能(延迟、吞吐量等)有所保障。相对于其他原生的流处理与批处理系统,并没有因为统一执行引擎而受到影响从而大幅度减轻了用户安装、部署、监控、维护等成本。

Flink流处理的容错机制

阅读全文

Flink 的Window 操作

  categories:资料  author:

Flink的 Window 操作

Window是无限数据流处理的核心,Window将一个无限的stream拆分成有限大小的”buckets”桶,我们可以在这些桶上做计算操作。本文主要聚焦于在Flink中如何进行窗口操作,以及程序员如何从window提供的功能中获得最大的收益。
窗口化的Flink程序的一般结构如下,第一个代码段中是分组的流,而第二段是非分组的流。正如我们所见,唯一的区别是分组的stream调用keyBy(…)window(…),而非分组的stream中window()换成了windowAll(…),这些也将贯穿都这一页的其他部分中。

Keyed Windows
stream.keyBy(...)          <-  keyed versus non-keyed windows
       .window(...)         <-  required: "assigner"
      [.trigger(...)]       <-  optional: "trigger" (else default trigger)
      [.evictor(...)]       <-  optional: "evictor" (else no 
阅读全文

用putty进行远程端口映射实现远程桌面连接家里内网计算机

  categories:资料  author:

需求, 现在家里有3台电脑, 需要远程管理一下, 但是由于家里电脑在家里的内网, 无法直接连接

本来是通过 teamviewer进行连接的, 但是由于今天忘记该teamviewer了, 因此无法连接

这样想到, 由于能通过putty软件用ssh协议连接到家里树莓派电脑, 因此希望通过树莓派进行端口转发然后远程连接家里电脑。

具体的命令如下:

putty.exe -P 5009  -L 9003:笔记本2内外ip地址:3389  pi@家里adsl的外围地址  -pw 密码

连接的示意图如下:

如上图:

然后, 启动windows的远程桌面连接

在计算机中输入:   127.0.0.1:9003

然后选择连接, 就可以远程连接到 家里的计算机了, 然后可以进行各项控制等操作了!

 … 阅读全文

实战 SSH 端口转发

  categories:资料  author:

第一部分 概述

当你在咖啡馆享受免费 WiFi 的时候,有没有想到可能有人正在窃取你的密码及隐私信息?当你发现实验室的防火墙阻止了你的网络应用端口,是不是有苦难言?来看看 SSH 的端口转发功能能给我们带来什么好处吧!

端口转发概述

让我们先来了解一下端口转发的概念吧。我们知道,SSH 会自动加密和解密所有 SSH 客户端与服务端之间的网络数据。但是,SSH 还同时提供了一个非常有用的功能,这就是端口转发。它能够将其他 TCP 端口的网络数据通过 SSH 链接来转发,并且自动提供了相应的加密及解密服务。这一过程有时也被叫做“隧道”(tunneling),这是因为 SSH 为其他 TCP 链接提供了一个安全的通道来进行传输而得名。例如,Telnet,SMTP,LDAP 这些 TCP 应用均能够从中得益,避免了用户名,密码以及隐私信息的明文传输。而与此同时,如果您工作环境中的防火墙限制了一些网络端口的使用,但是允许 SSH 的连接,那么也是能够通过将 TCP 端口转发来使用 SSH 进行通讯。总的来说 SSH 端口转发能够提供两大功能:

  1. 加密 SSH Client 端至 SSH Server 端之间的通讯数据。
  2. 突破防火墙的限制完成一些之前无法建立的
阅读全文

DNS 开源DNS之dnspod-sr介绍

  categories:资料  author:

dnspod-sr 是一个运行在 Linux 平台上的高性能的递归 DNS 服务器软件,强烈公司内网或者服务器内网使用dnspod-sr,具备高性能、高负载、易扩展的优势,非BIND、powerdns 等软件可以比拟。

项目地址:https://github.com/DNSPod/dnspod-sr

官网:dnspod-sr架构详解

特性
1.高性能,比所有流行的开源 DNS 软件性能高出2倍以上
2.安全,能抵御一般攻击
3.稳定,有效降低解析失败率
4.主动刷新缓存,响应速度更快
5.易于扩展,非常容易部署
6.防污染,能够正确解析被污染域名
性能
dnspod-sr依托于DNSPod多年运营和优化DNS服务的经验,针对国内复杂的网络情况,对递归DNS进行了一系列的优化,比较其他开源软件,性能得到大幅提升。
测试环境
千兆网卡,4核 CPU,4G 内存,Linux 64位系统。
性能测试
dnspod-sr: 15万 qps
BIND 9.9: 7万 qps
unbound 4.7: 8万 … 阅读全文

时间序列数据库

  categories:资料  author:

什么是时间序列数据?最简单的定义就是数据格式里包含timestamp字段的数据。比如股票市场的价格,环境中的温度,主机的CPU使用率等。但是又有什么数据是不包含timestamp的呢?几乎所有的数据都可以打上一个timestamp字段。时间序列数据更重要的一个属性是如何去查询它。在查询的时候,对于时间序列我们总是会带上一个时间范围去过滤数据。同时查询的结果里也总是会包含timestamp字段。

选择什么样的时间序列数据库

时间序列数据无处不在。而几乎任意数据库都可以存时间序列数据。但是不同的数据能支持的查询类型并不相同。按照能支持的查询类型,我们可以把时间序列数据库分为两类,第一类的数据库按照关系型数据库的说法,其表结构是这样的:

[metric_name] [timestamp] [value]

其优化的查询方式是:

SELECT value FROM metric WHERE metric_name=”A” AND timestamp >= B AND timestamp < C

也就说这类数据库是什么样子的数据存进去,就什么样子取出来。

image.png

在这种模式下,首先要知道你需要的图表是什么样子的。然后按照这个图表的数据,去把数据入库。查询的字段,就是数据库存储的字段。然后再按照数据库存储的字段,去从原始数据里采集上报。存储什么字段,就上报什么字段。这种模式很容易优化,可以做到非常快。但是这种模式有两个弊端。

  • 无法快速响应变化:如果需要的图表有变更,需要从上报的源头重新来一遍。而且要等新数据过来之后,才能查看这些新数据。
  • 存储膨胀:总有一些数据是需要从不同维度查询的要求。比如广告点击流数据,需要按省份聚合,按运营商聚合,按点击人的喜好聚合等。这些维度的交叉组合会产生非常巨大的组合数量,要预先把所有的维度组合都变成数据库里的表存储起来会很浪费空间。

这类时间序列数据库最多,使用也最广泛。一般人们谈论时间序列数据库的时候指代的就是这一类存储。按照底层技术不同可以划分为三类。
直接基于文件的简单存储:RRD Tool,Graphite Whisper。这类工具附属于监控告警工具,底层没有一个正规的数据库引擎。只是简单的有一个二进制的文件结构。
基于K/V数据库构建:opentsdb(基于hbase),blueflood,kairosDB(基于cassandra),influxdb,prometheus(基于leveldb)
基于关系型数据库构建:mysql,postgresql 都可以用来保存时间序列数据

另外一类数据库其表结构是:

[timestamp] [d1] [d2] .. [dn] [v1]
阅读全文

时间序列数据库概览

  categories:资料  author:

背景

目前对于时序大数据的存储和处理往往采用关系型数据库的方式进行处理,但由于关系型数据库天生的劣势导致其无法进行高效的存储和数据的查询。时序大数据解决方案通过使用特殊的存储方式,使得时序大数据可以高效存储和快速处理海量时序大数据,是解决海量数据处理的一项重要技术。该技术采用特殊数据存储方式,极大提高了时间相关数据的处理能力,相对于关系型数据库它的存储空间减半,查询速度极大的提高。时间序列函数优越的查询性能远超过关系型数据库,Informix TimeSeries非常适合在物联网分析应用。

定义

时间序列数据库主要用于指处理带时间标签(按照时间的顺序变化,即时间序列化)的数据,带时间标签的数据也称为时间序列数据。

最新时序数据库排名:

特点& 分类:

  • 专门优化用于处理时间序列数据
  1. 该类数据以时间排序
  2. 由于该类数据通常量级大(因此Sharding和Scale非常重要)或逻辑复杂(大量聚合,上取,下钻),关系数据库通常难以处理
  • 时间序列数据按特性分为两类
  1. 高频率低保留期(数据采集,实时展示)
  2. 低频率高保留期(数据展现、分析)
  • 按频度
  1. 规则间隔(数据采集)
  2. 不规则间隔(事件驱动)
  •  时间序列数据的几个前提
  1. 单条数据并不重要
  2. 数据几乎不被更新,或者删除(只有删除过期数据时),新增数据是按时间来说最近的数据
  3. 同样的数据出现多次,则认为是同一条数据

如图:

时间序列数据库关键比对

InfluxDB ElasticSearch
流行(TSDB排行第一) 流行(搜索引擎排行第一)
高可用需要收费 集群高可用容易实现,免费
单点写入性能高 单点写入性能低
查询语法简单,功能强 查询语法简单,功能强(弱于Influxdb)
后端时序数据库设计,写入快 设计并不是时序数据库,后端存储采用文档结构,写入慢

由此可见:高频度低保留期用Influxdb,低频度高保留期用ES。

其他时序数据库介绍:

如何使用

数据的查询与写入:

  • Influxdb与ES都是REST
阅读全文

Grafana+Prometheus打造全方位立体监控系统

  categories:资料  author:

摘要: 前言 本文主要介绍如何使用Grafana和Prometheus以及node_exporter对Linux服务器性能进行监控。下面两张图分别是两台服务器: 服务器一 服务器二 概述 Prometheus是一个开源的服务监控系统,它通过HTTP协议从远程的机器收集数据并存储在本地的时序数据库上。

前言

本文主要介绍如何使用Grafana和Prometheus以及node_exporter对Linux服务器性能进行监控。下面两张图分别是两台服务器:

服务器A

1

服务器B

2

概述

Prometheus是一个开源的服务监控系统,它通过HTTP协议从远程的机器收集数据并存储在本地的时序数据库上。

  • 多维数据模型(时序列数据由metric名和一组key/value组成)
  • 在多维度上灵活的查询语言(PromQl)
  • 不依赖分布式存储,单主节点工作.
  • 通过基于HTTP的pull方式采集时序数据
  • 可以通过push gateway进行时序列数据推送(pushing)
  • 可以通过服务发现或者静态配置去获取要采集的目标服务器
  • 多种可视化图表及仪表盘支持

Prometheus通过安装在远程机器上的exporter来收集监控数据,后面我们将使用到node_exporter收集系统数据。

架构

3

Grafana 是一个开箱即用的可视化工具,具有功能齐全的度量仪表盘和图形编辑器,有灵活丰富的图形化选项,可以混合多种风格,支持多个数据源特点。

4

架构

Diagram

安装

Exporter

下载并解压:

#下载
wget https://github.com/prometheus/node_exporter/releases/download/v0.14.0/node_exporter-
阅读全文

开源监控利器grafana

  categories:资料  author:

前言:

做运维的很重要的基础工作就是监控,之前都是统计数据入库,然后前端js图表插件出图,费时费力,可定制性差

前几天接触到了ELK(logstash, elasticsearch, kibana)这套日志收集展示工具集,的确很方便,但是手头没有那么大的存储啊

也不是所有的日志数据都需要,然后就发现了grafana + influxdb的解决方案

简介:

先给出这两个工具的官网

http://grafana.org/

http://influxdb.com/

建议各位看官先大体浏览下这两个工具的介绍和文档

grafana是前端展示界面,要放到apache或nginx下,不需要php环境奥

influxdb是一个时间序列的数据库,你插入的每条数据会自动附加上两个字段,一个时间,一个序列号(用来作为主键的)

ps: influxdb的0.8版本不支持centos 5,只能是centos6以上,所以centos5的还是用0.7的版本

安装:

influxdb就一个rpm包,没有其他依赖,是用go语言写的,go发展很迅猛啊

influxdb会监听4个端口

tcp        0      0 0.0.0.0:8099                0.0.0.0:*                   LISTEN      29458/influxdb
tcp        0      0 0.0.0.0:8083                0.0.0.0:*                   LISTEN      29458/influxdb
tcp        0      0 0.0.0.0:8086                0.0.0.0:*                  

阅读全文



快乐成长 每天进步一点点      京ICP备18032580号-1