Streams

怎么在java中创建一个自定义的collector

本秂侑毒 提交于 2020-04-27 17:35:01
文章目录 简介 Collector介绍 自定义Collector 总结 怎么在java中创建一个自定义的collector 简介 在之前的java collectors文章里面,我们讲到了stream的collect方法可以调用Collectors里面的toList()或者toMap()方法,将结果转换为特定的集合类。 今天我们介绍一下怎么自定义一个Collector。 Collector介绍 我们先看一下Collector的定义: Collector接口需要实现supplier(),accumulator(),combiner(),finisher(),characteristics()这5个接口。 同时Collector也提供了两个静态of方法来方便我们创建一个Collector实例。 我们可以看到两个方法的参数跟Collector接口需要实现的接口是一一对应的。 下面分别解释一下这几个参数: supplier Supplier是一个函数,用来创建一个新的可变的集合。换句话说Supplier用来创建一个初始的集合。accumulator accumulator accumulator定义了累加器,用来将原始添加到集合中。 combiner combiner用来将两个集合合并成一个。 finisher finisher将集合转换为最终的集合类型。 characteristics

windows下flink示例程序的执行

不羁的心 提交于 2020-04-24 20:18:12
1.什么是flink Apache Flink® - Stateful Computations over Data Streams 2.启动 下载地址 我下载了1.7.2 版本 解压到本地文件目录下 进入bin路径 D:\software\flink-1.7.2\bin 打开cmd 运行start-cluster.bat脚本 此时显示: D:\software\flink-1.7.2\bin>start-cluster.bat Starting a local cluster with one JobManager process and one TaskManager process. You can terminate the processes via CTRL-C in the spawned shell windows. Web interface by default on http://localhost:8081/. 打开浏览器,输入http://localhost:8081/ 启动成功 3.执行示例程序 3.1.从D:\software\flink-1.7.2\examples upload一个Job到flink上,如下图 3.2.选中,提交job 3.3.执行job,查看job的执行 3.4.执行结果查看 其他程序流程一样 来源: oschina 链接:

Spring Boot WebFlux 快速入门实践

天大地大妈咪最大 提交于 2020-04-23 15:33:35
Spring Boot 2.0 spring.io 官网有句醒目的话是: BUILD ANYTHING WITH SPRING BOOT 复制代码 Spring Boot (Boot 顾名思义,是引导的意思)框架是用于简化 Spring 应用从搭建到开发的过程。应用开箱即用,只要通过一个指令,包括命令行 java -jar 、 SpringApplication 应用启动类 、 Spring Boot Maven 插件等,就可以启动应用了。另外,Spring Boot 强调只需要很少的配置文件,所以在开发生产级 Spring 应用中,让开发变得更加高效和简易。目前,Spring Boot 版本是 2.x 版本。Spring Boot 包括 WebFlux。 Spring Boot 2.0 WebFlux 了解 WebFlux ,首先了解下什么是 Reactive Streams。Reactive Streams 是 JVM 中面向流的库标准和规范: 处理可能无限数量的元素 按顺序处理 组件之间异步传递 强制性非阻塞背压(Backpressure) Backpressure(背压) 背压是一种常用策略,使得发布者拥有无限制的缓冲区存储元素,用于确保发布者发布元素太快时,不会去压制订阅者。 Reactive Streams(响应式流) 一般由以下组成: 发布者:发布元素到订阅者 订阅者

将JSON字符串反序列化为指定的.NET对象类型

倾然丶 夕夏残阳落幕 提交于 2020-04-22 03:51:13
前言:   关于将JSON字符串反序列化为指定的.NET对象类型数据常见的场景主要是关于网络请求接口,获取到请求成功的响应数据。本篇主要讲的的是如何通过使用Newtonsoft.Json中的JsonConvert.DeserializeObject<T>(string value)方法将对应的JSON字符串转化为指定的.NET对象类型数据。 方法一、在项目中定义对应的对象参数模型,用于映射反序列化出来的参数(复杂JSON字符串数据推荐使用): 如下是一组.NET后台请求接口成功获取到的复杂的JSON字符串数据: { " id " : " 123456 " , " result " : { " data " : { " liveToken " : " zxcvbnm " , " liveStatus " : 1 , " liveType " : 1 , " deviceId " : " 1234567890 " , " channelId " : " 0 " , " coverUpdate " : 30 , " streams " : [{ " hls " : " zxcv.safd " , " coverUrl " : " http://asdaf " , " streamId " : 0 }], " job " : [{ " status " : true , " period

Java List的SubList使用问题

☆樱花仙子☆ 提交于 2020-04-20 12:29:51
一、Sublist导致OOM 代码 @Slf4j public class SubListDemo { public static void subListOOM() { List <List<Integer>> data = new ArrayList<> (); for ( int i = 0; i < 1000; i++ ) { List <Integer> rawList = IntStream.rangeClosed(1, 100000).boxed().collect(Collectors.toList()); // 构建一个100000个元素的list data.add(rawList.subList(0, 1 )); } log.info( "data.size(): " + data.size()); } } OOM Exception in thread "File Watcher" java.lang.OutOfMemoryError: GC overhead limit exceeded at java.io.File.listFiles(File.java: 1212 ) at org.springframework.boot.devtools.filewatch.FolderSnapshot.collectFiles(FolderSnapshot

Apache Kafka 2.5.0 稳定版正式发布

倾然丶 夕夏残阳落幕 提交于 2020-04-20 09:47:55
阿里云智能数据库事业部 OLAP 平台团队现向 2021 届海内外院校应届毕业生(毕业时间在2020年11月-2021年10月之间)招聘大数据系统工程师,有机会转正,有意请加 iteblog 微信内推。 Apache Kafka 2.5.0 稳定版于美国当地时间2020年4月15日正式发布,这个版本包含了一系列的重要功能发布,比较重要的可以特性重要包括: 支持 TLS 1.3 (目前默认是用 1.2) Kafka Streams DSL 中支持 Co-groups; Kafka Consumer 支持增量再平衡(Incremental rebalance) 为更好地洞察算子运行,引入了新的指标; Apache Zookeeper 升级到 3.5.7 不再支持 Scala 2.11 KIP-500 有了新的进展。 如果想及时了解Spark、Hadoop或者HBase相关的文章,欢迎关注微信公众号: iteblog_hadoop 如果需要下载最新版的 Apache Kafka 2.5.0,可以到 这里 下载。由于时间和篇幅的关系,下面文章列出本次比较重要的特性和进展。 文章目录 1 Kafka broker, producer, 和 consumer 的更新 1.1 KIP-500 有了新的进展 2 仅且一次语义(Exactly once semantics)改进 2.1 KIP

监控视频采集与Web直播开发全流程分析

偶尔善良 提交于 2020-04-18 04:41:14
内容概要: 摄像头 => FFmpeg => Nginx服务器 => 浏览器 从摄像头拉取rtsp流 转码成rtmp流向推流服务器写入 利用html5播放 1.开发流程 1.1 通过FFmpeg视频采集和转码   在音视频处理领域,FFmpeg基本是一种通用的解决方案。虽然作为测试我们也可以借助OBS等其他工具,但是为了更接近项目实战我们采用前者。这里不会专门介绍如何使用FFmpeg,只提供演示代码。不熟悉FFmpeg的同学可以跳过这个部分直接使用工具推流,网上的资料很多请自行查阅。 // 注册解码器和初始化网络模块 av_register_all(); avformat_network_init(); char errorbuf[ 1024 ] = { 0 }; // 异常信息 int errorcode = 0 ; // 异常代码 AVFormatContext *ic = NULL; // 输入封装上下文 AVFormatContext *oc = NULL; // 输出封装上下文 char *inUrl = " rtsp://admin:SYhr_5000@192.168.8.107:554/H264 " ; // rtsp输入URL char *outUrl = " rtmp://192.168.1.118/rtmp_live/1 " ; // rtmp输出URL

Kafka学习(二)-------- 什么是Kafka

℡╲_俬逩灬. 提交于 2020-04-18 04:08:31
通过Kafka的快速入门 https://www.cnblogs.com/tree1123/p/11150927.html 能了解到Kafka的基本部署,使用,但他和其他的消息中间件有什么不同呢? Kafka的基本原理,术语,版本等等都是怎么样的?到底什么是Kafka呢? 一、Kafka简介 http://kafka.apache.org/intro 2011年,LinkIn开源, November 1, 2017 1.0版本发布 July 30, 2018 2.0版本发布 参考官网的图: Kafka®用于构建实时数据管道和流式应用程序。它具有水平可扩展性、容错性、速度极快,并在数千家公司投入生产。 kafka官网最新的定义:Apache Kafka® is a distributed streaming platform 也就是分布式流式平台。 介绍: 三个特点: Publish and subscribe to streams of records, similar to a message queue or enterprise messaging system. Store streams of records in a fault-tolerant durable way. Process streams of records as they occur. 消息 持久化

【翻译】Spring 5 WebFlux入门

杀马特。学长 韩版系。学妹 提交于 2020-04-17 10:16:29
【推荐阅读】微服务还能火多久?>>> 原文链接: Guide to Spring 5 WebFlux | Baeldung 1. 概览 Spring WebFlux 框架是 Spring 5的一部分,他为 web 应用提供了响应式编程的支持。 在本文中,我们将使用响应式注解*RestController*和*WebClient*创建一个小的 REST 应用, 我们还将研究如何使用Spring Security保护我们的响应式端点。 2. Spring WebFlux 框架 ** Spring WebFlux内部使用Project Reactor及其发布者实现 - Flux和Mono。** 这个新框架支持下面两种编程模型: - 基于注释的响应式组件 - 函数级别的路由和处理 在这里,我们将重点关注基于注释的响应式组件,正如我们已经研究过的[functional style – routing and handling]( Introduction to the Functional Web Framework in Spring 5 | Baeldung ). 3. 依赖 让我们从spring-boot-starter-webflux依赖开始,它包含了所有其他必需的依赖: 用于基本Spring Boot应用程序设置的spring-boot和spring-boot-starter

Kafka 基础知识

萝らか妹 提交于 2020-04-15 16:33:51
【推荐阅读】微服务还能火多久?>>> 1. kafka如何做到高吞吐量的? 采用批处理 。如果一条一条的发消息,假如每条消息需要2毫秒,那么吞吐量不超过1000/2=500条/秒。如果采用批处理,假如此刻累积了100条消息,批处理需要等待一段时间比如8毫秒,加上发送一次的延时是2毫秒,那么一次批处理的时间是10毫秒。平均一条消息的耗时为10/100=0.1毫秒,那么此时的吞吐量为1000/0.1=10000条/秒。性能提升了近20倍。 2. 在kafka内部,是如何支撑起高吞吐/低延时的呢? 每次写入操作,都是先把数据写到操作系统的页缓存上(页缓存是在内存中分配的),然后由操作系统自行决定什么时候把页缓存上的数据写入到磁盘上。 Kafka 不必直接与底层的文件系统打交道。所有烦琐的 I/O 操作都交由操作系统来处理 Kafka 写入操作采用追加写入( append )的方式,避免了磁盘随机写操作。(磁盘的随机读写确实很慢,但是顺序读写却很快) 使用以 sendfile 为代表的零拷贝技术加强网络间的数据传输效率。 3. Topic、分区、副本、消费组、offset Topic: 发送到Kafka的每一条消息都有一个类别,用主题(Topic)来表示。通常,不同应用产生不同类型的数据,可以设置成不同的Topic。 分区: 每个Topic对应若干个分区,对于每个Topic