Kafka 概述
Kafka架构
Broker:Kafka集群包含一个或多个服务器,这种服务器被称为broker
Topic:每条发布到Kafka集群的消息都有一个类别,这个类别被称为Topic。(物理上不同Topic的消息分开存储,逻辑上一个Topic的消息虽然保存于一个或多个broker上但用户只需指定消息的Topic即可生产或消费数据而不必关心数据存于何处)
Partition:Partition(分片)是物理上的概念,每个Topic包含一个或多个Partition,创建topic时可指定parition数量。每个partition对应于一个文件夹,该文件夹下存储该partition的数据和索引文件。
Producer:负责发布消息到Kafka broker
Consumer:消息消费者,向kafka broker读取消息的客户端。每个consumer属于一个特定的consuer group(可为每个consumer指定group name,若不指定group name则属于默认的group)。使用consumer high level API时,同一topic的一条消息只能被同一个con ...
Java NIO ByteBuffer概述
Buffer的基本用法使用Buffer读写数据一般遵循以下四个步骤:1、分配空间2、写入数据到Buffer3、调用flip()方法4、从Buffer中读取数据5、调用clear()方法或者compact()方法当向buffer写入数据时,buffer会记录下写了多少数据。一旦要读取数据,需要通过flip()方法将Buffer从写模式切换到读模式。在读模式下,可以读取之前写入到buffer的所有数据。一旦读完了所有的数据,就需要清空缓冲区,让它可以再次被写入。有两种方式能清空缓冲区:调用clear()或compact()方法。clear()方法会清空整个缓冲区。compact()方法只会清除已经读过的数据。任何未读的数据都被移到缓冲区的起始处,新写入的数据将放到缓冲区未读数据的后面。
四个主要属性:
capacity:作为一个内存块,Buffer有一个固定的大小值,也叫“capacity”.你只能往里写capacity个byte、long,char等类型。一旦Buffer满了,需要将其清空(通过读数据或者清除数据)才能继续写数据往里写数据。
position:
当你写数据到Buffer ...
Java NIO简述
概述Java NIO(New IO)是一个可以替代标准Java IO API的IO API(从Java 1.4开始),Java NIO提供了与标准IO不同的IO工作方式。
I/O模型
同步阻塞IO:在此种方式下,用户进程在发起一个IO操作以后,必须等待IO操作的完成,只有当真正完成了IO操作以后,用户进程才能运行。JAVA传统的IO模型属于此种方式!
同步非阻塞IO:在此种方式下,用户进程发起一个IO操作以后边可返回做其它事情,但是用户进程需要时不时的询问IO操作是否就绪,这就要求用户进程不停的去询问,从而引入不必要的CPU资源浪费。其中目前JAVA的NIO就属于同步非阻塞IO。
异步阻塞IO:此种方式下是指应用发起一个IO操作以后,不等待内核IO操作的完成,等内核完成IO操作以后会通知应用程序,这其实就是同步和异步最关键的区别,同步必须等待或者主动的去询问IO是否完成,那么为什么说是阻塞的呢?因为此时是通过select系统调用来完成的,而select函数本身的实现方式是阻塞的,而采用select函数有个好处就是它可以同时监听多个文件句柄,从而提高系统的并发性!
异步非阻塞I ...
Spark RDD详解
RDD基本概念:
RDD( resilient distributed dataset,弹性分布式数据集):spark的基本计算单元,可以通过一系列算子进行操作(主要有Transformation和Action操作)。
RDD是一个不可修改的,分布的对象集合。每个RDD由多个分区组成,每个分区可以同时在集群中的不同节点上计算。RDD可以包含Python,Java和Scala中的任意对象。
DAG (Directed Acycle graph,有向无环图):反应RDD之间的依赖
窄依赖(Narrow dependency):子RDD依赖于父RDD中固定的data
宽依赖(Wide Dependency):子RDD对父RDD中的所有data partition都有依赖
RDD构建图
RDD来源:
parallelizing an existing collection in your driver program(程序内部已经存在的数据集)
referencing a dataset in an external storage system, suc ...
Spark Shuffle基础
Shuffle 基本概念概述:
Shuffle描述着数据从map task输出到reduce task 输入的这段过程。在分布式情况下,reduce task需要跨节点拉取其它节点上的map task结果。
当Map的输出结果要被Reduce使用时,输出结果需要按key哈希,并且分发到每一个Reducer上去,这个过程就是shuffle。
由于shuffle涉及到了磁盘的读写和网络的传输,因此shuffle性能的高低直接影响到了整个程序的运行效率。
Spark 的Shuffle 分为 Write,Read 两阶段
Write 对应的是ShuffleMapTask,具体的写操作ExternalSorter来负责
Read 阶段由ShuffleRDD里的HashShuffleReader来完成。如果拉来的数据如果过大,需要落地,则也由ExternalSorter来完成的
所有Write 写完后,才会执行Read。 他们被分成了两个不同的Stage阶段。
Shuffle Write ,Shuffle Read 两阶段都可能需要落磁盘,并且通过Disk Merge 来完成最后的Sort归并 ...
SparkStream 函数详解-Transformations
一个DStream对象可以调用多种操作,主要分为如下几类:
Transformations
Window Operations
Join Operations
Output Operations
Transformationsmap(func)
Return a new DStream by passing each element of the source DStream through a function func.
主要作用是,对DStream对象a,将func函数作用到a中的每一个元素上并生成新的元素,得到的DStream对象b中包含这些新的元素。
12//拼接一个”_NEW”字符串val linesNew = lines.map(lines => lines + "_NEW" )
map中操作复杂可把函数抽出来在外部定义:
12345val mapResult = stream.map(new Transformations().customeMap(_))def customeMap(word: String): String = ...
Spring-boot-MyBatis配置-2
多数据源配置
分包: 不同数据源的在不同的目录下;事务的回滚需要创建根据数据源创建
注解
AOP: aop注解切面需要在Service层进行数据源切换;事务可以将多个数据源放在一个事务中;
分包形式
不同的数据源的sql操作分布在不同的路径下
两个数据源的basepackage分别为:
com.yany.dao.multi.ads
com.yany.dao.multi.rds
在创建MapperScannerConfigurer时,对应不同的数据源扫描不同的basepackage路径
1mapperScannerConfigurer.setBasePackage("xxxx");
对应的xml,即MAPPER_PATH
classpath:/com/yany/mapper/multi/ads/**.xml
classpath:/com/yany/mapper/multi/rds/**.xml
在创建SqlSessionFactoryB ...
Spring-boot MyBatis配置-1
本例使用mysql作为数据库,使用druid作为数据库连接池主要有单数据源和多数据源实例多数据源中又分为:1. 分包形式 2. aop形式 3. 注解形式
项目目录结构
[comment]: <> ( )
MyBatis配置实现
springBoot相比于原来的Spring的模式就是减少xml配置,将它们用java代码实现。
DataSource的bean,主要配置数据来源
SqlSessionFactoryBean的bean,引用 datasource,MyBatis配置,sql的xml扫描,以及各个插件的添加
MapperScannerConfigurer的bean的,主要设置基本扫描包,引用SqlSessionFactoryBean
DataSourceTransactionManager的bean,主要用设置事务
添加maven依赖12345678910111213141516171819202122232425262728<!-- aop --> <dependency> <groupId>org ...
Spring-Boot 入门学习
Spring Boot makes it easy to create stand-alone, production-grade Spring based Applications that you can “just run”. We take an opinionated view of the Spring platform and third-party libraries so you can get started with minimum fuss. Most Spring Boot applications need very little Spring configuration.简言之:方便创建一个最小规模的Spring工程,且它只需要很少的Spring配置
特征
Create stand-alone Spring applications
Embed(内置、嵌入) Tomcat, Jetty or Undertow directly (no need to deploy WAR files)
Provide opinionated ‘starter’ POM ...