Streams

说一说亚马逊云服务(AWS)中国区域新上线的Amazon MSK

大憨熊 提交于 2020-04-30 17:13:44
2020年4月15日,Amazon MSK在由光环新网运营的AWS 中国(北京)区域和由西云数据运营的 AWS 中国(宁夏)区域正式上线。这款新服务是做什么用的?本文为您解读。 Amazon MSK,全称Amazon Managed Streaming for Apache Kafka,是一种完全托管服务。借助Amazon MSK,可以让应用开发人员快速使用原生 Apache Kafka API 构建应用来处理流式数据,而不必管理底层基础设施。 这些流式数据的数据源可以是前端Web/Mobile应用的点击流、IoT设备的事件或者是后端应用实时生成的日志。因为Amazon MSK与原生的Apache Kafka兼容,用户可以使用原生Apache Kafka API来处理这些实时的流式数据,做相应的数据分析,或者分发到后端的分析应用,比如数据湖应用。 为什么需要Amazon MSK Apache Kafka是一款在业内非常流行的开源流式处理软件,它最早用于内部的消息队列处理。后面贡献给了开源社区,并慢慢发展成为功能强大的流式处理平台。Apache Kafka以它的分布式部署、高吞吐量、低延迟而著称,所以无论是在新兴的互联网公司还是传统行业,都有非常广泛的应用。 但我们也看到,要运维一个生产级别的Kafka集群不是一个简单的任务,这跟我们平时在本机起一个单节点的Kafka集群做日常的开发

HashMap 的 7 种遍历方式与性能分析!(强烈推荐)

不问归期 提交于 2020-04-30 13:43:42
随着 JDK 1.8 Streams API 的发布,使得 HashMap 拥有了更多的遍历的方式,但应该选择那种遍历方式?反而成了一个问题。 本文 先从 HashMap 的遍历方法讲起,然后再从性能、原理以及安全性等方面,来分析 HashMap 各种遍历方式的优势与不足 ,本文主要内容如下图所示: HashMap 遍历 HashMap 遍历从大的方向来说,可分为以下 4 类 : 迭代器(Iterator)方式遍历; For Each 方式遍历; Lambda 表达式遍历(JDK 1.8+); Streams API 遍历(JDK 1.8+)。 但每种类型下又有不同的实现方式,因此具体的遍历方式又可以分为以下 7 种: 使用迭代器(Iterator)EntrySet 的方式进行遍历; 使用迭代器(Iterator)KeySet 的方式进行遍历; 使用 For Each EntrySet 的方式进行遍历; 使用 For Each KeySet 的方式进行遍历; 使用 Lambda 表达式的方式进行遍历; 使用 Streams API 单线程的方式进行遍历; 使用 Streams API 多线程的方式进行遍历。 接下来我们来看每种遍历方式的具体实现代码。 1.迭代器 EntrySet public class HashMapTest { public static void main

Kafka: Exactly-once Semantics

懵懂的女人 提交于 2020-04-29 17:16:37
https://www.confluent.io/blog/enabling-exactly-kafka-streams/ https://cwiki.apache.org/confluence/display/KAFKA/KIP-98+-+Exactly+Once+Delivery+and+Transactional+Messaging Exactly Once Delivery and Transactional Messaging in Kafka https://docs.google.com/document/d/11Jqy_GjUGtdXJK94XGsEIK7CP1SnQGdp2eF0wSw9ra8/edit# Overview Kafka stream其实就是重用的samza,流pipeline上的所有节点都是解耦合的,所以所有节点的snapshot和恢复策略都是local的。 其实Global或local的checkpoint策略没有好坏之分,是全局还是局部,关键是在哪里replay数据 如果你只能在source去replay数据,那么就必须要采用global的snapshot,否则无法保证全局一致 但是如果我们可以在每个处理节点去replay数据,那就没有必要做global snapshot, 而kafka天然作为replay数据的基础设施

java 8中构建无限的stream

时光总嘲笑我的痴心妄想 提交于 2020-04-29 08:48:26
java 8中构建无限的stream 简介 在java中,我们可以将特定的集合转换成为stream,那么在有些情况下,比如测试环境中,我们需要构造一定数量元素的stream,需要怎么处理呢? 这里我们可以构建一个无限的stream,然后调用limit方法来限定返回的数目。 基本使用 先看一个使用Stream.iterate来创建无限Stream的例子: [@Test](https://my.oschina.net/azibug) public void infiniteStream(){ Stream<Integer> infiniteStream = Stream.iterate(0, i -> i + 1); List<Integer> collect = infiniteStream .limit(10) .collect(Collectors.toList()); log.info("{}",collect); } 上面的例子中,我们通过调用Stream.iterate方法,创建了一个0,1,2,3,4....的无限stream。 然后调用limit(10)来获取其中的前10个。最后调用collect方法将其转换成为一个集合。 看下输出结果: INFO com.flydean.InfiniteStreamUsage - [0, 1, 2, 3, 4, 5, 6, 7, 8,

java 8中 predicate chain的使用

百般思念 提交于 2020-04-28 07:48:11
java 8中 predicate chain的使用 简介 Predicate是一个FunctionalInterface,代表的方法需要输入一个参数,返回boolean类型。通常用在stream的filter中,表示是否满足过滤条件。 boolean test(T t); 基本使用 我们先看下在stream的filter中怎么使用Predicate: [@Test](https://my.oschina.net/azibug) public void basicUsage(){ List<String> stringList=Stream.of("a","b","c","d").filter(s -> s.startsWith("a")).collect(Collectors.toList()); log.info("{}",stringList); } 上面的例子很基础了,这里就不多讲了。 使用多个Filter 如果我们有多个Predicate条件,则可以使用多个filter来进行过滤: public void multipleFilters(){ List<String> stringList=Stream.of("a","ab","aac","ad").filter(s -> s.startsWith("a")) .filter(s -> s.length()>1)

[Spark]-Streaming-调优

懵懂的女人 提交于 2020-04-28 03:28:59
1.概述   Spark Streaming的主要应用方向是实时计算.这代表一个Spark Streaming应用必然是对执行性能和运行稳定性( 7 x 24 )有一定要求的 2.性能   在性能方面,主要是合理的利用的集群资源,设置正确的批处理大小( 提升并行度 )和减少每个批次的处理时间( 计算逻辑优化 ).以让数据流处理的能像接受一样快    2.1 调整Spark配置参数         2.2 数据接收优化     一个Spark Streaming 应用的开端便是数据接收,那么性能调优的第一步就是保证:数据不会在数据接收器端产生积压.      2.2.2 及时的处理数据以防止数据积压       如果批处理时间( batch processing time )超过批次间隔( batchinterval ), 那么显然数据会不断的积压( receiver 的内存将会开始填满 ) , 最终会抛出 exceptions( 最可能是 BlockNotFoundException ).       考虑提升并行度等方法,以加快批次处理速度.       适度加大批次间隔,如果这样能及时在下个批次触发之前将数据处理完      使用 SparkConf 配置 spark.streaming.receiver.maxRate ,可以限制receiver的接受速率      2.2

为Oracle GoldenGate准备数据库

ε祈祈猫儿з 提交于 2020-04-27 21:40:17
了解如何为Oracle GoldenGate准备数据库,包括如何配置连接和日志记录,如何在数据库中启用Oracle GoldenGate,如何设置闪回查询以及如何管理服务器资源。 为集成进程配置连接 配置日志记录属性 在数据库中启用Oracle GoldenGate 设置闪回查询 管理服务器资源 2.1 为集成进程配置连接 如果您将使用集成捕获和集成Replicat,则每个都需要tnsnames.ora文件中的专用服务器连接。当您配置这些进程时,您可以指示进程在Extract and Replicat参数文件中使用这些连接,并使用USERID或USERIDALIAS参数。 以下是集成捕获(Extract)和集成Replicat所需的专用连接示例。 TEST = (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = test2)(PORT = 1521 )) ) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = test) ) ) 以下是在Extract或Replicat参数文件中指定连接字符串的安全选项。 密码加密方式: USERID intext @test , PASSWORD mypassword 凭证存储方法: USERIDALIAS ext

kafka配置监控和消费者测试

泄露秘密 提交于 2020-04-27 21:01:35
概念 运维 配置 监控 生产者与消费者 流处理 <span id="concept"> ####分区partition 一定条件下,分区数越多,吞吐量越高。分区也是保证消息被顺序消费的基础,kafka只能保证一个分区内消息的有序性 ####副本 每个分区有一至多个副本(Replica),分区的副本分布在集群的不同代理上,提高可用性。分区的每个副本在存储上对应与日志对象log对应 ####AR 每个分区的多个部分之间称为AR(assigned replicas),包含至多一份leader副本和多个follower副本 ###ISR kafka在zookeeper中动态维护了一个ISR(In-sync Replica),即保存同步的副本列表。列表中保存的是与leader副本保持消息同步的所有副本对应的代理节点id ####优先副本 AR列表中的第一个副本。理想情况下,优先副本是该分区的leader副本。所有的读写请求都有分区leader副本处理,kafka要保证优先副本在集群中均匀分布,保证了所有分区leader均匀分布, ####代理 每一个kafka实例称为代理(broker),每个代理都有唯一标示id即broker id,一台服务器上可以配置一个或多个代理 ####kafka streams java语言实现的用于流处理的jar文件 ####controller_epoch

入门大数据---Kafka是什么?

生来就可爱ヽ(ⅴ<●) 提交于 2020-04-27 19:37:49
[toc] 1. Kafka简介 Kafka是一种计算框架,结合了之前的MapReduce批处理和流式计算为一体,可以处理历史数据和实时数据。 **流平台具有三个关键功能: ** 发布和订阅记录流,类似于消息队列或企业消息传递系统。 以容错的持久方式存储记录流。 处理记录流。 Kafka通常用于两大类应用程序: 构建应用程序和Kafka之间的管道流 构建响应流 另外几个概念: Kafka可以部署到多台机器上,甚至不同区域的机房里面 Kafka的记录流存在Topic(主题)里面 每条记录由key,value和timestamp组成 Kafka提供了四个核心API: Producer API Consumer API Streams API Connector API Topics and Logs (主题和日志) 一个Topic有0个,1个或多个订阅者。一个Topic有1个或多个分区。另外还有个任务概念,每个任务可以处理多个分区。如下图所示: 每个Topic维护着一个有序的Log,订阅者根据自己记录的偏移量来灵活读取Log。 Distribution 每个Log有一个主节点和多个从节点,这些节点分布到不同机器上,从节点同步主节点内容,当主节点挂了,会从从节点里面选取一个主节点继续运行。每个主节点机器上同时分布着其它机器的从节点,同时主节点也分布着其它Log的主节点,画个图脑补下:

Oracle 日志模式

血红的双手。 提交于 2020-04-27 17:51:08
-- 日志记录模式(LOGGING 、FORCE LOGGING 、NOLOGGING) -- 三者的含义 LOGGING: -- 当创建一个数据库对象时将记录日志信息到联机重做日志文件,LOGGING实际上是对象的一个属性, -- 用来表示在创建对象时是否记录REDO日志,包括在做DML时是否记录REDO日志。 -- 一般表上不建议使用NOLOGGING,在创建索引或做大量数据导入时,可以使用NOLOGGING 。 FORCE LOGGING: -- 强制记录日志,即对数据库中的所有操作都产生日志信息,并将该信息写入到联机重做日志文件。 NOLOGGING: -- 正好与LOGGING、FORCE LOGGING 相反,尽可能的记录最少日志信息到联机日志文件。 -- FORCE LOGGING可以在数据库级别、表空间级别进行设定、而LOGGING与NOLOGGING可以在数据对象级别设定。 -- 在使用DATA GUARD 时,要求使用强制记录日志模式。注:FORCE LOGGING并不比一般的LOGGING记录的日志多, -- 数据库在FORCE LOGGING状态下,NOLOGGING选项将无效,因为NOLOGGING将破坏DATAGUARD的可恢复性. -- FORCE LOGGING强制数据库在任何状态下必须记录日志。 -- 附加日志 -- 附加日志