1. 程式人生 > >Kafka學習之Replication tools之Reassign Partitions Tool

Kafka學習之Replication tools之Reassign Partitions Tool

此工具能做啥?

此工具的作用跟Referred Replica Leader Election工具類似,都是為了平衡叢集的負載。但工具不僅為某一個partition從assigned replica中選舉一個新的leader,還改變partition的assigned replica,回憶一下,follower需要從leader上fetch資料為了保持同步,因此有時僅僅平衡leadershipi的負載是不夠的(還需要考慮follower的負載)。下面是此工具工作的步驟:

1,此工具更新ZK的路徑"/admin/reassign_partitions",寫入一個topic的partition列表和一個new assigned replica列表(如果設定了json檔案了的話)。


2,controller監聽ZK上的路徑。當資料update時被觸發,controller從ZK讀取更新的topic partition的列表和它們的assigned replicas。


3,對於每一個topic的partition,controller做如下的事情:
3.1. 開始一個新的replicas,由RAR - AR(RAR中存在,AR中不存在的replica)組成(RAR = Reassigned Replicas, AR = original list of Assigned Replicas)。
3.2. 在新的replica跟leader同步之前保持等待狀態。
3.3. 如果leader不在RAR中,從RAR選舉一個新的leader。
3.4 4. 停止老的replicas,由AR - RAR(AR中存在,RAR中不存在的replica)組成。
3.5. 寫入新的AR。
3.6. 從/admin/reassign_partitions刪除partition。

注意此工具只更新zk並退出,controller非同步為partitions reassign replicas。

此工具現在只在0.8分支中提供。

如何使用?

警告:此工具在0.8的beta版本釋出,並有一些bug,在0.8.1版本中是穩定的。

bin/kafka-reassign-partitions.sh
 
Option                                  Description
------                                  -----------
--broker-list <brokerlist>              The list of brokers to which the
                                          partitions need to be reassigned in
                                          the form "0,1,2". This is required
                                          for automatic topic reassignment.
--execute [execute]                     This option does the actual
                                          reassignment. By default, the tool
                                          does a dry run
--manual-assignment-json-file <manual   The JSON file with the list of manual
  assignment json file path>              reassignments.This option or topics-
                                          to-move-json-file needs to be
                                          specified. The format to use is -
                                        {"partitions":
                                            [{"topic": "foo",
                                              "partition": 1,
                                              "replicas": [1,2,3] }],
                                        "version":1
                                        }
--topics-to-move-json-file <topics to   The JSON file with the list of topics
  reassign json file path>                to reassign.This option or manual-
                                          assignment-json-file needs to be
                                          specified. The format to use is -
                                        {"topics":
                                            [{"topic": "foo"},{"topic": "foo1"}],
                                        "version":1
                                        }
--zookeeper <urls>                      REQUIRED: The connection string for
                                          the zookeeper connection in the form
                                          host:port. Multiple URLS can be
                                          given to allow fail-over.

注意此工具預設執行在dry-run(預演)模式下,並不會初始化partiton movement。只有開啟--execute選項,此工具才會開始執行。

叢集擴充套件

在0.8版本中,此工具可以用來擴充套件(expand)一個已存在的叢集。叢集擴充套件涉及到引入了新的broker id。通常當為一個叢集中新增一個broker時,它們不會從現存的topic接收到任何資料,直到使用這個工具把現存的topics/partitions assign到新的broker上。此工具使用2個選項來讓批量轉移topic到新的broker變得更簡單,這2個選項分別為:a)要轉移的topics;b)新增的broker的列表。使用這2個選項,此工具能自動的確定這些topic的partitions的位置。下面的例子把2個topic(foo1,foo2)轉移到新增的broker(id為5,6,7)。

nnarkhed$ ./bin/kafka-reassign-partitions.sh --topics-to-move-json-file topics-to-move.json --broker-list "5,6,7" --execute
 
nnarkhed$ cat topics-to-move.json
{"topics":
     [{"topic": "foo1"},{"topic": "foo2"}],
     "version":1
}

選擇一些partition進行轉移

此工具也可以有選擇的把一些特定的partition的一些replica轉移到一個特定的broker。如果你有一個不負載不均衡的叢集,你可以使用這個工具來有選擇的轉移一些partition。在這種模式下,此工具使用一個檔案,檔案包含了要轉移的partition的列表,還有轉移後replica分佈的broker id列表。

下面的例子把一個partition的replica從broker 1,2,3轉移到了broker 1,2,4上。

nnarkhed$ ./bin/kafka-reassign-partitions.sh --manual-assignment-json-file partitions-to-move.json --execute
 
nnarkhed$ cat partitions-to-move.json
{"partitions":
             [{"topic": "foo",
               "partition": 1,
               "replicas": [1,2,4] }],     

相關推薦

Kafka學習Replication toolsReassign Partitions Tool

此工具能做啥? 此工具的作用跟Referred Replica Leader Election工具類似,都是為了平衡叢集的負載。但工具不僅為某一個partition從assigned replica中選舉一個新的leader,還改變partition的assigned replica,回憶一下,follow

Kafka學習Replication toolsAdd Partition Tool

原文連結:https://cwiki.apache.org/confluence/display/KAFKA/Replication+tools#Replicationtools-5.AddPartitionTool 此工具能做啥? Kafka的partition表示併發度的單元:一個topic的訊息可以分

Apache Kafka學習(三)Kafka常用命令

windows:bin\zkServer.cmd 2、啟動kafka(安裝目錄下使用命令) Linux:bin/kafka-server-start.sh start config/server.properties windows:bin\windows\kafka-server-start.b

Kafka 學習筆記 架構

分別是 producer 跨語言 lan protoc repl cnblogs bsp 動態 Kafka的概念: 1、 AMQP協議 Advanced Message Queuing Protocol (高級消息隊列協議) The Advanced Messag

Kafka 學習筆記 ZooKeeper作用

9.png lec 管理 信息 發現 ges ima cti http Kafka使用ZooKeeper 配置管理 Leader Election 服務發現 首先進入ZooKeeper客戶端: ls / 可以看到有以下節點: 查看Topic 配置信息:體現了ZooK

Kafka 學習筆記 Consumer API

multipl 以及 keep manage broker api kafka sum multi Kafka提供了兩種Consumer API High Level Consumer API Low Level Consumer API(Kafka詭異的稱之為Simpl

Kafka 學習筆記 Kafka0.11console-producer/console-consumer

scribe tor 新的 producer 建立 actor sum consumer creat Kafka 學習筆記之 Kafka0.11之console-producer/console-consumer: 啟動Zookeeper 啟動Kafka0.11 創建一

我的kafka學習

初識kafka Kafka 從何而來?我們為什麼要開發 Kafka ? Kafka 到底是什麼? Kafka 最初是 Linkedln 的一個內部基礎設施系統。我們發現,雖然有很多資料庫和系統可以用來儲存資料,但在我們的架構裡,剛好缺一個可以幫助處理持續資料流的元件。在開發 Kafka 之前

Kafka學習路 (一)Kafka的簡介

要求 異步通信 images 等等 ron 服務器角色 消費 消息 崩潰 一、簡介 1.1 概述 Kafka是最初由Linkedin公司開發,是一個分布式、分區的、多副本的、多訂閱者,基於zookeeper協調的分布式日誌系統(也可以當做MQ系統),常見可以用於web/ng

Kafka學習路 (二)Kafka的架構

most 工具 路由 冪等 用戶 toc 目標 支持 mem 一、Kafka的集群架構 如上圖所示,一個典型的Kafka集群中包含若幹Producer(可以是web前端產生的Page View,或者是服務器日誌,系統CPU、Memory等),若幹broker(Kafka支持

Kafka學習路 (五)Kafka在zookeeper中的存儲

序號 hadoop state 空閑 pre 離開 substr doc 退出 當kafka啟動的時候,就會向zookeeper裏面註冊一些信息,這些數據也稱為Kafka的元數據信息。 一、Kafka在zookeeper中存儲結構圖 二、分析 根目錄下的結構 服務端開啟的

Kafka學習路 (三)Kafka的高可用

中一 不同 ive topic 停止工作 查找 同時 llb fail 一、高可用的由來 1.1 為何需要Replication 在Kafka在0.8以前的版本中,是沒有Replication的,一旦某一個Broker宕機,則其上所有的Partition數據都不可被消費,這

Kafka學習路 (四)Kafka的安裝

server 表達 mage 配置 list 執行 ase cti releases zookeeper1:192.168.1.11 zookeeper2:192.168.1.12 zookeeper3:192.168.1.13 kafka1:192.168.1.14 k

Kafka學習路 (五)Kafka在zookeeper中的儲存

目錄 正文 回到頂部 一、Kafka在zookeeper中儲存結構圖 回到頂部 二、分析 2.1 topic註冊資訊 /brokers/topics/[topic] : 儲存某個topic的partitions所有分配資訊 [zk: localh

Kafka學習consumer端部署及API

1、consumer.properties:檔案位於/resources目錄下 zookeeper.connect=192.168.0.1:2181test-datacenter/test-server # timeout in ms for connecting to

Kafka——replication factor: 1 larger than available brokers: 0 問題解決方案

一、問題 用kfafka命令:./kafka-server-start.sh ../config/server.properties &啟動時報以下錯誤: [2018-01-28 21:54:44,745] ERROR [KafkaApi-100] error

Kafka 學習筆記(八)producer讀取file

要想讓Kafka用到實際中,就需要學會讓Kafka從檔案中讀取內容,傳送到topic裡,以供consumer讀取。我們以前的幾篇,自己產生data的,不是從file中讀的。 之前先下載好scp,scp是secure copy的簡寫,用於在Linux下進行遠端拷貝檔案的命令。

Docker下的Kafka學習二:搭建叢集環境

在上一章《Docker下的Kafka學習之一:製作叢集用的映象檔案》中,我們把繼承了zookeeper和kafka的映象做好了,現在我們就用這個映象來搭建Kafka叢集環境。 Docker軟體版本 本次實戰的電腦作業系統是Win10專業版,安裝的Dock

Kafka學習監控

參考文件:https://kafka.apache.org/documentation.html#monitoring Kafka使用Yammer Metrics來報告server和client的眾多metric。還可以使用其他的外掛來跟你的監控系統連線起來,比如https://cwiki.apache.

Kafka學習七 為什麼說Kafka使用磁碟比記憶體快

        Kafka最核心的思想是使用磁碟,而不是使用記憶體,可能所有人都會認為,記憶體的速度一定比磁碟快,我也不例外。在看了Kafka的設計思想,查閱了相應資料再加上自己的測試後,發現磁碟的順序讀寫速度和記憶體持平。        而且Linux對於磁碟的讀寫優化也