自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

wudingmei1023

闻道有先后,术业有专攻,如是而已

  • 博客(33)
  • 收藏
  • 关注

原创 【Elasticsearch源码】查询源码分析(二)

接上一篇:【Elasticsearch源码】查询源码分析(一)。上篇讲到请求通过遍历每个shard发送请求,执行executePhaseOnShard方法,转发请求的同时定义了一个Listener,用于监听处理结果。 private void performPhaseOnShard(final int shardIndex, final SearchShardIterator sha...

2020-01-15 10:17:55 9766

原创 【Elasticsearch源码】查询源码分析(一)

1 前言前言分析过ES的写入流程源码,详情见【Elasticsearch源码】写入源码分析。Elasticsearch(ES)的查询接口具有分布式的数据检索、聚合分析能力,数据检索能力用于支持全文检索、日志分析等场景,如Github平台上的代码搜索、基于ES的各类日志分析服务等;聚合分析能力用于支持指标分析、APM等场景,如监控场景、应用的日活/留存分析等。本文基于6.7.1版本,主要分...

2020-01-14 19:23:04 11545

原创 【Elasticsearch源码】写入源码分析(四)

接上一篇:【Elasticsearch源码】写入源码分析(三)。前面讲到了一个checkpoint(检查点的概念),在每次写入数据过程都需要更新LocalCheckpoint(本地检查点)和GlobalCheckpoint(全局检查点)。3.3 更新checkpoint了解checkpoint之前,先来看下Primary Terms和Sequence Numbers:Primary...

2020-01-13 16:30:16 15430 1

原创 【Elasticsearch源码】写入源码分析(三)

接上一篇:【Elasticsearch源码】写入源码分析(二)。3.2.5 写主分片节点流程代码入口:TransportReplicationAction.PrimaryOperationTransportHandler#messageReceived,然后进入AsyncPrimaryAction#doRun方法。检查请求: 1.当前是否为主分片;2.allocationId是否是预期值;...

2020-01-11 17:56:24 9554 2

原创 【Elasticsearch源码】写入源码分析(二)

接上一篇:【Elasticsearch源码】写入源码分析(一)如果需要自动创建索引,则需要遍历bulk的所有index,然后检查index是否需要自动创建,对于不存在的index,则会加入到自动创建的集合中,然后会调用createIndex方法创建index。index的创建由master来把控,master会根据分片分配和均衡的算法来决定在哪些data node上创建index对应的shard...

2020-01-11 17:14:46 11725

原创 【Elasticsearch源码】写入源码分析(一)

1 前言Elasticsearch(ES)是一个基于Lucene的分布式存储和搜索分析系统,本文希望从源码的角度分析ES在保证数据的可靠性、实时性和一致性前提下,其写入的具体流程。写入也是整个ES系统里面,最主要的流程之一,便于更好的理解ES的内部原理和逻辑,关于ES数据存储结构请参考:【Elasticsearch】原理-Elasticsearch数据存储结构与写入流程。2 写入基本流程...

2020-01-11 16:33:51 12457 1

原创 【Java集合源码分析】关于Java集合你需要知道的是什么

前言Java集合估计是我们开发过程中,用的最多的API了,它位于java.util包下,同时支持多线程的集合类位于java.util.concurrent包下。我们都知道各种数据结构最底层的组成都是数组或者链表,其实各种集合类也是基于最基本的数据结构进行封装,便于各种场景直接使用。我们可以把集合想象成一个容器,它可以存储各种对象,扩展和封装了数组和链表。有了这些认识,是不是集合也变了...

2020-01-10 22:48:38 10641

原创 【Elasticsearch】优秀实践-你的ES怎么查的慢了?

前言经常会有人吐槽,Elasticsearch为什么查着查着突然就慢了?笔者总结了常见的一些导致查询慢的场景,供大家排查。go go goElasticsearch查询慢问题排查思路Elasticsearch的查询慢的问题往往是由多种因素造成的,同时我们也需要遵循Elasticsearch的查询准则:ES适合top N的查询,不适合大数据量返回的查询。场景1 内存参数配置不合...

2020-01-08 19:53:33 5544 2

原创 【Elasticsearch】优秀实践-你的ES为什么写的慢了?

前言经常会有人吐槽,Elasticsearch为什么写着写着突然就慢了?笔者总结了常见的一些导致写入慢的场景,已供大家排查。话不多说,进入正题…Elasticsearch写入慢问题排查思路Elasticsearch的写入场景相对比较简单,绝大部分场景下我们都是使用bulk API进行写入操作,列举了下面一些场景可能会导致写入慢的问题。场景1 内存参数配置不合理。是否给El...

2020-01-08 19:19:59 12691 1

原创 【Java小知识】垃圾回收GC你不得不知道的事情

前言前面我们讲了关于JVM内存模型中,Java堆是内存中最大的一块区域,几乎存放着所有的对象实例。可参考:JVM内存模型关于垃圾回收时我们在思考什么:哪些内存需要回收?什么时候回收?如何回收?判定对象是否存活在进行垃圾回收之前,当然第一件事就是确定这些对象之中哪些还“存活”着,哪些已经“死去”,死去意味着不可能再被使用的对象。那么Java是通过什么来判断对象是否存活呢?引...

2020-01-08 17:34:06 6997

原创 【Java全栈知识体系】

Java全栈知识体系必看

2021-03-04 11:42:22 2583 2

原创 【Elasticsearch源码】节点的启动和关闭流程分析

1 Node的启动流程节点的启动整体流程如下所示:2 启动过程分析启动入口: 通过启动脚本bin/elasticsearch启动ES,在distribution模块中的/src/bin目录下面,脚本先载入了jvm配置文件jvm.options。最后启动org.elasticsearch.bootstrap.Elasticsearch这个主类中的main方法。 exec \ #执...

2020-01-22 17:31:02 9092

原创 【Elasticsearch源码】CCR源码分析(二)

接上一篇:【Elasticsearch源码】CCR源码分析(一)。sendShardChangesRequest方法最终进入到ShardChangesAction.TransportAction#shardOperation,跟据上面的read request,从Translog中获取该shard的seq_no范围内的所有Operation,返回最新的shard需要的Operation。 ...

2020-01-21 19:54:15 8662

原创 【Elasticsearch源码】CCR源码分析(一)

1 CCR的基本概念什么是CCR?CCR( cross-cluster replication):跨集群复制是ES 6.5发布的一个新的特性:可以将两个集群中的数据进行远程复制。集群复制类似于数据订阅的方式,一个集群的数据可以被多个集群订阅,也就是可以被复制到多个集群上面去。CCR 有两个角色,一个是 Leader,表示数据的源头,另外一个Follower,表示数据的订阅方,得到的是数...

2020-01-21 19:53:25 12251

原创 【Netty简单入门】-为什么Netty人见人爱?

前言最近在看ES源码,Netty贯穿在整个ES之中,想要看懂和更好的理解ES源码,必须首先对Netty有一定的认识和了解,所以简单总结了Netty的一些基本架构和认知, 后续再总结更加深入的Netty知识。什么是Netty,为什么使用NettyNetty是一个高性能、异步事件驱动的NIO框架,它提供了对TCP、UDP和文件传输的支持。作为一个异步NIO框架,Netty的所有IO操作都是异步...

2020-01-16 20:40:02 8393

原创 【Elasticsearch源码】-7.x源码编译

要学习源码之前,肯定要进行Elasticsearch源码的编译:前期准备首先要下载源码:https://github.com/elastic/elasticsearch/releases,以最新的7.1版本为例,下载源码包:安装JDK和Gradle:JDK需要jdk12以上,Gradle5.2.1,我安装了JDK12和Gradle 5.2.1:JDK和Gradle安装方法自行百度...

2020-01-15 15:15:27 6431 6

原创 【Java集合】LinkedList源码解析

LinkedList简介LinkedList是基于双向循环链表实现的,除了可以当做链表来操作外,它还可以当做栈、队列和双端队列来使用。当然同时也具备了链表的特性:插入和删除元素效率高。LinkedList同样也是非线程安全的,只在单线程下适合使用。同时实现了Serializable接口,因此支持序列化,能够通过序列化传输;实现了Cloneable接口,能被克隆。源码分析核心实现就是通过...

2020-01-13 11:22:49 2796

原创 【Java集合】ArrayList源码解析

ArrayList简介ArrayList实现了AbstractList类和List接口,是基于数组实现的,是一个动态数组,其大小可以自动增长。所以它具备了数组的优势,可以通过元素索引快速查询,且是有序存储。ArrayList不是线程安全的,多线程下可以考虑使用concurrent包下面的CopyOnWriteArrayList类。同时实现了Serializable接口,因此支持序列化,能够通...

2020-01-12 22:03:07 2797

原创 【Java小知识】switch支持String类型的背后原理?

前言大家都知道,从JDK 1.7开始,switch表达式开始支持String字符串,那么它是怎么实现的呢?今天来一探究竟分析首先写一个小demo,如下所示,一个简单的switc语句:public class test { public static void main(String[] args) { test("a"); } publi...

2020-01-10 10:50:06 1822

原创 【Elasticsearch】优秀实践-ES+Hbase的实现

前言因为之前在项目上,需要用到ES+Hbase方案,最后经过各种测试和验证,最终项目完成上线。因为在实际的过程遇到不少的问题,和理论还是有一定的差距。纸上得来终觉浅,绝知此事要躬行。----古人诚不欺我基本原理很简单,将Elasticsearch的DOC ID和Hbase的rowkey相关联:将源数据根据业务特点划分为索引数据和原始数据:索引数据:指需要被检索的字段,存储在El...

2020-01-09 19:53:55 11051

原创 【Elasticsearch】源码-Elasticsearch源码基础模块

ES源码的主要基础模块:ClusterCluster模块主要是主节点执行集群管理的封装实现,管理集群状态,维护集群层面的配置信息等。主要有:管理集群状态,将新生成的集群状态发布到集群的所有节点调用allocation模块执行分片分配,决策那些分片应该分配到哪个节点在集群各节点中直接迁移分片,保持数据平衡Allocation封装了分片分配相关的功能和策略,包括主分片的分配和副本...

2020-01-08 20:26:06 1779

原创 【Elasticsearch】原理-Elasticsearch数据存储结构与写入流程

1 前言由于Elasticsearch使用Lucene来处理shard级别的索引和查询,因此数据目录中的文件由Elasticsearch和Lucene编写。Lucene负责编写和维护Lucene索引文件,而Elasticsearch在Lucene之上编写与功能相关的元数据,例如字段映射,索引设置和其他集群元数据,用户和支持功能由Elasticsearch提供。2 ES数据2.1 Nod...

2020-01-08 20:19:05 11252

原创 【Elasticsearch】优秀实践-Elasticsearch查询调优

前言一个系统查询慢往往是由多种因素造成的,在处理集群查询慢的问题上,先将问题分解。1) 需要观察是系统哪种资源受限,例如内存、CPU或磁盘IO等,是否存在硬件瓶颈;2) 要确定查询语句是否符合业务场景,是否存在查询语句优化空间;3) 最后判断数据结构是否合理,不合理的数据设计对查询的响应影响很大。使用更快的硬件查询性能大部分场景下更多的在于IO能力,很多时候查询速度受限于磁...

2020-01-08 20:05:25 8737

原创 【Elasticsearch】优秀实践-Elasticsearch写入调优

基本优化手段Elasticsearch默认的设置和参数配置下,是综合考虑了数据的可靠性、搜索实时性、写入速度等因素。但在某些场景中,业务对数据的可靠性和搜索实时性要求并不高,反而对写入速度要求高,可以通过调整一些策略,优化写入速度。综合来说,提升写入速度可以从以下几个方面入手:1) 加大index refresh间隔,除了降低IO,更重要的是降低了segment merge的频率;2) ...

2020-01-08 19:29:43 8832

原创 【Elasticsearch】初篇-带你认识Elasticsearch

从2010年开始,Elasticsearch已经经历了近10年的发展,特别是近几年Elasticsearch愈发火热,成了各个大厂必不可少的搜索引擎,加上其成熟的Elastic Stack生态体系,发展迅猛。Elasticsearch 官方地址:各类完全的技术文档等你来学习版本更新速度让人应接不暇,几乎每一周半个月就出一个版本,而且有号称github上最优美的开源代码,所以不管从什么角度都有不...

2020-01-07 20:39:10 1666

原创 【Java小知识】JVM内存模型的理解和总结

前言JVM内存模型几乎是面试必备,个人认为也是对于如何更深入的理解Java程序的运行,包括实际应用场景中Java内存问题的处理都有极大的帮助。运行时的数据区域划分JVM会在执行Java程序的过程中把它所管理的内存划分为若干个不同的数据区域,见下图:程序计数器程序计数器是一块较小的内存空间,它可以看作是当前线程所执行的字节码的行号指示器。如果执行的是一个Java方法,用于记录正...

2020-01-07 19:49:58 6799

原创 【Java小知识】按值传递还是引用传递?

前言之前一直有疑惑,Java到底是按值传递还是按引用传递,大家都知道基本数据类型是按值进行传递,那么对象是怎么传递的呢?概念我们先下简单过一下,这两个概念:按值调用(call by value):表示方法接收的是调用者提供的值。按引用调用(call by reference):表示方法接收的是调用者提供的变量地址。按值调用,也就是说方法得到的所有参数值的一个拷贝,特别是,方法不...

2020-01-07 12:02:40 1556

原创 【Java小知识】try-catch-finally执行顺序

前言try-catch-finally的执行顺序,你知唔知,如果包含return呢?try-catch-finally执行顺序正常的顺序我们都清楚,先执行try里面的语句,如果跑出异常再执行catch里面的语句,最终执行finally语句。如果try-catch-finally里面包含return呢?实例一: public static int test() { ...

2020-01-06 10:37:01 1506

原创 【Java小知识】StringBuilder为什么线程不安全?

前言我们都知道,String是不可变的,所以在字符串操作比较频繁的时候使用StringBuilder和StringBuffer运行效率更高。StringBuilder和StringBuffer的区别在于是StringBuilder是线程不安全的,而StringBuffer是线程安全的。为什么呢,今天通过源码来一探究竟…小试验写一个小demo,开启10个线程,拼接字符串,并最终输出字...

2020-01-04 18:53:24 2514

原创 【Java小知识】字符串String的理解

前言String是我们接触和使用最多的,也是最基础的Java对象,相信大家都不陌生,我们先来看两个小问题:1.new String(“abc”)创建了几个对象?2.String s = “abc” ; String s1 = “ab” + “c”; System.out.println(s==s1);输出结果是什么?所以答案是什么呢,见下分晓字符串创建和存储的机制字符串的初始化有两...

2020-01-04 17:20:37 1540

原创 【Java小知识】final关键字的理解

面试的过程中,可能会被问到一些小问题,如:请说说你对final关键字的理解?从细节处经常能反应一个人的基础和对问题是否有刨根究底的精神。final关键字的作用众所周知:被final修饰的类不可以被继承;被final修饰的方法不可以被重写;被final修饰的变量不可以被改变;前2点都很容易理解,第3点呢?被final修饰的变量不可以被改变,究竟是变量的引用不能被改变,还是变量的...

2020-01-03 20:36:10 1554

原创 【Java小知识】Java程序的初始化

类初始化顺序:静态变量大于非静态变量,父类大于子类;全局变量初始化可以不赋值,局部变量初始化必须赋值。

2020-01-02 23:39:58 1708

原创 【初篇】随想

一直以来我都不太习惯去记录一下东西(自持记忆好,哈哈哈)但渐渐的发现,及时的总结和输出,对整个技术体系和个人成长更有方向性和目标性所以打算开始输出一些平时学习和工作的总结希望不仅可以进一步巩固自我也可以帮助到一些需要的人任何事情坚持都是最重要的我一直不敢写的原因在于我对自己的坚持和耐心保持一定的怀疑(哈哈哈哈)对自己的目标:争取每月最少2-3篇和大数据相关的总结文档...

2019-03-26 11:01:49 481 1

空空如也

空空如也

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

TA关注的人

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