偏移量

Spark Streaming数据限流简述

≡放荡痞女 提交于 2020-01-19 21:06:02
  Spark Streaming对实时数据流进行分析处理,源源不断的从数据源接收数据切割成一个个时间间隔进行处理;    流处理与批处理有明显区别,批处理中的数据有明显的边界、数据规模已知;而流处理数据流并没有边界,也未知数据规模;   由于流处理的数据流特征,使之数据流具有不可预测性,而且数据处理的速率还与硬件、网络等资源有关,在这种情况下如不对源源不断进来的数据流速率进行限制,那当Spark节点故障、网络故障或数据处理吞吐量下来时还有数据不断流进来,那将有可能将出现OOM进而导致Spark Streaming程序崩溃;   在Spark Streaming中不同的数据源采用不同的限速策略,但无论是Socket数据源的限流策略还是Kafka数据源的限流策略其速率(rate)的计算都是使用PIDController算法进行计算而得来;   下面从源码的角度分别介绍 Socket数据源 与 Kafka数据源 的限流处理。 速率限制的计算与更新   Spark Streaming的流处理其实是基于微批处理(MicroBatch)的,也就是说将数据流按某比较小的时间间隔将数据切割成为一段段微批数据进行处理;   StreamingContext调用Start()启动的时候会将速率控制器(rateController)添加到StreamingListener监听器中;  

UNIX环境高级编程 第三章 文件I/O

回眸只為那壹抹淺笑 提交于 2020-01-14 02:48:55
UNIX环境高级编程——文件I/O 3.1 文件描述符 3.2 函数open和openat 参数 path: oflag: fd: 文件名和路径名截断 3.3 函数creat 3.4 函数close 3.5 函数lseek 3.6 函数read 3.7 函数write 3.8 I/O的效率 3.9 文件共享 3.10 原子操作 函数pread和pwrite 3.11 函数dup和dup2 3.12 函数sync、fsync和fdatasync 3.13 函数fcntl 3.14 函数ioctl 3.15 /dev/fd 3.1 文件描述符 作用:唯一表示一个文件(unix中设备也被看作文件) 当打开一个现有文件或创建一个新文件时,内核向进程返回一个文件描述符。 文件描述符的范围:0~OPEN_MAX-1 标准shell建立的文件描述符关联: STDIN_FILENO (文件描述符:0):标准输入 STDOUT_FILENO (文件描述符:1):标准输出 STDERR_FILENO (文件描述符:2):标准错误 3.2 函数open和openat 利用open或openat函数可以打开或创建一个文件 # include <fcntl.h> int open ( const char * path , int oflag , . . . . ) ; int openat ( int

使用QueryDSL补充springDataJpa进行复杂动态sql语句进行sql查询 实现 关联 分页等功能

本秂侑毒 提交于 2020-01-13 14:47:29
@Test public void testComplexSelect() { QQyOnlineCall onlineCall = QQyOnlineCall.qyOnlineCall; QClientList clientList = QClientList.clientList; // page必须从1开始 PageRequest request = PageRequest.of(0, 10); // 构建复杂查询语句 List<Tuple> result = mFactory.select(onlineCall.id, onlineCall.cUsesign, onlineCall.cYgscode, clientList.cClientname, clientList.cPhone1) .from(onlineCall) .leftJoin(clientList) .on(onlineCall.cClientid.eq(clientList.id)) .where(onlineCall.cCom.eq("C0003")) .limit(request.getPageSize()) // 单页查询数量 .offset(request.getPageSize() * request.getPageNumber()) // 偏移量 .fetch(); // 获取结果 for

Kafka--Consumer消费者

冷暖自知 提交于 2020-01-13 13:11:47
转:https://www.cnblogs.com/dingwpmz/p/12185196.html 温馨提示:整个 Kafka 专栏基于 kafka-2.2.1 版本。 1、KafkaConsumer 概述 根据 KafkaConsumer 类上的注释上来看 KafkaConsumer 具有如下特征: 在 Kafka 中 KafkaConsumer 是线程不安全的。 2.2.1 版本的KafkaConsumer 兼容 kafka 0.10.0 和 0.11.0 等低版本。 消息偏移量与消费偏移量(消息消费进度) Kafka 为分区中的每一条消息维护一个偏移量,即消息偏移量。这个偏移量充当该分区内记录的唯一标识符。消费偏移量(消息消费进度)存储的是消费组当前的处理进度。消息消费进度的提交在 kafka 中可以定时自动提交也可以手动提交。手动提交可以调用 ommitSync() 或 commitAsync 方法。 消费组 与 订阅关系 多个消费这可以同属于一个消费组,消费组内的所有消费者共同消费主题下的所有消息。一个消费组可以订阅多个主题。 队列负载机制 既然同一个消费组内的消费者共同承担主题下所有队列的消费,那他们如何进行分工呢?默认情况下采取平均分配,例如一个消费组有两个消费者c1、c2,一个 topic 的分区数为6,那 c1 会负责3个分区的消费,同样 c2

ConcurrentHashMap的CAS操作

夙愿已清 提交于 2020-01-08 14:36:27
无锁的概念   在谈论无锁概念时,总会关联起乐观派与悲观派,对于乐观派而言,他们认为事情总会往好的方向发展,总是认为坏的情况发生的概率特别小,可以无所顾忌地做事,但对于悲观派而已,他们总会认为发展事态如果不及时控制,以后就无法挽回了,即使无法挽回的局面几乎不可能发生。   这两种派系映射到并发编程中就如同加锁与无锁的策略,即加锁是一种悲观策略,无锁是一种乐观策略,因为对于加锁的并发程序来说,它们总是认为每次访问共享资源时总会发生冲突,因此必须对每一次数据操作实施加锁策略。 而无锁则总是假设对共享资源的访问没有冲突,线程可以不停执行,无需加锁,无需等待,一旦发现冲突,无锁策略则采用一种称为CAS的技术来保证线程执行的安全性,这项CAS技术就是无锁策略实现的关键,下面我们进一步了解CAS技术的奇妙之处。 无锁的执行者-CAS 介绍CAS CAS的全称是Compare And Swap 即比较交换,其算法核心思想如下 执行函数:CAS(V,E,N) 其包含3个参数 V表示要更新的变量 E表示预期值 N表示新值 如果V值等于E值,则将V的值设为N。若V值和E值不同,则说明已经有其他线程做了更新,则当前线程什么都不做。 通俗的理解就是CAS操作需要我们提供一个期望值,当期望值与当前线程的变量值相同时,说明还没线程修改该值,当前线程可以进行修改,也就是执行CAS操作,但如果期望值与当前线程不符

Redis主从同步、哨兵、集群

拜拜、爱过 提交于 2020-01-02 00:02:32
什么是主从同步(复制) 主从复制,是指将一台Redis服务器的数据,复制到其他的Redis服务器。前者称为主节点(master),后者称为从节点(slave),数据的复制是单向的,只能由主节点到从节点。 默认情况下,每台Redis服务器都是主节点;且一个主节点可以有多个从节点(或没有从节点),但一个从节点只能有一个主节点。 主从复制的作用 数据冗余:主从复制实现了数据的热备份,是持久化之外的一种数据冗余方式。 故障恢复:当主节点出现问题时,可以由从节点提供服务,实现快速的故障恢复;实际上是一种服务的冗余。 负载均衡:在主从复制的基础上,配合读写分离,可以由主节点提供写服务,由从节点提供读服务(即写Redis数据时应用连接主节点,读Redis数据时应用连接从节点),分担服务器负载;尤其是在写少读多的场景下,通过多个从节点分担读负载,可以大大提高Redis服务器的并发量。 读写分离:可以用于实现读写分离,主库写、从库读,读写分离不仅可以提高服务器的负载能力,同时可根据需求的变化,改变从库的数量; 高可用基石:除了上述作用以外,主从复制还是哨兵和集群能够实施的基础,因此说主从复制是Redis高可用的基础。 Redis之主从同步的实现原理 1.当从库和主库建立ms(master和slave)关系后,会向主库发送sync命令。 2.收到SYNC命令的主服务器执行BGSAVE命令

单继承、多继承、菱形继承的虚函数表

自古美人都是妖i 提交于 2020-01-01 13:06:49
文章目录 前言 问题 测试环境 开始测试 无虚函数简单类结构 包含虚函数的类结构 单继承 多继承 菱形继承 虚继承 总结 前言 最近被问到一个关于多继承虚函数表的问题,当时回答是可能存在多个虚函数表,应该是顺序排列的,但具体怎么排列还是有些疑惑的,回答的时候到有点儿心虚。之后查了资料,做了简单的实验,可以确定的是对于继承了多个含有虚函数基类的子类来说,指向虚函数表的指针应该不止一个。 问题 虚函数表的问题是从C++多态的概念引出的,要想实现多态有3个条件: 存在继承:没有继承就没有多态(运行时),在多态中必须存在有继承关系的父类和子类。 重写函数:父类中需要定义带有 virtual 关键字的函数,而在子类中重写一个名字和参数与父类中定义完全相同的函数。 向上转型:将父类的指针和引用指向子类的对象。 满足以上三个条件,当使用父类的指针调用带有 virtual 关键字的函数时,就会产生多态行为。 实现这种多态表现的核心内容就是虚函数表,对于带有 virtual 关键字的函数地址会被放入一个表格,而在类中会有一个指向虚函数表的指针指向这个表格,表明这个表格属于类的一部分。 对于父类来说,这个表格中都是自己类的虚函数,而对于子类来说,首先这个虚函数表包含父类中所有的虚函数,当子类重写某个虚函数时就会用子类重写后的函数地址替换原来父类中定义的函数地址

redis的主从复制原理

淺唱寂寞╮ 提交于 2019-12-24 13:55:04
1. 前言 和MySQL主从复制的原因一样,Redis虽然读取写入的速度都特别快,但是也会产生读压力特别大的情况。为了分担读压力,Redis支持主从复制,Redis主从复制可以根据是否是全量分为全量同步和增量同步。 2. 旧版复制功能实现 redis复制功能分为同步和命令传播两种操作: (1)同步操作负责将从数据库的状态更新为和主数据库状态一致 (2)命令传播操作则用于当主服务器状态修改时,让从服务器状态重新回到一致 2.1 同步 同步操作由sync操作完成: (1)从服务器向主服务器发送sync命令 (2)收到sync命令的主服务器执行BGSAVE命令,生成RDB文件,并使用一个缓冲区缓存生成RDB期间所有的写命令 (3)RDB生成完成时,发送RDB给从服务器,从服务器载入RDB,状态和主服务器一致 (4)然后主服务器将缓冲区中的写命令全部传给从服务器,状态一致 2.2 命令传播 同步操作完成后,主从状态一致,但是每当客户端向主服务器执行写命令时,主服务器会修改,和从服务器状态不一致,为了让主从状态重新回到一致,主服务器会发送写命令给从服务器,让从服务器回到和主服务器一致的状态。 2.3 旧版复制功能的不足之处 在redis2.8之前,主从服务器的复制会分为两种: (1)初次复制:从服务器以前从没复制过其他主服务器,或者从服务器的主服务器换了 (2)断线后复制

简单VR照片 使用陀螺仪、姿态角(Roll、Pitch、Yaw )、四元数

拈花ヽ惹草 提交于 2019-12-18 09:04:04
最近在做一个类似VR照片的demo,跟全景图片也很像,只是VR照片与全景720度显示,我只做了180度。但我发现他们实现的原理有一丝相似,希望可以给一些想入行AR、VR的朋友一些提示吧。 要想根据用户摇晃手机的行为轨迹展示相应的场景,那必须要使用移动端的陀螺仪、加速器等传感器来做相应的协调。现在的移动端已经提供了很多传感器,你可以根据自己的需要获取相应的数据。 刚开始的时候,我使用传感器提供的姿态角,也称为欧拉角:pitch yaw roll 来显示。这种 姿态角/欧拉角 比较常用在航空上,无人机技术应该也使用到了这个技术点。我用飞机的模型来展示一下这三个角,就一目了然了(不同作者使用不同的坐标系,使用哪种坐标系,个人而定。): 图一 姿态角/欧拉角 在数学上理解起来会有点抽象,我也是稍理解一点。在维基百科上,欧拉角定义为:用来描述刚体在三维欧几里得空间的取向,对于任何参考系,一个刚体的取向,是依照顺序,从这参考系,做三个欧拉角的旋转而设定的。有兴趣了解得深入一点,可以参考(需翻墙): https://zh.wikipedia.org/wiki/%E6%AC%A7%E6%8B%89%E8%A7%92 我们也可以简单理解这三个角代表什么意思: 1、俯仰角θ(pitch):围绕Y轴旋转的。 图二 2、偏航角ψ(yaw):围绕Z轴旋转的角度。 图三 3、滚转角Φ(roll)

redis系列--主从复制以及redis复制演进

会有一股神秘感。 提交于 2019-12-17 22:51:52
一、前言   在之前的文章已经详细介绍了redis入门基础已经持久化相关内容包括redis4.0所提供的混合持久化。   通过持久化功能,Redis保证了即使在服务器宕机情况下数据的丢失非常少。但是如果这台服务器出现了硬盘故障、系统崩溃等等,不仅仅是数据丢失,很可能对业务造成灾难性打击。为了避免单点故障通常的做法是将数据复制多个副本保存在不同的服务器上,这样即使有其中一台服务器出现故障,其他服务器依然可以继续提供服务。当然Redis提供了多种高可用方案包括:主从复制、哨兵模式的主从复制、以及集群。   本文将详细介绍Redis从2.6以到4.0提供复制方案的演进,也包括:主从复制、复制原理以及相关实践。 二、主从复制 简介   在主从复制中,数据库分为两类,一类是主库(master),另一类是同步主库数据的从库(slave)。主库可以进行读写操作,当写操作导致数据变化时会自动同步到从库。而从库一般是只读的(特定情况也可以写,通过参数slave-read-only指定),并接受来自主库的数据,一个主库可拥有多个从库,而一个从库只能有一个主库。这样就使得redis的主从架构有了两种模式:一类是一主多从如下图1,二类是“链式主从复制”--主->从->主-从如下图2。 对于一主多从的复制架构不必多说,这里解释下链式主从复制:如上图2,主库A的数据会同步到从库B和从库C