《从0到1学习Flink》—— Flink 写入数据到 Kafka (www.54tianzhisheng.cn)
之前文章 《从0到1学习Flink》—— Flink 写入数据到 ElasticSearch 写了如何将 Kafka 中的数据存储到 ElasticSearch 中,里面其实就已经用到了 Flink 自带的 Kafka source connector(FlinkKafkaConsumer)。存入到 ES 只是其中一种情况,那么如果我们有多个地方需要这份通过 Flink 转换后的数据,是不是又要我们继续写个 sink 的插件呢?确实,所以 Flink 里面就默认支持了不少 sink,比如也支持 Kafka sink connector(FlinkKafkaProducer),那么这篇文章我们就讲讲如何将数据写入到 Kafka
by @zhisheng_blog 2019-01-11 00:11 查看详情
《从0到1学习Flink》—— Flink 项目如何运行? (www.54tianzhisheng.cn)
之前写了不少 Flink 文章了,也有不少 demo,但是文章写的时候都是在本地直接运行 Main 类的 main 方法,其实 Flink 是支持在 UI 上上传 Flink Job 的 jar 包,然后运行得。最开始在第一篇 《从0到1学习Flink》—— Mac 上搭建 Flink 1.6.0 环境并构建运行简单程序入门 中其实提到过了 Flink 自带的 UI 界面,今天我们就来看看如何将我们的项目打包在这里发布运行。

准备
编译打包
项目代码就拿我之前的文
by @zhisheng_blog 2019-01-11 00:10 查看详情
《从0到1学习Flink》—— Flink 写入数据到 ElasticSearch (www.54tianzhisheng.cn)
前言
前面 FLink 的文章中我们已经介绍了说 Flink 已经有很多自带的 Connector。

1、《从0到1学习Flink》—— Data Source 介绍

2、《从0到1学习Flink》—— Data Sink 介绍

其中包括了 Source 和 Sink 的,后面我也讲了下如何自定义自己的 Source 和 Sink。

那么今天要做的事情是啥呢?就是介绍一下 Flink 自带的 ElasticSearch Connector,我们今天就用他来做 Sink,将 Kafka 中的数据经过 Flink 处理后然后存储到 ElasticSearch。

准备
安装 ElasticSearch,这里就忽略,自己找我以前的文章,建议安装 ElasticSearch 6.0 版本以上的,毕竟要跟上时代的节奏。

下面就讲解一下生产环境中如何使用 Elasticsearch Sink 以及一些注意点,及其内部实现机制。
by @zhisheng_blog 2019-01-11 00:10 查看详情
《从0到1学习Flink》—— Flink 中几种 Time 详解 (www.54tianzhisheng.cn)
前言
Flink 在流程序中支持不同的 Time 概念,就比如有 Processing Time、Event Time 和 Ingestion Time。

下面我们一起来看看这几个 Time:

Processing Time
Processing Time 是指事件被处理时机器的系统时间。

当流程序在 Processing Time 上运行时,所有基于时间的操作(如时间窗口)将使用当时机器的系统时间。每小时 Processing Time 窗口将包括在系统时钟指示整个小时之间到达特定操作的所有事件。

例如,如果应用程序在上午 9:15 开始运行,则第一个每小时 Processing Time 窗口将包括在上午 9:15 到上午 10:00 之间处理的事件,下一个窗口将包括在上午 10:00 到 11:00 之间处理的事件。

Processing Time 是最简单的 “Time” 概念,不需要流和机器之间的协调,它提供了最好的性能和最低的延迟。但是,在分布式和异步的环境下,Processing Time 不能提供确定性,因为它容易受到事件到达系统的速度(例如从消息队列)、事件在系统内操作流动的速度以及中断的影响。
by @zhisheng_blog 2019-01-11 00:08 查看详情
《从0到1学习Flink》—— 介绍Flink中的Stream Windows (www.54tianzhisheng.cn)
目前有许多数据分析的场景从批处理到流处理的演变, 虽然可以将批处理作为流处理的特殊情况来处理,但是分析无穷集的流数据通常需要思维方式的转变并且具有其自己的术语(例如,“windowing(窗口化)”、“at-least-once(至少一次)”、“exactly-once(只有一次)” )。

对于刚刚接触流处理的人来说,这种转变和新术语可能会非常混乱。 Apache Flink 是一个为生产环境而生的流处理器,具有易于使用的 API,可以用于定义高级流分析程序。

Flink 的 API 在数据流上具有非常灵活的窗口定义,使其在其他开源流处理框架中脱颖而出。

在这篇文章中,我们将讨论用于流处理的窗口的概念,介绍 Flink 的内置窗口,并解释它对自定义窗口语义的支持
by @zhisheng_blog 2019-01-10 23:55 查看详情
《从0到1学习Flink》—— Flink Data transformation(转换) (www.54tianzhisheng.cn)
Flink 应用程序结构就是如上图所示:

1、Source: 数据源,Flink 在流处理和批处理上的 source 大概有 4 类:基于本地集合的 source、基于文件的 source、基于网络套接字的 source、自定义的 source。自定义的 source 常见的有 Apache kafka、Amazon Kinesis Streams、RabbitMQ、Twitter Streaming API、Apache NiFi 等,当然你也可以定义自己的 source。

2、Transformation:数据转换的各种操作,有 Map / FlatMap / Filter / KeyBy / Reduce / Fold / Aggregations / Window / WindowAll / Union / Window join / Split / Select / Project 等,操作很多,可以将数据转换计算成你想要的数据。
by @zhisheng_blog 2019-01-10 23:54 查看详情
《从0到1学习Flink》—— 如何自定义 Data Sink ? (www.54tianzhisheng.cn)
前篇文章 《从0到1学习Flink》—— Data Sink 介绍 介绍了 Flink Data Sink,也介绍了 Flink 自带的 Sink,那么如何自定义自己的 Sink 呢?这篇文章将写一个 demo 教大家将从 Kafka Source 的数据 Sink 到 MySQL 中去。

准备工作
我们先来看下 Flink 从 Kafka topic 中获取数据的 demo,首先你需要安装好了 FLink 和 Kafka 。

运行启动 Flink、Zookepeer、Kafka,
by @zhisheng_blog 2019-01-10 23:53 查看详情
Elasticsearch 最佳性能优化 (mp.weixin.qq.com)
在 CRUD 章节,我们已经知道 ES 的数据写入是如何操作的了。喜欢自己动手的读者可能已经迫不及待的自己写了程序开始往 ES 里写数据做测试。这时候大家会发现:程序的运行速度非常一般,即使 ES 服务运行在本机,一秒钟大概也就能写入几百条数据。

这种速度显然不是 ES 的极限。事实上,每条数据经过一次完整的 HTTP POST 请求和 ES indexing 是一种极大的性能浪费,为此,ES 设计了批量提交方式。在数据读取方面,叫 mget 接口,在数据变更方面,叫 bulk 接口。mget 一般常用于搜索时 ES 节点之间批量获取中间结果集,对于 Elastic Stack 用户,更常见到的是 bulk 接口。
by @zhisheng_blog 2019-01-06 22:11 查看详情
ElasticSearch 官方调优指南翻译 (mp.weixin.qq.com)
ES 发布时带有的默认值,可为 ES 的开箱即用带来很好的体验。全文搜索、高亮、聚合、索引文档 等功能无需用户修改即可使用,当你更清楚的知道你想如何使用 ES 后,你可以作很多的优化以提高你的用例的性能,下面的内容告诉你 你应该/不应该 修改哪些配置。
by @zhisheng_blog 2019-01-06 22:10 查看详情
被虐的有点惨的有赞Java面试解析 (mp.weixin.qq.com)
说在前面的话:
本文适合人群:急等着换工作的人
我承认刷面试题很有用的,纵观几年来的JAVA面试题,你会发现每家都差不多。比如,你仔细观察,你会发现,HashMap的出现几率未免也太高了吧!连考察的知识点都一样,什么hash碰撞啊,并发问题啊!再比如JVM,无外乎考内存结构,GC算法等!因此,如果是为了面试,完全是有套路可以准备的!记住,基础再好,也架不住面试官天马行空的问,所以刷面试题还是很有必要的!
by @zhisheng_blog 2018-12-27 22:03 查看详情
JAVA面试解析(有赞一面) (mp.weixin.qq.com)
我的有赞面经,说在前面的话:
本文适合人群:急等着换工作的人
我承认刷面试题很有用的,纵观几年来的JAVA面试题,你会发现每家都差不多。
by @zhisheng_blog 2018-12-24 12:39 查看详情
Java几种常用JSON库性能大比拼 (mp.weixin.qq.com)
上一篇介绍了Java性能测试框架JMH的使用方法,本篇通过JMH来测试一下Java中几种常见的JSON解析库的性能。 每次都在网上看到别人说什么某某库性能是如何如何的好,碾压其他的库。但是百闻不如一见,只有自己亲手测试过的才是最值得相信的。

JSON不管是在Web开发还是服务器开发中是相当常见的数据传输格式,一般情况我们对于JSON解析构造的性能并不需要过于关心,除非是在性能要求比较高的系统。

目前对于Java开源的JSON类库有很多种,下面我们取4个常用的JSON库进行性能测试对比, 同时根据测试结果分析如果根据实际应用场景选择最合适的JSON库。
这4个JSON类库分别为:Gson,FastJson,Jackson,Json-lib。
by @zhisheng_blog 2018-12-23 14:38 查看详情
Java微基准测试框架JMH (mp.weixin.qq.com)
JMH,即Java Microbenchmark Harness,这是专门用于进行代码的微基准测试的一套工具API。

JMH 由 OpenJDK/Oracle 里面那群开发了 Java 编译器的大牛们所开发 。何谓 Micro Benchmark 呢? 简单地说就是在 method 层面上的 benchmark,精度可以精确到微秒级。
by @zhisheng_blog 2018-12-22 15:37 查看详情
深入理解iostat (mp.weixin.qq.com)
iostat算是比较重要的查看块设备运行状态的工具,相信大多数使用Linux的同学都用过这个工具,或者听说过这个工具。但是对于这个工具,引起的误解也是最多的,大多数人对这个工具处于朦朦胧胧的状态。现在我们由浅到深地介绍这个工具,它输出的含义什么,介绍它的能力边界,介绍关于这个工具的常见误解。
by @zhisheng_blog 2018-12-13 21:33 查看详情
《从0到1学习Flink》—— 如何自定义 Data Source ? (www.54tianzhisheng.cn)
前言
在 《从0到1学习Flink》—— Data Source 介绍 文章中,我给大家介绍了 Flink Data Source 以及简短的介绍了一下自定义 Data Source,这篇文章更详细的介绍下,并写一个 demo 出来让大家理解。
by @zhisheng_blog 2018-11-13 22:21 查看详情
《从0到1学习Flink》—— Data Sink 介绍 (www.54tianzhisheng.cn)
前言
再上一篇文章中 《从0到1学习Flink》—— Data Source 介绍 讲解了 Flink Data Source ,那么这里就来讲讲 Flink Data Sink 吧。

首先 Sink 的意思是:
by @zhisheng_blog 2018-11-13 22:20 查看详情
《从0到1学习Flink》—— Data Source 介绍 (www.54tianzhisheng.cn)
Data Sources 是什么呢?就字面意思其实就可以知道:数据来源。

Flink 做为一款流式计算框架,它可用来做批处理,即处理静态的数据集、历史的数据集;也可以用来做流处理,即实时的处理些实时数据流,实时的产生数据流结果,只要数据源源不断的过来,Flink 就能够一直计算下去,这个 Data Sources 就是数据的来源地。
by @zhisheng_blog 2018-11-12 23:35 查看详情
《从0到1学习Flink》—— Flink 配置文件详解 (www.54tianzhisheng.cn)
前面文章我们已经知道 Flink 是什么东西了,安装好 Flink 后,我们再来看下安装路径下的配置文件吧。
by @zhisheng_blog 2018-11-12 23:34 查看详情
《从0到1学习Flink》—— Mac 上搭建 Flink 1.6.0 环境并构建运行简单程序入门 (www.54tianzhisheng.cn)
准备工作
1、安装查看 Java 的版本号,推荐使用 Java 8。

安装 Flink
2、在 Mac OS X 上安装 Flink 是非常方便的。推荐通过 homebrew 来安装
by @zhisheng_blog 2018-11-07 22:43 查看详情
《从0到1学习Flink》—— Apache Flink 介绍 (www.54tianzhisheng.cn)
Flink 是一种流式计算框架,为什么我会接触到 Flink 呢?因为我目前在负责的是监控平台的告警部分,负责采集到的监控数据会直接往 kafka 里塞,然后告警这边需要从 kafka topic 里面实时读取到监控数据,并将读取到的监控数据做一些 聚合/转换/计算 等操作,然后将计算后的结果与告警规则的阈值进行比较,然后做出相应的告警措施(钉钉群、邮件、短信、电话等)。
by @zhisheng_blog 2018-11-07 22:42 查看详情