自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(51)
  • 收藏
  • 关注

原创 ElasticSearch:小结

1、分片:支持水平扩展;可以分布式的并发的查询,增加查询效率。2、副本:每个分片都有自己的副本,保证容错性;扩展吞吐量,因为搜索可以在所有的副本上进行;分片的分配都是由Master来的。3、倒排索引:给每个字段都都建立了一个倒排索引,字段和主键_id的关联关系,如果需要分词的字段则分词后每个词都做一个关联。查询的时候就根据value找key(_id)。4、主键(_id)的hash值和主分片取余得到哪个分片;分片控制-用户可以访问分片的任意副本都能获取到数据,一般都是做轮询。所以一旦分片数量设定后就不能

2021-07-22 13:45:07 219 1

原创 集合相关的总结

ArrayList底层是一个动态数组,1.8及以后初始化的时候是一个长度为0的数组,在第一次调用add方法时再创建一个长度为10的数组,每次扩容是扩1.5倍。查询快,增删慢。增删的时候需要把删除后面的元素位置都向前移动,因为数组在内存中是一片连续的内存空间;查询的时候只需要根据下标查询就行了。如果提前知道存入集合元素的数量,初始化的时候可以指定集合大小,减少扩容,提高效率,因为扩容需要把原数组元素copy到新数组中。ArrayList是非线程安全的,如果要保证线程安全,使用如下方法:1)使用Ve

2021-07-12 14:40:38 202

原创 Mysql:理论基础

这里主要分析下InnoDB引擎相关。关于InnoDB和MyIsam引擎,官网说:除非需要用到某些InnoDB不具备的特性,并且没有其他办法可以替代,否则都应该选择InnoDB引擎。所以这里重点分析InnoDB。InnoDB磁盘结构整体来讲主要分为以下部分:系统表空间、用户表空间、redo 日志redo log:默认情况下,InnoDB储存引擎的数据目录下会有两个名为ib_logfile0和ib_logfile1的文件,这就是redo log file,记录了I对于InnoDB存储引擎的事务日志。它的

2021-06-02 17:40:16 208 1

原创 并发(一):JMM内存模型和volatile关键字

JMM内存模型每个Java线程都有⾃⼰的⼯作内存。操作数据,⾸先从主内存中读,得到⼀份拷⻉,操作完毕后再写回到主内存。JMM可能带来可⻅性、原⼦性和有序性问题。所谓可⻅性,就是某个线程对主内存内容的更改,应该⽴刻通知到其它线程。所谓原⼦性,是指⼀个操作是不可分割的,不能执⾏到⼀半,就不执⾏了。所谓有序性,就是指令是有序的,不会被重排。volatile关键字volatile 关键字是Java提供的一种轻量级的同步机制,它能保证可见性和有序性,但是不能保证原子性。可见性先做一个可见性的测试

2021-05-12 15:48:09 190 2

原创 记录一次ClickHouse数据迁移的过程

迁移的背景:首先目前的集群是4节点,配置为:4分片1副本(也就是没有数据备份),然后其中一个节点由于服务器问太卡访问太慢,需要去掉该节点,再重新加一个节点,然后再把去掉的节点上的数据迁移到新的节点中,然后整个集群还是4个节点。方案:借助clickhouse-copier,这是官网提供的一个数据迁移的工具,它可以做整个集群迁移到另一个集群,也可以只把其中一个分片的数据迁移,也可以在集群内部做数据迁移,这次我们的背景是集群内部做迁移。具体做法:首先我的想法是,先新增一个节点,就是集群由4节点变成5

2021-05-11 11:20:31 1152 5

原创 Flink进阶(五):天维度的统计中涉及的自定义触发器

前言:一看时间,都快1年不写flink的谢列文章了,今天写一个很实用的一个场景内容,也是我们生产中的用法。就是按天维度的统计,要求3s统计一次结果。首先这个需求,我的想法是:开一个24H的窗口,然后自定义触发器,3s触发一次窗口计算,然后把计算结果sink到redis中去。话不多说,直接上代码。基本代码这里为了方便直接用socket去模拟数据源,数据格式大概是:sensor_1,1547718228000,38.1有个实体类:@Data@NoArgsConstructor@AllArgsCon

2021-03-16 11:36:02 692

原创 ClickHouse SQL记录

最近基于ClickHouse做了一些统计,用到了一些挺好用的函数,特记录下使用语音间隔时长最长的是几天用户每用一次语音就记录一条数据,数据中有时间、userId等,现在需要统计在某个时间范围内使用语音间隔时长最长是几天,也就是有几天没有语音数据。思路如下:1、先做一个子查询过滤下数据,按照userId、eventDate分组再按照时间排序,同时将时间字段(eventData)转为1到366的数字select userId, toDayOfYear(eventDate) as dfrom db_t

2021-01-22 15:51:29 2222 3

原创 Spring Cloud Alibaba (五) :Sentinel

前言:引用官网的截图来对Sentinel有个说明以流量为切入点,通过动态设置的流量控制、服务熔断等手段达到保护系统的目的,通过服务降级增强服务被拒后用户的体验。DashboardSentinel 有一个Dashboard控制台,可以方便的看到我们设置的降级和流控规则,也能动态的添加修改规则,很是方便,为了后面方便讲解Sentinel,我们先把这个东西安装并用起来。下载上传服务器并运行可以去官网下载jar包,然后执行命令运行,指定host、port 还有用户名密码,不指定的话默认都是sentine

2020-12-28 15:19:17 241

原创 Spring Cloud Alibaba (四) :整合Seata 分布式事务

前言:前几天(12-22) SpringCloud发布了最新的 Spring Cloud 2020.0 Release Notes,改动还是挺大的。大家感兴趣自行去看看。不过不影响我继续整合 SpringCloudAlibaba,今天我们整合 Seata 分布式事务。之前我就写了一篇关于Seata的文章,是用Eureka+seata整合的。SpringCloud+Eureka+Seata:整合分布式事务在SpringCloudAlibaba中,我们就用nacos作为seata的注册中心和配置中心,

2020-12-27 11:27:28 258

原创 Spring Cloud Alibaba (三) :Dubbo RPC 服务调用

Spring Cloud 默认情况下微服务间的通信采用的是 HTTP REST,其通信效率较 RPC 通信是比较低的。而 Dubbo 是一个 RPC 通信架构,不过其仅提供了服务发现与治理两大功能,即其生态不如Spring Cloud 完整。Dubbo Spring Cloud 则是将两者完美结合一起,各取所长。进入主题!定义 Dubbo 服务接口Dubbo 服务接口是服务提供方与消费方的远程通讯契约,通常由普通的 Java 接口(interface)来声明;为了确保契约的一致性,推荐的做法是将 Du

2020-12-23 09:59:26 789

原创 Spring Cloud Alibaba (二) :Gateway

简介网关是系统唯一对外的入口,介于客户端与服务器端之间,用于对请求进行鉴权、限流、路由、监控等功能。在 Spring Cloud Gateway 中有三个非常重要的概念:route 路由路由是网关的最基本组成,由一个路由 id、一个目标地址 url,一组断言工厂及一组 filter组成。若断言为true,则请求将经由 filter 被路由到目标 url。predicate 断言断言即一个条件判断,根据当前的 http 请求进行指定规则的匹配,比如说 http 请求头, 请求时间等。只有当匹配上

2020-12-22 15:53:07 233 1

原创 Spring Cloud Alibaba (一) :Nacos

前言:Netflix全家桶系列写完后,近来有空,继续写Alibaba系列,这个系列会比较多,所以分篇幅来写,包括Nacos、Sentinel、Gateway、Seata、RocketMQ、SkyWalking、Dubbo RPC。应该算是一整套的解决方案了。这篇首先从Nacos讲起,包括Nacos作为注册中心和配置中心的功能。说在前面:还是老样子,我们先确定版本号。上官网找版本说明,截图如下:里面有SpringCloud、SpringClouAlibaba和SpringBoot的版本依赖关系;还有Al

2020-12-22 14:54:36 380

原创 SpringCloud Netflix 全家桶系列

前言:准备写个微服务的系列文章,包含SpringCloud 中的一代,Netflix全家桶系列;二代,Alibaba系列;还有dubbo相关的。这篇就先从Netflix开始!会介绍Eureka、Ribbon、OpenFeign、Hystrix、Zuul、SpringCloudConfig等。说在前面:1、先说下SpringCloud的版本,刚开始的接触的一些新手如果不了解,会被它的这个版本号弄的很晕。首先它的大版本号是以英国伦敦地铁站的站名命名的,比如最早的Angel、Brixton…到现在的Finch

2020-12-08 17:37:45 785 1

原创 虚拟机安装问题记录

1.NAT和桥接模式桥接模式下,会占用局域网内的一个IP地址,局域网的其他主机能直接连接虚机NAT模式下,需要宿主机配置VMnet8的网络,只有宿主机能联机虚机2.IP地址分配vim /etc/sysconfig/network-scripts/ifcfg-ens33添加内容,静态分配IP地址,配置DNS地址为了连接外网BOOTPROTO=staticONBOOT=yesIPADDR=10.10.99.101NETMASK=255.255.255.0GATEWAY=10.10.99.

2020-09-04 09:00:19 155

原创 JVM(五):垃圾回收

判断算法引用计数法给对象中添加一个引用计数器,每当有一个地方引用它时,计数器值就加1:当引用失效时,计数器值就减1:任何时刻计数器都为0的对象就是不可能再被使用的。优点:实现简单,判断效率高,大部分情况下都是很不错的算法缺点:很难解决对象之间的相互循环引用的问题。可达性分析法通过一系列的名为“GCRoot”的对象作为起始点,从这些节点开始向下搜索,搜索所走过的路径称为引用链(Reference Chain),当一个对象到GCRoot没有任何引用链相连(就是从GCRoot到这个对象不可达)时,则

2020-08-13 10:37:37 133

原创 JVM(四):认识运行时数据区

前言:前面讲了,一个JVM主要由三个部分组成,前面我已经讲了执行引擎和类加载子系统,在这篇中就详细说下运行时数据区。总体认识下运行时数据区jdk1.7之前,HotSpot虚拟机对于方法区的实现称之为“永久代”, Permanent Generation 。jdk1.8之后,HotSpot虚拟机对于方法区的实现称之为“元空间”, Meta Space 。方法区存储已经被虚拟机加载的类信息、常量、静态变量、即时编译器编译后的代码等等。JDK1.8及以后不再有方法区,原方法区存储的信息被分成两部分:

2020-08-12 07:43:03 243

原创 JVM(三):认清类加载子系统

前言:首先得了解类加载的一个总过程,见下图,然后我们再对每个过程中的细节拆分说明类加载过程加载这一步主要就靠类加载器去加载我们的class文件,具体流程:1)通过一个类的全限定名来获取此类的二进制流。2)将这个字节流的静态存储结构转化为方法区的运行时数据结构。3)在内存中创建一个 java.lang.Class 对象,作为方法区该类的各种数据的访问入口。其中注意点:非数组类的加载时通过类加载器来完成,而数组类本身是由java虚拟机直接创建,但是数组中元素的类型最终还是要靠类加载器创建。Ho

2020-08-11 22:34:59 150

原创 JVM(二):认识class文件

前言:class文件是一个16进制的文件,可以通过Hex Editor工具打开,打开后如下:注:提供两个文档帮助我们阅读class文件十六进制转字符串进制转换(16进制转10进制)概述我们先对这个class文件有个总体的了解魔数所有的由Java编译器编译而成的class文件的前4个字节都是“0xCAFEBABE”。它的作用在于:当JVM在尝试加载某个文件到内存中来的时候,会首先判断此class文件有没有JVM认为可以接受的“签名”,即JVM会首先读取文件的前4个字节,判断该4个字节是

2020-08-10 10:55:37 227

原创 JVM汇总篇

前言:以前只是在空闲的时候对JVM做一些零散的学习,比如今天看了下堆栈的区别,明天看了下常量池的知识,过两天又看了下双亲委派机制,在过段时间又看了内存模型相关的…每次都是这样东一榔头西一棒,没有经过系统的学习JVM相关知识,没有做过一些总结,没有在整体层面上去看待JVM,也没有具体到某个知识点的深度。所以这次决定花点时间做一个全面的整理和总结,结合书上看到的,结合其他大佬的见解,再综合自己的理解,写一个JVM的系列博客。这个汇总篇主要是 一些跳转链接...

2020-08-07 15:47:49 274

原创 JVM(一):初识JVM

JVM架构理解一张图,讲的很清晰,jvm主要包括了类加载器、运行时数据区、执行引擎程序的执行过程首先得知道我们的java程序写好之后是如何执行的?java代码先被编译成字节码文件,也就是.class文件,我们的JVM只认识字节码文件,它会将我们的字节码文件编译成机器码文件,而这个机器码文件才是电脑CPU能直接读取运行的指令。在这过程中,JVM帮我们屏蔽了不同操作系统间的差别,所以我们只要一次编译,只要有.class文件,就能实现在不同平台上的运行。具体的过程如下:.class文件比类加载器加

2020-08-07 15:41:10 283

原创 Redis:总结

常用数据类型及应用场景:String:字符串内部编码:int:8个字节的长整型embstr:<=44字节的字符串raw:>44字节的字符串场景:缓存功能 计数器 共享用户SessionHash内部编码:外层是hashtable内层是ziplist和hashtable场景:缓存 库存 爆品list多个有序字符串的集合内部编码:3.0之前是ziplist和linkedlist3.2之后是quicklist场景:存储列表结构-粉丝列表,好友列表,文章

2020-08-06 16:25:56 207

原创 Spring源码阅读后的自我理解(给自己看的)

前言Spring本质是一个bean工厂(beanFactory),它能按照我们的要求生产各种各样的bean,但是在生产过程中需要解决bean之间的依赖关系,引入了DI(依赖注入)。它能帮我们把bean之间做到松耦合,同时在生产bean的各个阶段对bean做额外的处理,Spring将这些阶段通过接口暴露给我们,只要我们让bean实现对应的接口,那么Spring就会在bean生命周期对应的阶段调用对应接口中的方法来处理该bean。BeanFactory继承结构四层接口第一层接口:BeanFactor

2020-07-13 17:33:42 291

原创 Java动态代理:基于JDK的动态代理和基于CGLIB的动态代理

前言学习Spring aop的时候,一直都知道是基于动态代理实现的,那么到底什么是动态代理,又该如何自己实现一个动态代理呢,对此做一个记录。所谓动态代理,一般是为了给需要实现的方法添加预处理或者添加后续操作,但是不干预实现类的正常业务,把一些基本业务和主要的业务逻辑分离。基于JDK的动态代理两个核心的类Proxy、InvocationHandler(接口);基于JDK的动态代理是需要被代理的类实现某个接口。下面贴一下代码应用:首先要有一个接口和实现类,实现类就是需要被代理的类;业务很简单,就是打印

2020-06-28 10:12:53 183

原创 SpringCloud+Eureka+Seata:整合分布式事务

版本说明:seata-server:1.1.0SpringCloud:Greenwich.SR5spring-cloud-starter-alibaba-seata:2.2.0.RELEASEseata-spring-boot-starter:1.2.0理论知识:何为2PC:flink专栏有篇文章介绍过,因为flink端到端的Exactly Once就是依赖2PC实现的seata的设计思想Seata的设计目标其一是对业务无侵入,因此从业务无侵入的2PC方案着手,在传统2PC的基础

2020-06-23 20:18:59 1846

原创 Kafka整合Springboot的用法:配置文件和自定义的方式、以及遇到的问题

SpringBoot整合Kafka要主要版本依赖问题,首先声明下版本依赖关系,来自于官网,截图如下官网链接如下

2020-04-28 14:01:36 7314 3

原创 Mysql多数据源的配置:aop+注解的方法 动态切换

原理很简单,这里做个记录。首先yml配置文件(暂定只有两个数据源)spring: datasource: ds1: driver-class-name: com.mysql.jdbc.Driver url: jdbc:mysql://192.168.10.45:3306/user username: root password: ro...

2020-04-27 13:44:05 277

原创 Kafka入门教程

总结一下自己对于kafka的理解,可能说的没有那么官方,也不像别的博客都是抄来抄去,都是结合别人的看法和自己的理解写的一篇关于kafka入门的教程。基础概念broker(多个实例集群)、producer、consumertopic、broker、consumer都依赖zookeeper(08以后consumer就不依赖zk了)topic可以有多个分区 partition,分区就是个文件夹...

2020-04-27 10:59:45 233 1

原创 数据库锁相关:读锁、写锁、表锁、行锁

先说下数据库的常用存储引擎存储引擎InnoDB:支持主外键;行锁,只锁住某一行;不仅缓存索引还缓存真实数据,对内存要求高,内存大小对性能有影响;关注的是事务。MyISAM:不支持主外键;表锁,即使操作一条记录也会锁住整个表;只缓存索引,不缓存真实数;关注的是性能。锁分类:读锁(共享锁)、写锁(独占锁)读写锁的区别:读锁会阻塞写,但是不会阻塞读;而写锁则会把读和写都阻塞。表锁手动...

2020-04-26 18:19:16 815

原创 数据库隔离级别

读未提交 Read uncommitted读已提交 Read committed可重复度 Repeatable read序列化 Serializable 脏读 不可重复读 幻读Read uncommitted √ √ √Read committed × √ √Repeatable read × × √Seria...

2020-04-25 00:19:44 364

原创 Flink进阶(五):Flink中的反压问题

有段时间没写flink系列文章了,今天写一写Flink中的反压问题。何为反压?在短时间内的负载高峰导致系统接收的数据远大于它能处理数据的速率,如果反压问题不能解决,就会导致系统资源耗尽甚至系统崩溃。那么Flink自身是有反压机制的,它能够自己检测到哪些Operator被阻塞了,然后自适应地降低源头或上游数据的发送速率,从而维持整个系统的稳定。1.5之前Flink的反压机制将反压机制之前,先...

2020-04-24 22:03:47 2407

原创 Mysql:索引分析及优化

索引基本知识什么是索引索引是一种数据结构,可以提高查找效率。可以理解为:索引是一个排好序的快速查找数据结构。我们平时说的索引,没有特殊说明,都是B+Tree结构。索引实际上也是一张表,保存了主键和索引字段并指向实体表的记录。创建索引create index [索引名] on [表名] ([列名])删除索引drop index [索引名] on [表名]查看索引show in...

2020-04-24 15:52:12 465

原创 SparkStreaming写入Hive遇到的问题记录

需求:SparkStreaming实时写入Hive关于怎么写,网上一大堆,我简单点列下代码:SparkConf sparkConf = new SparkConf().setAppName("sparkStreaming-order").setMaster(SPARK_MASTER);sparkConf.set("spark.serializer", "org.apache.spark.se...

2020-04-11 18:39:13 1782

原创 Flink进阶(四):Flink中的Exactly Once

Flink内部Exactly Once通过checkpoint和状态来保证checkpoint流程:Flink在数据流中加入了一个叫barrier的东西(中文名栅栏),barrier在SourceTask处生成,一致到SinkTask,期间所有的Task只要碰到barrier就会触发自身进行快照。barrier的作用就是为了把数据区分开,barrier之前的数据是本次checkpoint之前...

2020-04-05 21:40:06 734

原创 Flink进阶(三):双流connect的用法

业务需求:根据id将两个流中的数据匹配在一起组合成新的流数据,默认两个流的最大延迟时间为60s超过60s还未匹配成功,意味着当前只有一个流来临,则任务流信息异常,需要将数据侧流输出思路:先将两个流keyBy(),再connect,然后调用CoProcessFunction函数,在里面处理流1和流2,再设置一个60s的定时器,如果60s内另一个流没来,则把达到的流侧输出直接上代码:// 流1...

2020-04-05 21:30:43 7225 8

原创 Flink进阶(二):使用 ParameterTool 读取配置

在Flink中会有很多配置,比如像算子的并行度配置、Kafka 数据源的配置(broker 地址、topic 名、group.id)、Checkpoint 是否开启、状态后端存储路径、数据库地址、用户名和密码等。这些配置肯定不能写死在代码中,需要在配在配置文件中。先指定环境可以先配置一个application.properties,里面配置哪个环境,比如ykc.profile=dev#yk...

2020-04-05 21:20:46 5615 4

原创 Flink进阶(一):Side Output 分流的使用

工作场景中会经常遇到对一个流按照不同维度做拆分,那么该如何做拆分呢?使用 Filter 分流filter算子分流,略…Split + Select 分流先在 split 算子里面定义 OutputSelector 的匿名内部构造类,然后重写 select 方法,根据数据的类型将不同的数据放到不同的 tag 里面,这样返回后的数据格式是 SplitStream,然后要使用这些数据的时候,可以...

2020-04-05 20:48:31 1107

原创 Flink基础(十二):Parallelism 和 Slot 详解

Parallelismparallelism 是并行的意思,在 Flink 里面代表每个算子的并行度,适当的提高并行度可以大大提高 Job 的执行效率,比如你的 Job 消费 Kafka 数据过慢,适当调大可能就消费正常了。parallelism的设置有三个地方:flink-conf.yaml 配置文件中parallelism.default: 1代码中设置全局的并行度 env...

2020-04-05 19:55:01 3069

原创 Flink基础(十一):Flink整合kafka的读写

文章将讲解一下用的最多的 Connector —— Kafka,带大家利用 Kafka Connector 读取 Kafka 数据,做一些计算操作后然后又通过 Kafka Connector 写入到 kafka 消息队列去。环境准备此处略过,准备kafka环境添加依赖,暂时用的是kafka0.10版本<dependency> <groupId>org.apa...

2020-04-02 22:53:31 1319

原创 Flink基础(十):Flink常用的Source和Sink

通过前面我们可以知道 Flink Job 的大致结构就是 Source ——> Transformation ——> Sink那么这个 Source 是什么意思呢?Data Source 介绍Data Source 是什么呢?就字面意思其实就可以知道:数据来源。Flink 中你可以使用 StreamExecutionEnvironment.addSource(sourceFun...

2020-04-02 22:29:10 4379 1

原创 Flink基础(九):Checkpoint的说明和用法

Checkpoint 在 Flink 中是一个非常重要的 Feature,Checkpoint 使 Flink 的状态具有良好的容错性,通过 Checkpoint 机制,Flink 可以对作业的状态和计算位置进行恢复。Checkpoint 介绍及使用Flink 的 Checkpoint 有以下先决条件:需要具有持久性且支持重放一定时间范围内数据的数据源。例如:Kafka、RabbitMQ ...

2020-04-02 22:13:50 5612

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除