01 kafka-manager配置
最主要配置就是用於kafka管理器狀態的zookeeper主機。這可以在conf目錄中的application.conf文件中找到。
當然也可以聲明為zookeeper集群。
另外也可以通過環境變量ZK_HOSTS來表示。
自定義kafka-manager功能,類似於權限管理。
- KMClusterManagerFeature - allows adding, updating, deleting cluster from Kafka Manager
- KMTopicManagerFeature - allows adding, updating, deleting topic from a Kafka cluster
- KMPreferredReplicaElectionFeature - allows running of preferred replica election for a Kafka cluster
- KMReassignPartitionsFeature - allows generating partition assignments and reassigning partitions
02kafka-manager打包
下面的命令將創建一個zip文件,可用於部署應用程序。
更多的玩法配置請參考:production deployment/configuration.
這個命令執行的會很慢,而且可能會失敗,要反復執行幾次。不過我已經執行好了,訪問鏈接: https://pan.baidu.com/s/1123fRCT9ywEgiV6HjzSluw 提取碼: r86e 。
3|0kafka-manager運行
經過上一步打包好之后會生成一個zip,具體zip的位置可以看輸出日志。解壓zip文件,進入kafka-manager目錄。
或者指定配置文件位置和端口
也可以指定java home的位置
修改conf/application.conf如下屬性
默認的端口是9000
4|0kafka-manager界面詳情
4|1 集群監控信息
4|2 Topic配置信息
4|3 Topic對應的消費分組信息
4|4 消費者消費詳情
4|5 消費者列表信息
4|6 Borker信息
kafka manager的使用,kafka manager頁面參數說明
kafka-manager是kafka集群管理工具,由雅虎開源,用戶可以在Web界面執行一些簡單的集群管理操作。具體支持以下內容(從githup上kafka-manager項目的readme得到功能列表):
- Manage multiple clusters
- Easy inspection of cluster state (topics, consumers, offsets, brokers, replica distribution, partition distribution)
- Run preferred replica election
- Generate partition assignments with option to select brokers to use
- Run reassignment of partition (based on generated assignments)
- Create a topic with optional topic configs (0.8.1.1 has different configs than 0.8.2+)
- Delete topic (only supported on 0.8.2+ and remember set delete.topic.enable=true in broker config)
- Topic list now indicates topics marked for deletion (only supported on 0.8.2+)
- Batch generate partition assignments for multiple topics with option to select brokers to use
- Batch run reassignment of partition for multiple topics
- Add partitions to existing topic
- Update config for existing topic
- Optionally enable JMX polling for broker level and topic level metrics.
- Optionally filter out consumers that do not have ids/ owners/ & offsets/ directories in zookeeper.
翻譯如下
管理多個集群
輕松檢查群集狀態(主題,消費者,偏移,代理,副本分發,分區分發)
運行首選副本選舉
使用選項生成分區分配以選擇要使用的代理
運行分區重新分配(基於生成的分配)
使用可選主題配置創建主題(0.8.1.1具有與0.8.2+不同的配置)
刪除主題(僅支持0.8.2+並記住在代理配置中設置delete.topic.enable = true)
主題列表現在指示標記為刪除的主題(僅支持0.8.2+)
批量生成多個主題的分區分配,並可選擇要使用的代理
批量運行重新分配多個主題的分區
將分區添加到現有主題
更新現有主題的配置
可隨意開啟對broker級別或者對topic級別的JMX輪詢
可方便的過濾出沒有id 、所有者、延遲或目錄等的消費者
下面通過頁面 的操作步驟詳細講解下kafka-manager的使用
添加集群
圖1
Enable JMX Polling
是否開啟 JMX 輪訓,該部分直接影響部分 kafka broker 和 topic 監控指標指標的獲取(生效的前提是 kafka 啟動時開啟了 JMX_PORT。主要影響如下指標的查看:
broker/topic 的combined metrics 綜合指標
圖2
Poll consumer information
是否開啟獲取消費信息,直接影響能夠在消費者頁面和 topic 頁面查看消費信息
圖3
圖4
Enable Active OffsetCache
是否開啟 offset 緩存,決定 kafka-manager 是否緩存住 topic 的相關偏移量。
其它參數說明
參數名 | 參數說明 | 默認值 | 備注 |
---|---|---|---|
brokerViewUpdatePeriodSeconds | Broker視圖周期更新時間/單位(s) | 30 | |
clusterManagerThreadPoolSize | 集群管理線程池大小 | 2 | |
clusterManagerThreadPoolQueueSize | 集群管理線程池列隊大小 | 100 | |
KafkaCommandThreadPoolSize | Kafka命令線程池大小 | 2 | |
logkafkaCommandThreadPoolQueueSize | logkafka命令線程池列隊大小 | 100 | |
logkafkaUpdatePeriodSeconds | Logkafka周期更新時間/單位(s) | 30 | |
partitionOffsetCacheTimeoutSecs | Partition Offset緩存過期時間/單位(s) | 5 | |
brokerViewThreadPoolSize | Broker視圖線程池大小 | 8 | 3 * number_of_brokers |
brokerViewThreadPoolQueue Size | Broker視圖線程池隊列大小 | 1000 | 3 * total # of partitions across all topics |
offsetCacheThreadPoolSize | Offset緩存線程池大小 | 8 | |
offsetCacheThreadPoolQueueSize | Offset緩存線程池列隊大小 | 1000 | |
kafkaAdminClientThreadPoolSize | Kafka管理客戶端線程池大小 | 8 | |
kafkaAdminClientTheadPoolQueue Sizec | Kafka管理客戶端線程池隊列大小 | 1000 | |
kafkaManagedOffsetMetadataCheckMillis | Offset元數據檢查時間 | 30000 | (這部分解釋屬自己理解) |
kafkaManagedOffsetGroupCacheSize | Offset組緩存大小 | 100000 | (這部分解釋屬自己理解) |
kafkaManagedOffsetGroupExpireDays | Offset組緩存保存時間 | 7 | (這部分解釋屬自己理解) |
Security Protocol | 安全協議 | PLAINTEXT | [SASL_PLAINTEXT,SASL_SSL,SSL] |
topic管理
圖5
Brokers Skew% (broker 傾斜率)
該 topic 占有的 broker 中,擁有超過該 topic 平均分區數的 broker 所占的比重。舉個例子說明
圖6
上圖,我們以一個 6 個分區,2 個副本的 topic 舉例,該 topic 一共 6 * 2 = 12 個 分區,分布在 5 個 broker 上,平均一個 broker 應該擁有 2.4 個分區,因為分區為整數,所以 2 個或者 3 個都是屬於平均范圍,5 個 broker 並沒有那個擁有超過平均分區數的,所以 Brokers Skew% 為 0。
如果此時,我將 broker 1 上的分區 1 的副本移動到 broker 2 上,如下圖所示:
圖7
上圖,broker 2 上擁有 4 個分區,超過平均的 2 個或 3 個的平均水平,broker 2 就傾斜了,broker 傾斜率 1/5=20%。
圖8
注意如下這種情況也是不計算作傾斜的。
圖9
Brokers Leader Skew% (broker leader 分區傾斜率)
該 topic 占有的 broker 中,擁有超過該 topic 平均 Leader 分區數的 broker 所占的比重。同樣舉個例子說明:
圖10
我們還是以一個 6 個分區,2 個副本的 topic 舉例,該 topic 一共有 6 個 Leader 分區,分布在 5 個 broker 上,平均一個 broker 應該擁有 1.2 個 Leader 分區,因為分區為整數,所以 1 個或者 2 個都是屬於平均范圍,如圖所示,5 個 broker 沒有那個擁有超過 2 個的 Leader 分區,所以 Brokers Leader Skew% 為 0。
如果此時,我們將 broker3 的 Leader 分區移動到 broker2,如下圖所示:
圖11
圖12
圖13
此時,broker2 擁有 3 個 leader 分區,超過平均范圍的 2 個,所以 broker2 就 Leader 分區傾斜了,傾斜率 1/5=20%。
Under Replicated%
該 topic 下的 partition,其中副本處於失效或者失敗的比率。失敗或者失效是指副本不處於 ISR 隊列中。目前控制副本是否處於 ISR 中由 replica.log.max.ms 這個參數控制。
replica.log.max.ms: 如果一個follower在這個時間內沒有發送fetch請求或消費leader日志到結束的offset,leader將從ISR中移除這個follower,並認為這個follower已經掛了,默認值 10000 ms
用下圖舉例說明:
圖14
broker1 此時擁有 partition1 和 partition4,其中 partition4 時 Leader,partition1 是副本,如果此時 broker 故障不可用,則會出現如下情況:
圖15
上述兩張圖片時接連展現,先是發現borker1 上 partition4 這個 Leader 分區失效,繼而從 ISR 隊列中取出 broker4 上的副本作為 Leader 分區,然后在后期同步檢測過程中發現broker1 上 partition1 這個副本失效。最后導致的結果就是 partition1 和 partition4 都出於副本失效或者失敗的狀態。此時 Under Replicated 的數值為:2/6=33%。
圖16
總結
上面三個參數對於衡量 topic 的穩定性有重要的影響:
Broker Skew: 反映 broker 的 I/O 壓力,broker 上有過多的副本時,相對於其他 broker ,該 broker 頻繁的從 Leader 分區 fetch 抓取數據,磁盤操作相對於其他 broker 要多,如果該指標過高,說明 topic 的分區均不不好,topic 的穩定性弱;
Broker Leader Skew:數據的生產和消費進程都至於 Leader 分區打交道,如果 broker 的 Leader 分區過多,該 broker 的數據流入和流出相對於其他 broker 均要大,該指標過高,說明 topic 的分流做的不夠好;
Under Replicated: 該指標過高時,表明 topic 的數據容易丟失,數據沒有復制到足夠的 broker 上。
topic 詳情
圖17
Preferred Replicas
分區的副本中,采用副本列表中的第一個副本作為 Leader 的所占的比重,如上圖,6 個副本組,其中只有 partition4 不是采用副本中的第一個在 broker1 中的分區作為 leader 分區,所以 Preferred Replicas 的值為 5/6=83%。
上述是關於“優先副本”的相關描述,即在理想的狀態下,分區的 leader 最好是 “優先副本”,這樣有利於保證集群中 broker 的領導權比較均衡。重新均衡集群的 leadership 可采用 kafka manager 提供的工具
topic 操作
操作 | 說明 |
---|---|
Delete Topic | 刪除 topic |
Reassign Partitions | 平衡集群負載 |
Add Partitions | 增加分區 |
Update Config | Topic 配置信息更新 |
Manual Partition Assignments | 手動為每個分區下的副本分配 broker |
Generate Partition Assignments | 系統自動為每個分區下的副本分配 broker |
一般而言,手動調整、系統自動分配分區和添加分區之后,都需要調用 Reassign Partition。
Manual Partition Assignments
一般當有 Broker Skew 時或者 Broker Leader Skew 后可以借助該功能進行調整,本文前面的 Broker Skew 和 Broker Leader Skew 的說明都借助了該工具。
例如將下圖中的 broker1 的分區4 移動到 broker2 上。
Generate Partition Assignments
該功能一般在批量移動 partition 時比較方便,比如集群新增 broker 或者 topic 新增 partition 后,將分區移動到指定的 broker。
例如下圖將 topic 由原來的分布在 5 個 broker 修改為 4 個 broker:
消費監控
kafka manager 能夠獲取到當前消費 kafka 集群消費者的相關信息。
文章參考 https://www.jianshu.com/p/6a592d558812
一.kafka-manager簡介
kafka-manager是目前最受歡迎的kafka集群管理工具,最早由雅虎開源,用戶可以在Web界面執行一些簡單的集群管理操作。具體支持以下內容:
- 管理多個集群
- 輕松檢查群集狀態(主題,消費者,偏移,代理,副本分發,分區分發)
- 運行首選副本選舉
- 使用選項生成分區分配以選擇要使用的代理
- 運行分區重新分配(基於生成的分配)
- 使用可選主題配置創建主題(0.8.1.1具有與0.8.2+不同的配置)
- 刪除主題(僅支持0.8.2+並記住在代理配置中設置delete.topic.enable = true)
- 主題列表現在指示標記為刪除的主題(僅支持0.8.2+)
- 批量生成多個主題的分區分配,並可選擇要使用的代理
- 批量運行重新分配多個主題的分區
- 將分區添加到現有主題
- 更新現有主題的配置
kafka-manager 項目地址:https://github.com/yahoo/kafka-manager
二.kafka-manager安裝
1.下載安裝包
使用Git或者直接從Releases中下載,這里我們下載 1.3.3.18 版本:https://github.com/yahoo/kafka-manager/releases
[admin@node21 software]$ wget https://github.com/yahoo/kafka-manager/archive/1.3.3.18.zip
2.解壓安裝包
[admin@node21 software]$ mv 1.3.3.18.zip kafka-manager-1.3.3.18.zip [admin@node21 software]$ unzip kafka-manager-1.3.3.18.zip -d /opt/module/ [admin@node21 software]$ cd /opt/module/ [admin@node21 module]$ ll drwxr-xr-x 9 admin admin 268 May 27 00:33 jdk1.8 drwxr-xr-x 7 admin admin 122 Jun 14 11:44 kafka_2.11-1.1.0 drwxrwxr-x 9 admin admin 189 Jul 7 04:44 kafka-manager-1.3.3.18 drwxr-xr-x 11 admin admin 4096 May 29 10:14 zookeeper-3.4.12 [admin@node21 module]$ ls kafka-manager-1.3.3.18/ app build.sbt conf img LICENCE project public README.md sbt src target test
3.sbt編譯
1)yum安裝sbt(因為kafka-manager需要sbt編譯)
[admin@node21 ~]$ curl https://bintray.com/sbt/rpm/rpm > bintray-sbt-rpm.repo [admin@node21 ~]$ sudo mv bintray-sbt-rpm.repo /etc/yum.repos.d/ [admin@node21 ~]$ sudo yum install sbt
修改倉庫地址:(sbt 默認下載庫文件很慢, 還時不時被打斷),我們可以在用戶目錄下創建 touch ~/.sbt/repositories, 填上阿里雲的鏡像 # vi ~/.sbt/repositories
[repositories]
local
aliyun: http://maven.aliyun.com/nexus/content/groups/public/
typesafe: http://repo.typesafe.com/typesafe/ivy-releases/, [organization]/[module]/(scala_[scalaVersion]/)(sbt_[sbtVersion]/)[revision]/[type]s/[artifact](-[classifier]).[ext], bootOnly
sonatype-oss-releases
maven-central
sonatype-oss-snapshots
驗證:檢查sbt是否安裝成功,查看命令輸出,發現已經成功可以從maven.aliyun.com/nexus
下載到依賴即表示成功
[admin@node21 ~]$ sbt-version
2)編譯kafka-manager
[admin@node21 kafka-manager-1.3.3.18]$ ./sbt clean dist
看到打印這個消息 Getting org.scala-sbt sbt 0.13.9 (this may take some time)... 就慢慢等吧,可以到~/.sbt/boot/update.log 查看sbt更新日志。sbt更新好,就開始下載各種jar包,最后看到:Your package is ready in /opt/module/kafka-manager-1.3.3.18/target/universal/kafka-manager-1.3.3.18.zip 證明編譯好了。
4.安裝
環境准備:Java 8+ kafka集群搭建參考:CentOS7.5搭建Kafka2.11-1.1.0集群
重新解壓編譯好的kafka-manager-1.3.3.18.zip
[admin@node21 kafka-manager-1.3.3.18]$ ls bin conf lib README.md share
修改配置文件
[admin@node21 kafka-manager-1.3.3.18]$ pwd /opt/module/kafka-manager-1.3.3.18 [admin@node21 kafka-manager-1.3.3.18]$ ls conf/ application.conf consumer.properties logback.xml logger.xml routes [admin@node21 kafka-manager-1.3.3.18]$ sudo vi conf/application.conf 修改kafka-manager.zkhosts列表為自己的zk節點 kafka-manager.zkhosts="node21:2181,node22:2181,node23:2181"
5.啟動服務
啟動zk集群,kafka集群,再啟動kafka-manager服務。
bin/kafka-manager 默認的端口是9000,可通過 -Dhttp.port,指定端口; -Dconfig.file=conf/application.conf指定配置文件:
[admin@node21 kafka-manager-1.3.3.18]$ nohup bin/kafka-manager -Dconfig.file=conf/application.conf -Dhttp.port=8080 &
jps查看進程
6.編寫服務啟動腳本
chmod +x kafka-manager.sh
nohup /opt/module/kafka-manager-1.3.3.18/bin/kafka-manager -Dconfig.file=/opt/module/kafka-manager-1.3.3.18/conf/application.conf -Dhttp.port=8888 >/opt/module/kafka-ma nager-1.3.3.18/kafka-manager.log 2>&1 &
WebUI查看:http://node21:8888/ 出現如下界面則啟動成功。
三.kafka-manager配置
1.新建Cluster
點擊【Cluster】>【Add Cluster】打開如下添加集群配置界面:輸入集群的名字(如Kafka-Cluster-1
)和 Zookeeper 服務器地址(如localhost:2181
),選擇最接近的Kafka版本
其他broker的配置可以根據自己需要進行配置,默認情況下,點擊【保存】時,會提示幾個默認值為1
的配置錯誤,需要配置為>=2
的值。提示如下。
新建完成后,保存運行界面如下:
四.kafka-manager管理
1.新建主題
Topic---Create
2.查看主題
Topic---list