成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

Kafka運維 | 你真的懂數據遷移嗎?

運維 系統(tǒng)運維 Kafka
在進行分區(qū)副本重分配之前,最好是用下面方式獲取一個合理的分配文件; 編寫move-json-file.json文件; 這個文件就是告知想對哪些Topic進行重新分配的計算。

 [[420468]]

本篇文章講解以下內容

【kafka運維】副本擴縮容、數據遷移、副本重分配、副本跨路徑遷移

腳本參數

參數 描述 例子  
--zookeeper 連接zk --zookeeper localhost:2181, localhost:2182  
--topics-to-move-json-file 指定json文件,文件內容為topic配置

--topics-to-move-json-file config/move-json-file.json Json文件格式如下:

 
--generate 嘗試給出副本重分配的策略,該命令并不實際執(zhí)行    
--broker-list 指定具體的BrokerList,用于嘗試給出分配策略,與--generate搭配使用 --broker-list 0,1,2,3  
--reassignment-json-file 指定要重分配的json文件,與--execute搭配使用

json文件格式如下例如:

 
--execute 開始執(zhí)行重分配任務,與--reassignment-json-file搭配使用    
--verify 驗證任務是否執(zhí)行成功,當有使用--throttle限流的話,該命令還會移除限流;該命令很重要,不移除限流對正常的副本之間同步會有影響    
--throttle 遷移過程Broker之間現(xiàn)在流程傳輸的速率,單位 bytes/sec -- throttle 500000  
--replica-alter-log-dirs-throttle broker內部副本跨路徑遷移數據流量限制功能,限制數據拷貝從一個目錄到另外一個目錄帶寬上限 單位 bytes/sec --replica-alter-log-dirs-throttle 100000  
--disable-rack-aware 關閉機架感知能力,在分配的時候就不參考機架的信息    
--bootstrap-server 如果是副本跨路徑遷移必須有此參數    

 1. 腳本的使用介紹

該腳本是kafka提供用來重新分配分區(qū)的腳本工具;

1.1 生成推薦配置腳本

關鍵參數--generate

在進行分區(qū)副本重分配之前,最好是用下面方式獲取一個合理的分配文件; 編寫move-json-file.json文件; 這個文件就是告知想對哪些Topic進行重新分配的計算

  1.   "topics": [ 
  2.     {"topic""test_create_topic1"
  3.   ], 
  4.   "version": 1 

然后執(zhí)行下面的腳本,--broker-list "0,1,2,3" 這個參數是你想要分配的Brokers;

  1. sh bin/kafka-reassign-partitions.sh --zookeeper xxx:2181 --topics-to-move-json-file config/move-json-file.json --broker-list "0,1,2,3" --generate 

執(zhí)行完畢之后會打印

  1. Current partition replica assignment//當前副本分配方式 
  2. {"version":1,"partitions":[{"topic":"test_create_topic1","partition":2,"replicas":[1],"log_dirs":["any"]},{"topic":"test_create_topic1","partition":1,"replicas":[3],"log_dirs":["any"]},{"topic":"test_create_topic1","partition":0,"replicas":[2],"log_dirs":["any"]}]} 
  3.  
  4. Proposed partition reassignment configuration//期望的重新分配方式 
  5. {"version":1,"partitions":[{"topic":"test_create_topic1","partition":2,"replicas":[2],"log_dirs":["any"]},{"topic":"test_create_topic1","partition":1,"replicas":[1],"log_dirs":["any"]},{"topic":"test_create_topic1","partition":0,"replicas":[0],"log_dirs":["any"]}]} 

需求注意的是,此時分區(qū)移動尚未開始,它只是告訴你當前的分配和建議。保存當前分配,以防你想要回滾它

1.2. 執(zhí)行Json文件

關鍵參數--execute 將上面得到期望的重新分配方式文件保存在一個json文件里面 reassignment-json-file.json

  1. {"version":1,"partitions":[{"topic":"test_create_topic1","partition":2,"replicas":[2],"log_dirs":["any"]},{"topic":"test_create_topic1","partition":1,"replicas":[1],"log_dirs":["any"]},{"topic":"test_create_topic1","partition":0,"replicas":[0],"log_dirs":["any"]}]} 

然后執(zhí)行

  1. sh bin/kafka-reassign-partitions.sh --zookeeper xxxxx:2181 --reassignment-json-file config/reassignment-json-file.json --execute 

遷移過程注意流量陡增對集群的影響 Kafka提供一個broker之間復制傳輸的流量限制,限制了副本從機器到另一臺機器的帶寬上限,當重新平衡集群,引導新broker,添加或移除broker時候,這是很有用的。因為它限制了這些密集型的數據操作從而保障了對用戶的影響、 例如我們上面的遷移操作加一個限流選項-- throttle 50000000

  1. > sh bin/kafka-reassign-partitions.sh --zookeeper xxxxx:2181 --reassignment-json-file config/reassignment-json-file.json --execute -- throttle 50000000 

在后面加上一個—throttle 50000000 參數, 那么執(zhí)行移動分區(qū)的時候,會被限制流量在50000000 B/s 加上參數后你可以看到

  1. The throttle limit was set to 50000000 B/s 
  2. Successfully started reassignment of partitions. 

需要注意的是,如果你遷移的時候包含 副本跨路徑遷移(同一個Broker多個路徑)那么這個限流措施不會生效,你需要再加上|--replica-alter-log-dirs-throttle 這個限流參數,它限制的是同一個Broker不同路徑直接遷移的限流;

如果你想在重新平衡期間修改限制,增加吞吐量,以便完成的更快。你可以重新運行execute命令,用相同的reassignment-json-file

1.3. 驗證

關鍵參數--verify 該選項用于檢查分區(qū)重新分配的狀態(tài),同時—throttle流量限制也會被移除掉; 否則可能會導致定期復制操作的流量也受到限制。

sh bin/kafka-reassign-partitions.sh --zookeeper xxxx:2181 --reassignment-json-file config/reassignment-json-file.json --verify圖片注意: 當你輸入的BrokerId不存在時,該副本的操作會失敗,但是不會影響其他的;例如圖片

2. 副本擴縮

kafka并沒有提供一個專門的腳本來支持副本的擴縮, 不像kafka-topic.sh腳本一樣,是可以擴分區(qū)的; 想要對副本進行擴縮,只能是曲線救國了; 利用kafka-reassign-partitions.sh來重新分配副本

2.1 副本擴容

假設我們當前的情況是 3分區(qū)1副本,為了提供可用性,我想把副本數升到2;

2.1.1 計算副本分配方式

我們用步驟1.1的 --generate 獲取一下當前的分配情況,得到如下json

  1.     "version": 1, 
  2.     "partitions": [{ 
  3.         "topic""test_create_topic1"
  4.         "partition": 2, 
  5.         "replicas": [2], 
  6.         "log_dirs": ["any"
  7.     }, { 
  8.         "topic""test_create_topic1"
  9.         "partition": 1, 
  10.         "replicas": [1], 
  11.         "log_dirs": ["any"
  12.     }, { 
  13.         "topic""test_create_topic1"
  14.         "partition": 0, 
  15.         "replicas": [0], 
  16.         "log_dirs": ["any"
  17.     }] 

我們想把所有分區(qū)的副本都變成2,那我們只需修改"replicas": []里面的值了,這里面是Broker列表,排在第一個的是Leader; 所以我們根據自己想要的分配規(guī)則修改一下json文件就變成如下

  1.     "version": 1, 
  2.     "partitions": [{ 
  3.         "topic""test_create_topic1"
  4.         "partition": 2, 
  5.         "replicas": [2,0], 
  6.         "log_dirs": ["any","any"
  7.     }, { 
  8.         "topic""test_create_topic1"
  9.         "partition": 1, 
  10.         "replicas": [1,2], 
  11.         "log_dirs": ["any","any"
  12.     }, { 
  13.         "topic""test_create_topic1"
  14.         "partition": 0, 
  15.         "replicas": [0,1], 
  16.         "log_dirs": ["any","any"
  17.     }] 

注意log_dirs里面的數量要和replicas數量匹配;或者直接把log_dirs選項刪除掉; 這個log_dirs是副本跨路徑遷移時候的絕對路徑

2.1.2 執(zhí)行--execute

如果你想在重新平衡期間修改限制,增加吞吐量,以便完成的更快。你可以重新運行execute命令,用相同的reassignment-json-file:

2.1.2 驗證--verify

圖片完事之后,副本數量就增加了;

2.2 副本縮容

副本縮容跟擴容是一個意思; 當副本分配少于之前的數量時候,多出來的副本會被刪除; 比如剛剛我新增了一個副本,想重新恢復到一個副本

執(zhí)行下面的json文件

  1.   "version": 1, 
  2.   "partitions": [{ 
  3.     "topic""test_create_topic1"
  4.     "partition": 2, 
  5.     "replicas": [2], 
  6.     "log_dirs": ["any"
  7.   }, { 
  8.     "topic""test_create_topic1"
  9.     "partition": 1, 
  10.     "replicas": [1], 
  11.     "log_dirs": ["any"
  12.   }, { 
  13.     "topic""test_create_topic1"
  14.     "partition": 0, 
  15.     "replicas": [0], 
  16.     "log_dirs": ["any"
  17.   }] 

執(zhí)行之后可以看到其他的副本就被標記為刪除了; 一會就會被清理掉

用這樣一種方式我們雖然是實現(xiàn)了副本的擴縮容, 但是副本的分配需要我們自己來把控好, 要做到負載均衡等等; 那肯定是沒有kafka自動幫我們分配比較合理一點; 那么我們有什么好的方法來幫我們給出一個合理分配的Json文件嗎?PS:

我們之前已經分析過【kafka源碼】創(chuàng)建Topic的時候是如何分區(qū)和副本的分配規(guī)則 那么我們把這樣一個分配過程也用同樣的規(guī)則來分配不就Ok了嗎?--generate本質上也是調用了這個方法,AdminUtils.assignReplicasToBrokers(brokerMetadatas, assignment.size, replicas.size)

具體的實現(xiàn)操作請看 【kafka思考】最小成本的擴縮容副本設計方案

自己寫一個工程來實現(xiàn)類似的方法,如果覺得很麻煩,可以直接使用 LogIKM 的新增副本功能直接幫你做了這個事情;(未來會實現(xiàn))

3. 分區(qū)擴容

kafka的分區(qū)擴容是 kafka-topis.sh腳本實現(xiàn)的;不支持縮容 分區(qū)擴容請看 【kafka源碼】TopicCommand之alter源碼解析(分區(qū)擴容)

4. 分區(qū)遷移

分區(qū)遷移跟上面同理, 請看 1.1,1.2,1.3 部分;

5. 副本跨路徑遷移

為什么線上Kafka機器各個磁盤間的占用不均勻,經常出現(xiàn)“一邊倒”的情形?這是因為Kafka只保證分區(qū)數量在各個磁盤上均勻分布,但它無法知曉每個分區(qū)實際占用空間,故很有可能出現(xiàn)某些分區(qū)消息數量巨大導致占用大量磁盤空間的情況。在1.1版本之前,用戶對此毫無辦法,因為1.1之前Kafka只支持分區(qū)數據在不同broker間的重分配,而無法做到在同一個broker下的不同磁盤間做重分配。1.1版本正式支持副本在不同路徑間的遷移

怎么在一臺Broker上用多個路徑存放分區(qū)呢?

只需要在配置上接多個文件夾就行了

  1. ############################# Log Basics ############################# 
  2.  
  3. # A comma separated list of directories under which to store log files 
  4. log.dirs=kafka-logs-5,kafka-logs-6,kafka-logs-7,kafka-logs-8 

注意同一個Broker上不同路徑只會存放不同的分區(qū),而不會將副本存放在同一個Broker; 不然那副本就沒有意義了(容災)

怎么針對跨路徑遷移呢?

遷移的json文件有一個參數是log_dirs; 默認請求不傳的話 它是"log_dirs": ["any"] (這個數組的數量要跟副本保持一致) 但是你想實現(xiàn)跨路徑遷移,只需要在這里填入絕對路徑就行了,例如下面

遷移的json文件示例

  1.   "version": 1, 
  2.   "partitions": [{ 
  3.     "topic""test_create_topic4"
  4.     "partition": 2, 
  5.     "replicas": [0], 
  6.     "log_dirs": ["/Users/xxxxx/work/IdeaPj/source/kafka/kafka-logs-5"
  7.   }, { 
  8.     "topic""test_create_topic4"
  9.     "partition": 1, 
  10.     "replicas": [0], 
  11.     "log_dirs": ["/Users/xxxxx/work/IdeaPj/source/kafka/kafka-logs-6"
  12.   }] 

然后執(zhí)行腳本

  1. sh bin/kafka-reassign-partitions.sh --zookeeper xxxxx --reassignment-json-file config/reassignment-json-file.json --execute --bootstrap-server 
  2. xxxxx:9092 --replica-alter-log-dirs-throttle 10000 

注意 --bootstrap-server 在跨路徑遷移的情況下,必須傳入此參數

如果需要限流的話 加上參數|--replica-alter-log-dirs-throttle ; 跟--throttle不一樣的是 --replica-alter-log-dirs-throttle限制的是Broker內不同路徑的遷移流量;

源碼解析

源碼解析請看文章 【kafka源碼】ReassignPartitionsCommand源碼分析(副本擴縮、數據遷移、分區(qū)重分配、副本跨路徑遷移)

視頻鏈接:https://mp.weixin.qq.com/s/fQ03wpctV1dGnmk1r-xEWA

本文轉載自微信公眾號「石臻臻的雜貨鋪」,可以通過以下二維碼關注。轉載本文請聯(lián)系石臻臻的雜貨鋪公眾號。

 

 

責任編輯:武曉燕 來源: 石臻臻的雜貨鋪
相關推薦

2019-05-13 14:17:06

抓包Web安全漏洞

2019-09-15 10:38:28

網絡分層模型

2023-11-29 08:03:05

2019-10-18 09:50:47

網絡分層模型網絡協(xié)議

2018-07-17 16:26:17

大數據營銷消費者

2020-03-29 08:27:05

Promise異步編程前端

2017-11-07 12:35:53

比特幣區(qū)塊鏈虛擬貨幣

2018-08-20 08:30:05

Kafka架構系統(tǒng)

2021-01-22 07:48:07

JavaScript 高階函數閉包

2017-06-27 13:50:37

數據分析Session

2021-04-07 19:44:27

JavaStringHashMap

2016-01-07 11:18:50

用戶畫像

2022-06-22 10:23:11

運維命令Linux

2017-05-31 08:45:03

2013-03-29 09:15:08

IT運維運維人員運維工程師

2021-07-21 10:10:14

require前端代碼

2017-08-07 08:32:58

泄密網盤存儲

2021-11-08 10:00:19

require前端模塊

2024-10-16 17:10:41

2020-03-27 13:00:14

運維架構技術
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 日韩精品一区二区三区在线观看 | 久久性av | 亚洲一区二区视频 | 天天曰夜夜| 夜夜夜夜草 | 黄色大片毛片 | 国产成人精品久久二区二区91 | 免费观看一级黄色录像 | 成人免费大片黄在线播放 | 一区二区免费 | 玖玖视频网 | 国产精品96久久久久久 | 国产精品www | 日本免费一区二区三区四区 | 欧美 日韩 国产 成人 | 中文字幕一区在线 | 欧美精品在线观看 | 最新中文字幕在线播放 | 在线一区 | 成人亚洲一区 | 久久久青草婷婷精品综合日韩 | 国产精品一区在线观看你懂的 | 国产大片一区 | 成人精品免费视频 | 爱高潮www亚洲精品 中文字幕免费视频 | 亚洲欧美中文日韩在线v日本 | 免费视频一区二区 | 日批免费在线观看 | 在线观看亚洲专区 | 狠狠干夜夜草 | 亚洲精品乱码久久久久久蜜桃91 | 99精品国产一区二区青青牛奶 | 中文字字幕在线中文乱码范文 | 嫩草网| 亚洲精品国产a久久久久久 午夜影院网站 | 免费观看成人av | 国产亚洲一区二区三区在线观看 | 成人av网站在线观看 | 看片国产 | 欧美一级片黄色 | 日韩人体视频 |