1. 程式人生 > >kafka叢集下線broker節點實踐方法

kafka叢集下線broker節點實踐方法

kafka叢集
broker 0(10.11.32.76    hadooptest76.bj)
broker 1(10.11.32.77    hadooptest77.bj)
broker 2(10.11.32.81    hadooptest81.bj)

操作任務:下線broker 2節點,確保業務不中斷,資料不丟失。

一、先決條件,kafka啟動必須加上JMX_PORT=9999(自己選一個空閒埠)
在zookeeper的客戶端使用get  /kafka/brokers/ids/[0,1,2](一個數字代表你的brokerid),如果返回資訊中的jmx_port 值為-1就說明啟動時沒有指定JMX_PORT,這樣不需要進行下面步驟,請直接重啟叢集加上配置,並且server.properties需要設定auto.create.topics.enable=false。
auto.create.topics.enable 預設值:true
是否允許自動建立topic。如果設為true,那麼produce,consume或者fetch metadata一個不存在的topic時,就會自動建立一個預設replication factor和partition number的topic。

配置jmx服務
方法一:(網上有文章讓這樣配置,但會報錯,請不要這樣操作)

kafka server中預設是不啟動jmx埠的,需要使用者自己配置
 vim bin/kafka-run-class.sh
#最前面新增一行
JMX_PORT=8060

不要這樣新增不然會報錯:
Error: Exception thrown by the agent : java.rmi.server.ExportException: Port already in use: 8060; nested exception is:
        java.net.BindException: Address already in use (Bind failed)


方法二:(建議)
建議啟動kafka服務的時候前邊加上JMX_PORT:
JMX_PORT=9999 /usr/local/kafka_2.9.2-0.8.1.1/bin/kafka-server-start.sh


我自定義一個啟動指令碼
cat start-kafka-all.sh
#!/bin/bash

while read i1 i2
do
ssh -T $i1 << TT
hostname
JMX_PORT=9999 /usr/local/kafka_2.9.2-0.8.1.1/bin/kafka-server-start.sh /usr/local/kafka_2.9.2-0.8.1.1/config/server.properties >/usr/local/kafka_2.9.2-0.8.1.1/kafka.out &
TT
done < iplist

iplist檔案內容
cat iplist
10.11.32.76    hadooptest76.bj
10.11.32.77    hadooptest77.bj
10.11.32.81    hadooptest81.bj

二、移動topic
新建topic
/usr/local/kafka_2.9.2-0.8.1.1/bin/kafka-topics.sh --create --topic test01 --partitions 6 --replication-factor 2 --zookeeper 10.11.32.76:2181

檢視:
/usr/local/kafka_2.9.2-0.8.1.1/bin/kafka-topics.sh --list --zookeeper 10.11.32.76:2181
/usr/local/kafka_2.9.2-0.8.1.1/bin/kafka-topics.sh --describe --zookeeper 10.11.32.76:2181 --topic test01

生產者:
/usr/local/kafka_2.9.2-0.8.1.1/bin/kafka-console-producer.sh --broker-list 10.11.32.76:9092 --topic test01

消費者:
/usr/local/kafka_2.9.2-0.8.1.1/bin/kafka-console-consumer.sh --zookeeper 10.11.32.76:2181 --topic test01 --from-beginning


建立topics-to-move.json檔案
[
[email protected]
mv_topic]# cat topics-to-move.json
{"topics": [
 {"topic": "test01"},
 {"topic": "test02"},
 {"topic": "test03"}
 ],
 "version":1
}

#test01、test02、test03 為topic名字

生成移動指令碼
/usr/local/kafka_2.9.2-0.8.1.1/bin/kafka-reassign-partitions.sh --zookeeper 10.11.32.76:2181 --topics-to-move-json-file topics-to-move.json --broker-list "0,1" --generate

這樣就會生成一串新的json資料Current partition replica assignment和Proposed partition reassignment configuration
Proposed partition reassignment configuration下面生成的就是將分割槽重新分佈到broker 0、1上的結果。
我們將這些內容儲存到名為result.json檔案裡面(檔名不重要,檔案格式也不一定要以json為結尾,只要保證內容是json即可),然後執行這些reassign plan:
{"version":1,"partitions":[{"topic":"fortest1","partition":0,"replicas":[3,4]},其他部分省略}
將這一串json寫入新檔案reassignment-node.json中

例如:
[
[email protected]
mv_topic]# /usr/local/kafka_2.9.2-0.8.1.1/bin/kafka-reassign-partitions.sh --zookeeper 10.111.32.76:2181 --topics-to-move-json-file topics-to-move.json --broker-list "0,1" --generate
Current partition replica assignment

{"version":1,"partitions":[{"topic":"test01","partition":2,"replicas":[2,0]},{"topic":"test01","partition":3,"replicas":[0,2]},{"topic":"test01","partition":5,"replicas":[2,1]},{"topic":"test02","partition":5,"replicas":[1,0]},{"topic":"test03","partition":1,"replicas":[2,0]},{"topic":"test01","partition":4,"replicas":[1,0]},{"topic":"test01","partition":0,"replicas":[0,1]},{"topic":"test02","partition":0,"replicas":[0,1]},{"topic":"test02","partition":4,"replicas":[0,1]},{"topic":"test02","partition":3,"replicas":[1,0]},{"topic":"test03","partition":2,"replicas":[0,1]},{"topic":"test03","partition":5,"replicas":[0,2]},{"topic":"test02","partition":2,"replicas":[0,1]},{"topic":"test01","partition":1,"replicas":[1,2]},{"topic":"test03","partition":4,"replicas":[2,1]},{"topic":"test03","partition":0,"replicas":[1,2]},{"topic":"test02","partition":1,"replicas":[1,0]},{"topic":"test03","partition":3,"replicas":[1,0]}]}
Proposed partition reassignment configuration

{"version":1,"partitions":[{"topic":"test01","partition":2,"replicas":[0,1]},{"topic":"test01","partition":3,"replicas":[1,0]},{"topic":"test01","partition":5,"replicas":[1,0]},{"topic":"test02","partition":5,"replicas":[0,1]},{"topic":"test03","partition":1,"replicas":[1,0]},{"topic":"test01","partition":4,"replicas":[0,1]},{"topic":"test01","partition":0,"replicas":[0,1]},{"topic":"test02","partition":0,"replicas":[1,0]},{"topic":"test02","partition":4,"replicas":[1,0]},{"topic":"test02","partition":3,"replicas":[0,1]},{"topic":"test03","partition":5,"replicas":[1,0]},{"topic":"test03","partition":2,"replicas":[0,1]},{"topic":"test02","partition":2,"replicas":[1,0]},{"topic":"test03","partition":4,"replicas":[0,1]},{"topic":"test01","partition":1,"replicas":[1,0]},{"topic":"test03","partition":0,"replicas":[0,1]},{"topic":"test02","partition":1,"replicas":[0,1]},{"topic":"test03","partition":3,"replicas":[1,0]}]}

新建vi reassignment-node.json檔案
[[email protected] mv_topic]# vi reassignment-node.json
{"version":1,"partitions":[{"topic":"test01","partition":2,"replicas":[0,1]},{"topic":"test01","partition":3,"replicas":[1,0]},{"topic":"test01","partition":5,"replicas":[1,0]},{"topic":"test02","partition":5,"replicas":[0,1]},{"topic":"test03","partition":1,"replicas":[1,0]},{"topic":"test01","partition":4,"replicas":[0,1]},{"topic":"test01","partition":0,"replicas":[0,1]},{"topic":"test02","partition":0,"replicas":[1,0]},{"topic":"test02","partition":4,"replicas":[1,0]},{"topic":"test02","partition":3,"replicas":[0,1]},{"topic":"test03","partition":5,"replicas":[1,0]},{"topic":"test03","partition":2,"replicas":[0,1]},{"topic":"test02","partition":2,"replicas":[1,0]},{"topic":"test03","partition":4,"replicas":[0,1]},{"topic":"test01","partition":1,"replicas":[1,0]},{"topic":"test03","partition":0,"replicas":[0,1]},{"topic":"test02","partition":1,"replicas":[0,1]},{"topic":"test03","partition":3,"replicas":[1,0]}]}


這時候,萬事俱備, 開始遷移:
/usr/local/kafka_2.9.2-0.8.1.1/bin/kafka-reassign-partitions.sh --zookeeper 192.168.103.47:2181 --reassignment-json-file reassignment-node.json --execute
如果topic比較多的話需要多等待一些時間,等待完成調整,檢視下所有topic已經遷移到制定的broker上

過一會檢視topic
/usr/local/kafka_2.9.2-0.8.1.1/bin/kafka-topics.sh --describe --zookeeper localhost:2181 --topic test01

三、讓節點機器下線(必須要進行,及已經平衡了topic)
/usr/local/kafka_2.9.2-0.8.1.1/bin/kafka-run-class.sh kafka.admin.ShutdownBroker --zookeeper 10.11.32.76:2181,10.11.32.77:2181,10.11.32.81:2181/kafka --broker 2 --num.retries 3 --retry.interval.ms 600

四、重新leader、重新均衡
下線節點完成後重新均衡下
/usr/local/kafka_2.9.2-0.8.1.1/bin/kafka-preferred-replica-election.sh --zookeeper 10.11.32.76:2181
成功後重新觀察tpoic狀態會發現Leader、Replicas都正常了

參考:
Kafka叢集擴充套件以及重新分佈分割槽
https://www.iteblog.com/archives/1611.html
官網
https://cwiki.apache.org/confluence/display/KAFKA/Replication+tools#Replicationtools-1.ControlledShutdown
kafka的遷移乾貨
http://www.cnblogs.com/dycg/p/3922352.html
apache Kafka下線broker的操作
http://blog.csdn.net/lizhitao/article/details/42266327
Kafka叢集平滑重啟
http://blog.csdn.net/clarencezi/article/details/42271037
Kafka學習之四 Kafka常用命令
http://blog.csdn.net/code52/article/details/50935849
kafka server部署配置優化
http://blog.csdn.net/lizhitao/article/details/42180265
kafka擴容
http://zhouxinyu1991.blog.51cto.com/6095086/1876616

相關推薦

kafka叢集下線broker節點實踐方法

kafka叢集 broker 0(10.11.32.76    hadooptest76.bj) broker 1(10.11.32.77    hadooptest77.bj) broker 2(10.11.32.81    hadooptest81.bj) 操作任務:下

kafka安裝教程 -- 單節點-單Broker叢集:只在一個節點上部署一個Broker

①安裝jdk:  yum install java-1.8.0-openjdk.x86_64 ②.去官網下載kafka_2.12-0.11.0.0.tgz ③.上傳檔案並解壓壓縮檔案到/opt目錄下 [[email protected] /]# tar -xv

kafka叢集Broker端基於Reactor模式請求處理流程深入剖析-kafka商業環境實戰

本套技術專欄是作者(秦凱新)平時工作的總結和昇華,通過從真實商業環境抽取案例進行總結和分享,並給出商業應用的調優建議和叢集環境容量規劃等內容,請持續關注本套部落格。期待加入IOT時代最具戰鬥力的團隊。QQ郵箱地址:[email protected],如有任何學術交流,可隨時聯絡。

kafka叢集基於永續性指標進行效能調優實踐-kafka 商業環境實戰

本套技術專欄是作者(秦凱新)平時工作的總結和昇華,通過從真實商業環境抽取案例進行總結和分享,並給出商業應用的調優建議和叢集環境容量規劃等內容,請持續關注本套部落格。期待加入IOT時代最具戰鬥力的團隊。QQ郵箱地址:[email protected],如有任何學術交流,可隨時聯絡

kafka叢集基於延時指標進行效能調優實踐-kafka 商業環境實戰

本套技術專欄是作者(秦凱新)平時工作的總結和昇華,通過從真實商業環境抽取案例進行總結和分享,並給出商業應用的調優建議和叢集環境容量規劃等內容,請持續關注本套部落格。期待加入IOT時代最具戰鬥力的團隊。QQ郵箱地址:[email protected],如有任何學術交流,可隨時聯絡

kafka叢集基於吞吐量指標進行效能調優實踐-kafka 商業環境實戰

本套技術專欄是作者(秦凱新)平時工作的總結和昇華,通過從真實商業環境抽取案例進行總結和分享,並給出商業應用的調優建議和叢集環境容量規劃等內容,請持續關注本套部落格。期待加入IOT時代最具戰鬥力的團隊。QQ郵箱地址:[email protected],如有任何學術交流,可隨時聯絡

kafka叢集基於可用性指標進行效能調優實踐-kafka 商業環境實戰

版權宣告:本套技術專欄是作者(秦凱新)平時工作的總結和昇華,通過從真實商業環境抽取案例進行總結和分享,並給出商業應用的調優建議和叢集環境容量規劃等內容,請持續關注本套部落格。期待加入IOT時代最具戰鬥力的團隊。QQ郵箱地址:[email protected],如有任何學術交流,

Kafka原理——fabric1.0版本中的節點排序方法

Kafka原理 可參考Zookeeper一起理解,後續自己在專案中實現,會再來補充一些實踐的內容。 Zookeeper整理:https://blog.csdn.net/yangwei256/article/details/83786917 目錄 概述....  1

kafka叢集Broker端引數設定及調優準則建議-kafka 商業環境實戰

1 Distributed streaming platform Apache Kafka® is a distributed streaming platform. What exactly d

從零搭建生產Hadoop叢集(八)——上線與下線資料節點流程

一、概述 Hadoop叢集中,經常需要在不重啟叢集的前提下,動態地上線與下線資料節點,而使用Cloudera Manager管理的叢集,可以很方便地做到這一點,本文將介紹其相關流程。 二、節點上線流程 1. 伺服器初始化 新節點的硬體配置最好能夠跟原叢集伺服器

kafka叢集3節點搭建

kafka版本:kafka_2.11-0.9.0.1.tgz kafka安裝節點: cdhnode3 192.168.80.138 cdhnode4 192.168.80.139 cdhnode5 192.168.80.140 zookeep

Spring Boot、kafka、spring-kafka 生產者消費者實踐(從搭建kafka叢集開始)

一、搭建kafka叢集 參考文件:http://kafka.apache.org/quickstart 官方文件講的很詳細,而且沒坑,照著做很快就可以搭好 注意點 or 建議: 1、在Linux下,啟動的kafka叢集經常無故退出,看日誌也沒有報錯,就是啟動了關閉流程,正常關閉

storm讀取kafka叢集各個叢集節點資訊

功能:從kafka叢集的各個節點讀取訊息,負載均衡的負責各個topic的各個partition的資料的讀取支援事務,可以重發失敗的message程式碼閱讀:重要物件:Map stateCconf:儲存kafka消費者資訊的zookeeper配置資訊.ZkState _sta

kafka 叢集--3個broker 3個zookeeper建立實戰

準備工作: 1. 準備3臺機器,IP地址分別為:192.168.0.10,192.168.0.11,192.168.0.12 2. 下載kafka穩定版本,我的版本為:kafka_2.9.2-0.8.1.1.tgz  3. 分別解壓放入到想安裝的目錄下,我的目錄為:/home/www 解壓命令為: t

kafka broker節點負載均衡失效

一大早上班,運維就給我發訊息,說一臺主機磁碟爆了,登上去一看 使用率100%,直接嚇尿,發現是我的一臺kafka主機,這是個kafka叢集,共3臺,再登入其他2臺,發現磁碟使用率才10%,高可用呢???? 立馬覺得不對,百度沒搜到啥,Google了下,說是沒開啟高可用

Kafka叢集Broker沒起到負載均衡作用

目前Kafka叢集部署了4個Broker節點,但在壓測的過程中,推送訊息到Kafka沒有起到負載均衡,都只推送到一臺Broker節點,1、檢視推送程式物理機連線kafka埠6667的TCP連線,確實只有一臺 [[email protected]~]#

HDU 2157 How many ways??:矩陣快速冪【i到j共經過k個節點方法數】

ref bsp show clas define http 題解 struct fin 題目鏈接:http://acm.hdu.edu.cn/showproblem.php?pid=2157 題解:   給你一個有向圖,n個節點m條邊,問你從i到j共經過k個節點的方法數(不

jQuery DOM節點操作方法大全

dom jquery 元素操作 append(content | fn):向每個匹配的元素內部追加內容。參考:http://jquery.cuishifeng.cn/append.html例如:向所有段落中追加一些HTML標記。<p>I would like to say: </

使用jquery獲取父元素或父節點方法

返回 number 子元素 文本 事件 什麽 nbsp 可選 元素 jquery獲取父元素方法比較多,比如parent(),parents(),closest()這些都能幫你實現查找父元素或節點,下面我們來一一講解: 先舉個例子, 1.<ul class="paren

Kafka運行環境優化實踐

clas 目錄配置 分布 發送 而不是 優先 提高 影響 分布式消息 Kafka高性能的特點及條件 Kafka是一個高吞吐量分布式消息中間件,並且提供了消息的持久化功能。其高可行有兩個重要的特點: 利用了磁盤連續讀寫性能顯著高於隨機讀寫性能的特點 並發,將一個topic拆