原创 【Elasticsearch源碼】節點的啓動和關閉流程分析

1 Node的啓動流程 節點的啓動整體流程如下所示: 2 啓動過程分析 啓動入口: 通過啓動腳本bin/elasticsearch啓動ES,在distribution模塊中的/src/bin目錄下面,腳本先載入了jvm配置文件j

原创 【Java小知識】JVM內存模型的理解和總結

前言 JVM內存模型幾乎是面試必備,個人認爲也是對於如何更深入的理解Java程序的運行,包括實際應用場景中Java內存問題的處理都有極大的幫助。 運行時的數據區域劃分 JVM會在執行Java程序的過程中把它所管理的內存劃分爲若干

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

1 CCR的基本概念 什麼是CCR? CCR( cross-cluster replication):跨集羣複製是ES 6.5發佈的一個新的特性:可以將兩個集羣中的數據進行遠程複製。 集羣複製類似於數據訂閱的方式,一個集羣的數

原创 【Java小知識】按值傳遞還是引用傳遞?

前言 之前一直有疑惑,Java到底是按值傳遞還是按引用傳遞,大家都知道基本數據類型是按值進行傳遞,那麼對象是怎麼傳遞的呢? 概念 我們先下簡單過一下,這兩個概念: 按值調用(call by value):表示方法接收的是調用者提

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

前言 String是我們接觸和使用最多的,也是最基礎的Java對象,相信大家都不陌生,我們先來看兩個小問題: 1.new String(“abc”)創建了幾個對象? 2.String s = “abc” ; String s1

原创 【Elasticsearch】原理-Elasticsearch數據存儲結構與寫入流程

1 前言 由於Elasticsearch使用Lucene來處理shard級別的索引和查詢,因此數據目錄中的文件由Elasticsearch和Lucene編寫。 Lucene負責編寫和維護Lucene索引文件,而Elastics

原创 【Elasticsearch】源碼-Elasticsearch源碼基礎模塊

ES源碼的主要基礎模塊: Cluster Cluster模塊主要是主節點執行集羣管理的封裝實現,管理集羣狀態,維護集羣層面的配置信息等。主要有: 管理集羣狀態,將新生成的集羣狀態發佈到集羣的所有節點 調用allocation模

原创 【Elasticsearch】優秀實踐-Elasticsearch查詢調優

前言 一個系統查詢慢往往是由多種因素造成的,在處理集羣查詢慢的問題上,先將問題分解。 1) 需要觀察是系統哪種資源受限,例如內存、CPU或磁盤IO等,是否存在硬件瓶頸; 2) 要確定查詢語句是否符合業務場景,是否存在查詢語句

原创 【Elasticsearch】優秀實踐-你的ES爲什麼寫的慢了?

前言 經常會有人吐槽,Elasticsearch爲什麼寫着寫着突然就慢了? 筆者總結了常見的一些導致寫入慢的場景,以供大家排查。 話不多說,進入正題… Elasticsearch寫入慢問題排查思路 Elasticsearch

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

【Java小知識】Java程序的初始化 Java在實例化一個對象之前,必須先對所在類的所有成員變量進行初始化,成員變量初始化完成之後,纔會調用構造函數創建對象。 初始化順序 那麼具體的初始化順序是神馬樣呢,下面通過一個簡單的代碼

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

ArrayList簡介 ArrayList實現了AbstractList類和List接口,是基於數組實現的,是一個動態數組,其大小可以自動增長。所以它具備了數組的優勢,可以通過元素索引快速查詢,且是有序存儲。 ArrayList不

原创 【Elasticsearch源碼】查詢源碼分析(二)

接上一篇:【Elasticsearch源碼】查詢源碼分析(一)。 上篇講到請求通過遍歷每個shard發送請求,執行executePhaseOnShard方法,轉發請求的同時定義了一個Listener,用於監聽處理結果。

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

前言 前面我們講了關於JVM內存模型中,Java堆是內存中最大的一塊區域,幾乎存放着所有的對象實例。 可參考:JVM內存模型 關於垃圾回收時我們在思考什麼: 哪些內存需要回收? 什麼時候回收? 如何回收? 判定對象是否存活 在進行

原创 【Java小知識】switch支持String類型的背後原理?

前言 大家都知道,從JDK 1.7開始,switch表達式開始支持String字符串,那麼它是怎麼實現的呢? 今天來一探究竟 分析 首先寫一個小demo,如下所示,一個簡單的switc語句: public class te

原创 【Elasticsearch源碼】寫入源碼分析(四)

接上一篇:【Elasticsearch源碼】寫入源碼分析(三)。 前面講到了一個checkpoint(檢查點的概念),在每次寫入數據過程都需要更新LocalCheckpoint(本地檢查點)和GlobalCheckpoint(