1. 程式人生 > 其它 >大叔問題定位分享(47)kafka執行reassign後部分partition一直is still in progress

大叔問題定位分享(47)kafka執行reassign後部分partition一直is still in progress

快速檢查叢集的健康狀況

GET /_cat/health?v

green:每個索引的primary shard和replica shard都是active狀態的
yellow:每個索引的primary shard都是active狀態的,但是部分replica shard不是active狀態,處於不可用的狀態
red:不是所有索引的primary shard都是active狀態的,部分索引有資料丟失了

索引

直接put資料 PUT index/_doc/1,es會自動生成索引,並建立動態對映dynamic mapping。在生產上,我們需要自己手動建立索引和對映,為了更好地管理索引。就像資料庫的建表語句一樣。

快速檢視叢集中有哪些索引

GET /_cat/indices?v

建立索引:

PUT /demo_index?pretty

#詳細語法
PUT /index
{
    "settings": { ... any settings ... },
    "mappings": {
       "properties" : {
            "field1" : { "type" : "text" }
        }
    },
    #索引別名
    "aliases": {
    	"default_index": {}
  } 
}

查詢索引

GET /my_index/_mapping

GET /my_index/_setting

修改索引

PUT /my_index/_settings
{
    "index" : {
    	#修改副本數
        "number_of_replicas" : 2
    }
}

刪除索引:

DELETE /demo_index?pretty

#刪除指定索引
DELETE /my_index
#刪除多個索引
DELETE /index_one,index_two
#刪除多個索引
DELETE /index_*
#刪除全部索引
DELETE /_all

為了安全起見,防止惡意刪除索引,刪除時必須指定索引名:

elasticsearch.yml

action.destructive_requires_name: true

新增文件

語法 PUT /index/type/id

PUT /book/_doc/1
{
"name": "Bootstrap開發",
"description": "Bootstrap是由Twitter推出的一個前臺頁面開發css框架,是一個非常流行的開發框架,此框架集成了多種頁面效果。此開發框架包含了大量的CSS、JS程式程式碼,可以幫助開發者(尤其是不擅長css頁面開發的程式人員)輕鬆的實現一個css,不受瀏覽器限制的精美介面css效果。",
"studymodel": "201002",
"price":38.6,
"timestamp":"2019-08-25 19:11:35",
"pic":"group1/M00/00/00/wKhlQFs6RCeAY0pHAAJx5ZjNDEM428.jpg",
"tags": [ "bootstrap", "dev"]
}

新增文件自動生成ID:

長度為20個字元,URL安全,base64編碼,GUID,分散式生成不衝突

# 語法:POST /index/_doc
POST /test_index/_doc
{
  "test_field": "test1"
}

強制新增文件

為防止覆蓋原有資料,我們在新增時,設定為強制建立,不會覆蓋原有文件。如果原文件存在則返回失敗

#語法 PUT /index/ _doc/id/_create
PUT /test_index/_doc/1/_create
{
  "test_field": "test"
}

修改覆蓋文件

語法 PUT /index/type/id:替換操作是整體覆蓋,要帶上所有資訊。
實質:舊文件的內容不會立即刪除,只是標記為deleted。適當的時機,叢集會將這些文件刪除。

PUT /book/_doc/1
{
    "name": "Bootstrap開發教程1",
    "description": "Bootstrap是由Twitter推出的一個前臺頁面開發css框架",
    "studymodel": "201002",
    "price":38.6,
    "timestamp":"2019-08-25 19:11:35",
    "pic":"group1/M00/00/00/wKhlQFs6RCeAY0pHAAJx5ZjNDEM428.jpg",
    "tags": [ "bootstrap", "開發"]
}

修改更新文件

只修改變動欄位

#語法 POST /{index}/type/{id}/_update   或者  POST /{index}/_update/{id}
POST /book/_update/1/ 
{
  "doc": {
   "name": " Bootstrap開發教程高階"
  }
}

檢索文件

語法:GET /index/type/id

GET /book/_doc/1

檢索文件指定欄位

GET  /book/_doc/1?__source_includes=name,price    

mget 批量查詢:

GET /_mget
{
   "docs" : [
      {
         "_index" : "test_index",
         "_id" :    2
      },
      {
         "_index" : "test_index",
         "_id" :    3
      }
   ]
}
#同一索引下批量查詢:
GET /test_index/_mget
{
   "docs" : [
      {
         "_id" :    2
      },
      {
         "_id" :    3
      }
   ]
}

搜尋寫法

post /test_index/_doc/_search
{
    "query": {
        "ids" : {
            "values" : ["1", "7"]
        }
    }
}
GET /indexname/_search?q=2019        #0條結果             
GET /indexname/_search?q=2019-01-01           #1條結果
GET /indexname/_search?q=fieldname:2019-01-01     #1條結果
GET /indexname/_search?q=fieldname:2019          #0 條結果

批量增刪改 bulk

#語法
POST /_bulk
{"action": {"metadata"}}
{"data"}

如下操作,刪除5,新增14,修改2。

POST /_bulk
{ "delete": { "_index": "test_index",  "_id": "5" }} 
{ "create": { "_index": "test_index",  "_id": "14" }}
{ "test_field": "test14" }
{ "update": { "_index": "test_index",  "_id": "2"} }
{ "doc" : {"test_field" : "bulk test"} }

對映

查詢索引對映

GET /indexname/_mapping/

查詢所有索引的對映

GET /_mapping

建立對映

建立索引後,應該立即手動建立對映

PUT book/_mapping
{
	"properties": {
           "name": {
                  "type": "text"
            },
           "description": {
              "type": "text",
              #指定索引分詞器
              "analyzer":"english", 
              #定義搜尋時使用的分詞器
              "search_analyzer":"english" 
           },
           "pic":{
             "type":"text",
             #指定是否索引,預設為index=true,即要進行索引,只有進行索引才可以從索引庫搜尋到。
             #但是也有一些內容不需要索引,比如:商品圖片地址只被用來展示圖片,不進行搜尋圖片,此時可以將index設定為false。
             "index":false   
           },
           "studymodel":{
             "type":"text"
           }
    }
}

keyword關鍵字欄位

目前已經取代了"index": false。上邊介紹的text文字欄位在對映時要設定分詞器,keyword欄位為關鍵字欄位,通常搜尋keyword是按照整體搜尋,所以建立keyword欄位的索引時是不進行分詞的,比如:郵政編碼、手機號碼、身份證等。keyword欄位通常用於過慮、排序、聚合等。

修改對映

只能建立index時手動建立mapping,或者新增field mapping,但是不能update field mapping。

因為已有資料按照對映早已分詞儲存好。如果修改,那這些存量資料怎麼辦。

刪除對映

通過刪除索引來刪除對映。

模板

建立模板

PUT _template/hhlink_consumer_template
{
 "order": 0,
 "index_patterns": [
 	 #指定索引匹配規則
      "hhlink-consumer-log*"
 ],
 "settings" : {
      "index" : {
        "mapping" : {
          #設定單個索引最大欄位數2000
          "total_fields" : {
            "limit" : "2000"
          }
        },
        #分片數
        "number_of_shards" : "3",
        #副本數
        "number_of_replicas" : "0"
      }
    },
#對映
"mappings" : {
      "fluentd-aggregator" : {
        "properties" : {
          "@timestamp" : {
            "type" : "date"
          },
          "AnalyzedData" : {
            "properties" : {
              "addr" : {
                "type" : "text",
                "fields" : {
                  "keyword" : {
                    "type" : "keyword",
                    "ignore_above" : 256
                  }
                }
              }
            }
          },
          "errMsg" : {
            "type" : "text",
            "fields" : {
              "keyword" : {
                "type" : "keyword",
                "ignore_above" : 256
              }
            }
          }
        }
      }
    }
 }

檢視模板

GET /_template/模板名稱
GET /_template/模板名稱一部分*
GET /_template/模板名稱1,模板名稱2
#檢視全部模板
GET /_template

刪除模板

DELETE /_template/模板名稱

判斷模板是否存在

HEAD /_template/模板名稱

kibana

Kibana---Management--- Create index pattern--- Index pattern填索引名,下一步,再點選discover就可看到資料。

bug

es入庫失敗,報錯Limit of total fields [1000] in index [issue] has been exceeded

es預設索引欄位數限制為1000,超出則入庫失敗,可手動修改限制:

PUT my_index/_settings
{
"index.mapping.total_fields.limit": 2000
}