- 博客(39)
- 收藏
- 关注
原创 kafka设计思想 二
目录3 性能4 生产者我们在性能上已经做了很大的努力。我们主要的使用场景是处理WEB活动数据,这个数据量非常大,因为每个页面都有可能大量的写入。此外我们假设每个发布 message 至少被一个consumer (通常很多个consumer) 消费,因此我们尽可能的去降低消费的代价。我们还发现,从构建和运行许多相似系统的经验上来看,性能是多租户运营的关键。如果下游的基础设施服务很轻易被应用层冲击形成瓶颈,那么一些小的改变也会造成问题。通过非常快的(缓存)技术,我们能确保应用层冲击基础设施之前,将负载稳定下来。
2022-06-29 20:34:50
306
原创 kafka设计思想 一
目录1 动机2 持久化我们设计的 Kafka 能够作为一个统一的平台来处理大公司可能拥有的所有实时数据馈送。要做到这点,我们必须考虑相当广泛的用例。Kafka 必须具有高吞吐量来支持高容量事件流,例如实时日志聚合。Kafka 需要能够正常处理大量的数据积压,以便能够支持来自离线系统的周期性数据加载。这也意味着系统必须处理低延迟分发,来处理更传统的消息传递用例。我们希望支持对这些馈送进行分区,分布式,以及实时处理来创建新的分发馈送等特性。由此产生了我们的分区模式和消费者模式。最后,在数据流被推送到其它数据系统
2022-06-27 21:00:32
143
原创 Python模块解析 二
目录3 Python中的模块4 模块的发布5 模块安装、使用1、python中的包1. 引入包1.1 包就是一个目录1.2 把多个py文件放到同一个文件夹下1.3 使用import 文件夹.模块 的方式导入python3可以导入包,python2不行。1.4 使用from 文件夹 import 模块 的方式导入python3可以导入包,python2不行。1.5 在包的文件夹下创建__init__.py文件。在python2中:有一个目录,并且目录下有一个__init__.py的文件。才叫包。虽然文件内容没
2022-06-26 22:06:09
135
原创 Python模块解析 一
目录1 模块的使用及安装2 模块制作Python中的模块在Python中有一个概念叫做模块(module),这个和C语言中的头文件以及Java中的jar包很类似,比如在Python中要调用sqrt函数,必须用import关键字引入math这个模块,下面就来了解一下Python中的模块。说的通俗点:模块就好比是工具包,要想使用这个工具包中的工具(就好比函数),就需要导入这个模块import在Python中用关键字import来引入某个模块,比如要引用模块math,就可以在文件最开始的地方用impo...
2022-06-25 20:43:11
102
原创 Python异常处理 一
目录1 捕获异常2 except捕获多个异常3 获取异常的信息描述 4 捕获所有异常 5 else6 try...finally...运行结果:说明:打开一个不存在的文件123.txt,当找不到123.txt 文件时,就会抛出给我们一个IOError类型的错误,No such file or directory:123.txt (没有123.txt这样的文件或目录)异常:当Python检测到一个错误时,解释器就无法继续执行了,反而出现了一些错误的提示,这就是所谓的"异常"pass 表示实现了相应
2022-06-23 23:50:58
52
原创 Python 设计模式
目录1 单例模式2 工厂模式1. 单例是什么举个常见的单例模式例子,我们日常使用的电脑上都有一个回收站,在整个操作系统中,回收站只能有一个实例,整个系统都使用这个唯一的实例,而且回收站自行提供自己的实例。因此回收站是单例模式的应用。确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例,这个类称为单例类,单例模式是一种对象创建型模式。2. 创建单例-保证只有1个对象运行结果:3. 创建单例时,只执行1次__init__方法2 工厂模式工厂模式是我们最常用的实例化对象模式了,是
2022-06-22 22:51:24
65
原创 Druid核心介绍 三
查询路径:红色箭头:①客户端向Broker发起请求,Broker会将请求路由到②实时节点和③历史节点Druid数据流转:黑色箭头:数据源包括实时流和批量数据. ④实时流经过索引直接写到实时节点,⑤批量数据通过IndexService存储到DeepStorage,⑥再由历史节点加载. ⑦实时节点也可以将数据转存到DeepStorageDruid的集群依赖了ZooKeeper来维护数据拓扑. 每个组件都会与ZooKeeper交互,如下:实时节点在转存Segment到DeepStorage, 会写入自己转存了什么
2022-06-21 22:00:08
550
原创 Druid核心介绍 二
Druid DataSourceDruid中的数据存储在被称为datasource中,类似RDMS中的table!每个datasource按照时间划分。每个时间范围称为一个chunk(一般都是以天分区,则一个chunk为一天)!!! //也可以按其他属性划分在chunk中数据被分为一个或多个segment,每个segment都是一个单独的文件,通常包含几百万行数据注:这些segment是按照时间组织成的chunk,所以在按照时间查询数据时,效率非常高。数据分区:任何分布式存储/计算系统,都需要对数据进行合理
2022-06-20 23:18:24
197
原创 Druid核心介绍 一
Druid是2013年底开源出来的, 主要解决的是对实时数据以及较近时间的历史数据的多维查询提供高并发(多用户),低延时,高可靠性的问题。Druid简介:Druid是一个为在大数据集之上做实时统计分析而设计的开源数据存储。这个系统集合了一个面向列存储的层,一个分布式、shared-nothing的架构,和一个高级的索引结构,来达成在秒级以内对十亿行级别的表进行任意的探索分析。互联网技术的快速增长催生了各类大体量的数据,Hadoop很大的贡献在于帮助企业将他们那些低价值的事件流数据转化为高价值的聚合数据,这适
2022-06-19 20:14:40
539
原创 Kylin设计详解 三
Aggregation Groups 直译过来是聚合组。就是指定 Cube 中哪些维度会同时出现,若 Cube 中有两个维度没有同时出现在任何一个聚合组中,Cube 构建时就不会生成同时包含这两个维度的 Cuboid,聚合组是一个强大的剪枝工具。主要包含以下几项:Max Dimension Combination:查询时会涉及到的最大维度个数。设置后,多于该维度个数的 Cuboid 将不会被构建。Includes:聚合组里包含哪些维度。Mandatory Dimensions:在该聚合组中,有哪些维度是查询
2022-06-17 23:39:14
236
原创 Kylin设计详解 二
目录4 Cube构建及优化4.1 Cube构建及优化总览4.2 Cube构建分步骤说明构建Cube的过程设计可以说是 kylin 系统设计的精华,这7个步骤封装了 kylin 绝大多数的实现细节,呈现出来的是简洁精炼的构建步骤。上图中,有7个步骤,可以分为三个阶段:前四步为构建阶段,5、6步为优化阶段,最后一步为总览。下面我们一个一个详细说一下 在这一步中,我们需要设置的是 Cube 的基本信息,其中包括:Model Name:model 名。Cube Name: Cube 名,全局唯一,否则会创建失败。N
2022-06-16 23:30:43
216
原创 Kylin设计详解 一
目录一 Kylin设计核心思想二 Kylin基本架构三 基本概念业务的发展伴随着事实表的数据体量的增大,查询时间也越来越长,而另一方面,结果集的数据量却没有显著增长,指标的变化也并不频繁。我们希望所有的查询都能在秒级返回查询结果,于是,我们有了一个思路:为什么不能把所有的结果先算好,查询时直接从结果集中取出来呢?这也就是 kylin 设计的初衷。kylin的核心思想是预计算。好,现在这个组件已经有了一个准确的定位,那么接下来要解决的问题就是如何实现预计算,这套架子里究竟需要什么组件呢?上图中,蓝色的框框
2022-06-14 23:30:14
458
原创 Kylin的构建原理及简单优化 三
目录9 并发粒度优化10 自动构建cube脚本当Segment中某一个Cuboid的大小超出一定的阈值时,系统会将该Cuboid的数据分片到多个分区中,以实现Cuboid数据读取的并行化,从而优化Cube的查询速度。具体的实现方式如下:构建引擎根据Segment估计的大小,以及参数“kylin.hbase.region.cut”的设置决定Segment在存储引擎中总共需要几个分区来存储,如果存储引擎是HBase,那么分区的数量就对应于HBase中的Region数量。kylin.hbase.region.cu
2022-06-13 23:39:47
139
原创 Kylin的构建原理及简单优化 二
目录5 Cube存储原理6 使用衍生维度(derived dimension) 7 使用聚合组(Aggregation group) 8 Row Key优化在计算之前,会为每一个维度建立一个维度字典表 在HBase中存储的K是Cuboid+纬度值,其中Cuboid是指参与的维度数量,1为参与,0为不参与;纬度值指是以十六进制存储的取自于维度字典表中所对应得值。在kylin中属于构建优化,在选择维度表时有normal和derived,derived就是使用衍生维度。加快了计算,减少了查询得速度为了减少计算得c
2022-06-12 21:19:48
283
原创 Kylin的构建原理及简单优化 一
目录1 维度和度量2 Cube和Cuboid3 逐层构建算法(layer) 4 快速构建算法(inmem)维度:即观察数据的角度。比如员工数据,可以从性别角度来分析,也可以更加细化,从入职时间或者地区的维度来观察。维度是一组离散的值,比如说性别中的男和女,或者时间维度上的每一个独立的日期。因此在统计时可以将维度值相同的记录聚合在一起,然后应用聚合函数做累加、平均、最大和最小值等聚合计算。度量:即被聚合(观察)的统计值,也就是聚合运算的结果。比如说员工数据中不同性别员工的人数,又或者说在同一年入职的员工有多少
2022-06-11 20:42:09
138
原创 clickhouse核心涉及模块
目录1 Column与Field2 DataType3 Block与Block流4 TableColumn和Field是ClickHouse数据最基础的映射单元。作为一款百分之百的列式存储数据库,ClickHouse按列存储数据,内存中的一列数据由一个Column对象表示。Column对象分为接口和实现两个部分,在IColumn接口对象中,定义了对数据进行各种关系运算的方法,例如插入数据的insertRangeFrom和insertFrom方法、用于分页的cut,以及用于过滤的filter方法等。而这些方法
2022-06-10 22:11:33
155
原创 ClickHouse特性 3
目录1.6 多线程与分布式1.7 多主架构1.8 在线查询1.9 数据分片与分布式查询ClickHouse几乎具备现代化高性能数据库的所有典型特征,对于可以提升性能的手段可谓是一一用尽,对于多线程和分布式这类被广泛使用的技术,自然更是不在话下。如果说向量化执行是通过数据级并行的方式提升了性能,那么多线程处理就是通过线程级并行的方式实现了性能的提升。相比基于底层硬件实现的向量化执行SIMD,线程级并行通常由更高层次的软件层面控制。现代计算机系统早已普及了多处理器架构,所以现今市面上的服务器都具备良好的多核心
2022-06-09 22:57:45
314
原创 ClickHouse特性 2
目录1.3 向量化执行引擎 1.4 关系模型与SQL查询1.5 多样化的表引擎坊间有句玩笑,即"能用钱解决的问题,千万别花时间"。而业界也有种调侃如出一辙,即"能升级硬件解决的问题,千万别优化程序"。有时候,你千辛万苦优化程序逻辑带来的性能提升,还不如直接升级硬件来得简单直接。这虽然只是一句玩笑不能当真,但硬件层面的优化确实是最直接、最高效的提升途径之一。向量化执行就是这种方式的典型代表,这项寄存器硬件层面的特性,为上层应用程序的性能带来了指数级的提升。向量化执行,可以简单地看作一项消除程序中循环的优化。这
2022-06-08 23:26:33
143
原创 ClickHouse特性
目录1 ClickHouse的特性1.1 完备的DBMS功能1.2 列式存储与数据压缩ClickHouse是一款MPP架构的列式存储数据库,但MPP和列式存储并不是什么"稀罕"的设计。拥有类似架构的其他数据库产品也有很多,但是为什么偏偏只有ClickHouse的性能如此出众呢?ClickHouse发展至今的演进过程一共经历了四个阶段,每一次阶段演进,相比之前都进一步取其精华去其糟粕。可以说ClickHouse汲取了各家技术的精髓,将每一个细节都做到了极致。接下来将介绍ClickHouse的一些核心特性,正是
2022-06-07 21:03:58
366
原创 KAFKA特性 一
目录1 架构图2 生产者3 消费者 解读ProducerRecord:每个消息是一个ProducerRecord对象,其中Topic和Value值必填,partition和key非必填。过程send()方法大致过程为:设置序列化器->设置分区->放入队列缓存->等待时机push到broker注:不是直接发送给服务端,而是先在客户端把消息放入队列中, 然后由一个消息发送线程从队列中拉取消息,以批量的方式发送消息给服务端。 Kafka的记录收集器( RecordAccumulator)负责缓存生产者
2022-06-06 21:47:58
172
原创 Flink CEP简介
目录1 什么是复杂事件处理CEP2 Flink CEP一个或多个由简单事件构成的事件流通过一定的规则匹配,然后输出用户想得到的数据,满足规则的复杂事件。特征:CEP用于分析低延迟、频繁产生的不同来源的事件流。CEP可以帮助在复杂的、不相关的事件流中找出有意义的模式和复杂的关系,以接近实时或准实时的获得通知并阻止一些行为。CEP支持在流上进行模式匹配,根据模式的条件不同,分为连续的条件或不连续的条件;模式的条件允许有时间的限制,当在条件范围内没有达到满足的条件时,会导致模式匹配超时。看起来很简单,但是它有很多
2022-06-05 23:41:18
107
原创 Flink 状态编程和容错机制 三
目录3 检查点(checkpoint)3.1 Flink的检查点算法 3.2 Flink+Kafka如何实现端到端的exactly-once语义Flink具体如何保证exactly-once呢? 它使用一种被称为"检查点"(checkpoint)的特性,在出现故障时将系统重置回正确状态。下面通过简单的类比来解释检查点的作用。假设你和两位朋友正在数项链上有多少颗珠子,如下图所示。你捏住珠子,边数边拨,每拨过一颗珠子就给总数加一。你的朋友也这样数他们手中的珠子。当你分神忘记数到哪里时,怎么办呢? 如果项链上
2022-06-04 22:07:25
80
原创 Flink 状态编程和容错机制 二
目录2 状态一致性2.1 一致性级别2.2 端到端(end-to-end)状态一致性当在分布式系统中引入状态时,自然也引入了一致性问题。一致性实际上是"正确性级别"的另一种说法,也就是说在成功处理故障并恢复之后得到的结果,与没有发生任何故障时得到的结果相比,前者到底有多正确?举例来说,假设要对最近一小时登录的用户计数。在系统经历故障之后,计数结果是多少?如果有偏差,是有漏掉的计数还是重复计数?在流处理中,一致性可以分为3个级别:曾经,at-least-once非常流行。第一代流处理器(如Storm和Samz
2022-06-03 20:13:52
68
原创 Flink 状态编程和容错机制 一
目录1 有状态的算子和应用程序1.1 算子状态(operator state)1.2 键控状态(keyed state)流式计算分为无状态和有状态两种情况。无状态的计算观察每个独立事件,并根据最后一个事件输出结果。例如,流处理应用程序从传感器接收温度读数,并在温度超过90度时发出警告。有状态的计算则会基于多个事件输出结果。以下是一些例子。下图展示了无状态流处理和有状态流处理的主要区别。无状态流处理分别接收每条数据记录(图中的黑条),然后根据最新输入的数据生成输出数据(白条)。有状态流处理会维护状态(根据每条
2022-06-02 19:52:39
318
原创 Flink ProcessFunction API(底层API)
目录1 KeyedProcessFunction2 TimerService 和 定时器(Timers)3 侧输出流(SideOutput)4 CoProcessFunction 我们之前学习的转换算子是无法访问事件的时间戳信息和水位线信息的。而这在一些应用场景下,极为重要。例如MapFunction这样的map转换算子就无法访问时间戳或者当前事件的事件时间。 基于此,DataStream API提供了一系列的Low-Level转换算子。可以访问时间戳、watermark以及注册
2022-06-01 22:29:36
100
原创 Flink运行 三
目录四 执行图(ExecutionGraph)五 并行度(Parallelism)六 任务链(Operator Chains)四 执行图(ExecutionGraph)由Flink程序直接映射成的数据流图是StreamGraph,也被称为逻辑流图,因为它们表示的是计算逻辑的高级视图。为了执行一个流处理程序,Flink需要将逻辑流图转换为物理数据流图(也叫执行图),详细说明程序的执行方式。Flink 中的执行图可以分成四层:StreamGraph...
2022-05-30 20:41:14
74
原创 Flink运行 一
目录1 Flink运行时的组件1)作业管理器(JobManager)2)资源管理器(ResourceManager)3 )任务管理器(TaskManager)4 )分发器(Dispatcher)2任务提交流程1 Flink运行时的组件Flink运行时架构主要包括四个不同的组件,它们会在运行流处理应用程序时协同工作:作业管理器(JobManager)、资源管理器(ResourceManager)、任务管理器(TaskManager),以及分发器(Dispatcher)。..
2022-05-27 22:32:47
96
原创 Ruoyi框架前后端交互的整个流程 -前端
目录第一部分 前端1 当前网页对应的网址是localhost/system/role对应哪个页面2 点击某个页面,上面的数据是从数据库来的,前端如何发送请求给后端呢?第一部分 前端1 当前网页对应的网址是localhost/system/role对应哪个页面前端路由是动态的,url来自于数据库;前端文件夹名称以及文件名称、位置与数据库里一一对应1.1、路由动态赋值如果地址是/system/role 就找一个system文件夹下面有role文件夹的文件.
2022-05-25 22:30:44
8218
1
原创 Android Activity间的通信
1 Bundle传值例如:A调用并将数据传给B 1、A中调用代码: Intent intent = new Intent(); intent.setClass(A.this, B.class); Bundle mBundle = new Bundle(); mBundle.putString("passData", "hello!B");//压入数据,passData是自定义的识别标志,还可以put添加多个Int、String等类型的数据intent.putExtras(mBundle);
2022-04-30 23:56:04
640
原创 TextView效果实例
1 TextView的Html效果代码如下: @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); TextView textView = (TextView) findVi
2022-04-29 19:50:47
221
原创 Android 推流和播放
编码和推流,有两个方案选择:一:使用javacv来实现,最终也是用过ffmpeg来进行编码和推流,javacv实现到可以直接接收摄像头的帧数据需要自己实现的代码只是打开摄像头,写一个SurfaceView进行预览,然后实现PreviewCallback将摄像头每一帧的数据交给javacv即可javacv地址:https://github.com/bytedeco/javacvdemo地址:https://github.com/beautifulSoup/RtmpRecoder/tree/mast
2022-04-28 20:52:13
1757
3
原创 音频流分析 六 FrameWork创建ALSA流程
1FrameWork创建ALSA流程在AudioFlinger中会去调用AudioHardwareInterface::create,创建对应的HardwareInterface。AudioFlinger.cpp (\frameworks\base\services\audioflinger)其对应实现为下图所示,在create中会调用createAudioHardware去创建底层的AudioHardware.AudioHardwareInterface.cp...
2022-04-21 20:39:07
187
原创 音频流分析 五 策略与流类型
目录1 stream_type—流类型2 routing_strategy—策略3 audio_devices--输入输出设备定义4 stream_type、device、strategy三者间的关系5 getStrategy--流类型与策略之间的映射关系函数6 audio_mode—模式1 stream_type—流类型enum stream_type { DEFAULT =-1, VOICE_CALL .
2022-04-20 20:11:00
2027
原创 视频流分析 四
目录1 Imx-3stack-wm8994.c中注册耳机侦测中断函数2 Imx-3stack-wm8994.c中耳机侦测插入拔出所发出的给用户层的信息3 UEventObservr.java中注册抽象类UEventOberver1 Imx-3stack-wm8994.c中注册耳机侦测中断函数static int __devinit imx_3stack_wm8994_probe(struct platform_device *pdev){ struct mxc_audio
2022-04-19 21:46:56
121
原创 视频流分析 三
6 HAL硬件抽象层HAL Layer代码位置:~\hardware\alsa_sound\*.*; ~\hardware\libhardware_legacy\include\hardware_legacy\*.*~\hardware\mx5x\modules\alsa\alsa_imx5x.cpp~\hardware\alsa_sound\AudioHardwareALSA.cpp~\hardware\alsa_sound\ALSAStreamOps.cpp~\hardware\alsa
2022-04-16 20:41:05
448
原创 视频流分析 二
目录5 AudioFlinger和AudioPolicyServer5 AudioFlinger和AudioPolicyServerAudioPolicyService是Android音频系统的两大服务之一,另一个服务是AudioFlinger,这两大服务都在系统启动时有 MediaSever加载,加载的代码位于:frameworks\base\media\mediaserver \main_mediaserver.cpp。AudioFlinger主要负责管理音频数据处理以及...
2022-04-16 20:34:56
2891
原创 音频流分析一
目录1 APP层2 JAVA框架层1.计算满足最小要求的缓冲区大小2. 分析new AudioTrack3.分析start函数4.分析write函数3 Audio本地API--JNI层4 c/c++框架层1 APP层所涉及的代码路径:录音APK:\packages\apps\SoundRecorder\src\com\android\soundrecorder\*.*播放APK:\packages\apps\Music\src\com\android\
2022-04-16 20:34:05
2645
原创 音频 Alsa、Framework及Android
目录1 Alsa、Framework及Android1.1 ALSA架构简介图11.2 ALSA架构简介图 21.3 ALSA架构简介图 31.4 ALSA架构简介图 41.5 ALSA架构简介图 51.6 ALSA架构简介图 61.8 音频代码1 Alsa、Framework及Android目前,linux系统常用的音频驱动有两种形式:alsa和oss。Alsa:现在是linux下音频驱动的主要形式,与简单的oss兼容。oss:过去的形式音频设备接口包括PC
2022-04-16 20:09:30
4321
原创 android 编译总结
目录一.Aapt2编译错误解决方式二.maven地址三.aar和jar包导出方式四:studio代理五.模块依赖一.Aapt2编译错误解决方式org.gradle.api.tasks.TaskExecutionException: Execution failed for task ':app:mergeDebugResources'.aapt2编译错误一个提示编译时错误的方法 gradlew compileDebugJavaWithJavac二.mave
2022-04-13 19:32:16
187
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人