Kafka的操作

Kafka的操作

主題相關操作命令格式
# 格式
[yangqi@xiaoer kafka-2.3.1]$ ./bin/kafka-topics.sh --zookeeper xiaoer:2181,yangqi1:2181,yangqi2:2181/kafka --操作 [--options]
主題幫助命令
# 主題幫助命令
[yangqi@xiaoer kafka-2.3.1]$ ./bin/kafka-topics.sh --help
列出所有主題
# 列出所有主題
[yangqi@xiaoer kafka-2.3.1]$ ./bin/kafka-topics.sh --list --zookeeper xiaoer:2181,yangqi1:2181,yangqi2:2181/kafka
創建主題
# 創建主題
# 創建主題會在zk中的brokers目錄下創建對應的znode節點,同時也在消息存儲目錄下創建對應的"topic-分區編號"的目錄
[yangqi@xiaoer kafka-2.3.1]$ ./bin/kafka-topics.sh --create --zookeeper xiaoer:2181,yangqi1:2181,yangqi2:2181/kafka --replication-factor 1 --partitions 1 --topic test

查看創建的主題:

在這裏插入圖片描述

查看消息存儲目錄下的 topic 目錄:

在這裏插入圖片描述

查看主題
--describe 查看出來的信息,第一行是所有分區的總記錄、配置等信息。之後的每一行代表一個分區信息。
	"leader" node節點是負責給定分區的所有讀和寫操作. Each node will be the leader for a randomly selected portion of the partitions。他後面跟的數字n就是broker的唯一id。
	"replicas" 是複製此分區的日誌的節點列表,而不管這些節點是leader節點還是當前活動節點。後續跟的數字也是broker的唯一id。
	"isr" 是一系列“在同步”的副本。這是副本列表的子集,該列表當前處於活動狀態並與leader節點保持聯繫。它後續跟的數字任然是broker的唯一id。

# 查看主題
[yangqi@xiaoer kafka-2.3.1]$ ./bin/kafka-topics.sh --describe --zookeeper xiaoer:2181,yangqi1:2181,yangqi2:2181/kafka --topic test

在這裏插入圖片描述

主題修改
可以修改主題分區和配置屬性等信息,不能修改副本因子,同時也不能將分區數越改越小
# 刪除 test 主題的 flush.ms 配置,如果沒有該屬性將會顯示已經更新
[yangqi@xiaoer kafka-2.3.1]$ ./bin/kafka-topics.sh --alter --zookeeper xiaoer:2181,yangqi1:2181,yangqi2:2181/kafka --topic test --delete-config flush.ms

在這裏插入圖片描述

# 修改增加配置
[yangqi@xiaoer kafka-2.3.1]$ ./bin/kafka-topics.sh --alter --zookeeper xiaoer:2181,yangqi1:2181,yangqi2:2181/kafka --topic test --config flush.ms=1000

在這裏插入圖片描述

# 刪除增加的配置
[yangqi@xiaoer kafka-2.3.1]$ ./bin/kafka-topics.sh --alter --zookeeper xiaoer:2181,yangqi1:2181,yangqi2:2181/kafka --topic test --delete-config flush.ms

在這裏插入圖片描述

# 修改分區數量,注意不能修改分區因子(--replication-factor),同時不能修改成相同的分區數
[yangqi@xiaoer kafka-2.3.1]$ ./bin/kafka-topics.sh --alter --zookeeper xiaoer:2181,yangqi1:2181,yangqi2:2181/kafka  --partitions 3 --topic test

在這裏插入圖片描述

刪除主題

  刪除主題時,需要停止該刪除topic相關的生產和消費者,否則會有意想不到的問題。同時如果delete.topic.enable的設置不是true,則是標記刪除,也就不是真正的刪除,可以使用list查看出來。而將delete.topic.enable設置爲true時,所創建的信息都會給刪除,即zookeeper中的topicsznode節點刪除,刪除對應的分區目錄。

# 創建 test1 主題,設置副本數爲2,分區數爲3
[yangqi@xiaoer kafka-2.3.1]$ ./bin/kafka-topics.sh --create --zookeeper xiaoer:2181,yangqi1:2181,yangqi2:2181/kafka --replication-factor 2 --partitions 3 --topic test1

# 列出主題
[yangqi@xiaoer kafka-2.3.1]$ ./bin/kafka-topics.sh --list --zookeeper xiaoer:2181,yangqi1:2181,yangqi2:2181/kafka

# 查看主題
[yangqi@xiaoer kafka-2.3.1]$ ./bin/kafka-topics.sh --describe --zookeeper xiaoer:2181,yangqi1:2181,yangqi2:2181/kafka --topic test1

# 刪除主題
[yangqi@xiaoer kafka-2.3.1]$ ./bin/kafka-topics.sh --delete --zookeeper xiaoer:2181,yangqi1:2181,yangqi2:2181/kafka --topic test1

# 列出主題
[yangqi@xiaoer kafka-2.3.1]$ ./bin/kafka-topics.sh --list --zookeeper xiaoer:2181,yangqi1:2181,yangqi2:2181/kafka

在這裏插入圖片描述

  如果刪除後並沒有直接刪除,需要在server.properties設置delete.topic.enable=true。在進行刪除之前,一定要注意將需要被刪除topicproduceconsume停止。如果有程序正在生產或者消費該topic,則該topicoffset信息會一直在broker更新。調用kafka delete命令無法刪除該topic。同時,需要設置auto.create.topics.enable=false,默認值爲true,如果設置爲true,則produce或者fetch不存在的topic時也會自動創建該topic,所以刪除之前一定要將auto.create.topics.enable設置爲false,而且要認真停止該topic的生產和消費程序。

  如果此時還有一些可能會有信息殘留在zookeeper中,可以手動刪除zookeeper中的相關信息。

# 找一個安裝了 zookeeper 集羣的機器
[yangqi@xiaoer kafka-2.3.1]$ zkCli.sh -server xiaoer:2181,yangqi1:2181,yangqi2:2181

# 刪除該 topic 的信息
[zk: xiaoer:2181,yangqi1:2181,yangqi2:2181(CONNECTED) 0] rm /kafka/brokers/topics/test1
生產消息
# 查看生產消息腳本的幫助
[yangqi@xiaoer kafka-2.3.1]$ ./bin/kafka-console-producer.sh

# 生產消息
[yangqi@xiaoer kafka-2.3.1]$ ./bin/kafka-console-producer.sh --broker-list xiaoer:9092,yangqi1:9092,yangqi2:9092 --topic test
>my test message is 1
>my test message is 2
>my test message is 3
>this is ok
消費消息
# 查看消費消息腳本的幫助
[yangqi@xiaoer kafka-2.3.1]$ ./bin/kafka-console-consumer.sh

# 消費消息
[yangqi@xiaoer kafka-2.3.1]$ ./bin/kafka-console-consumer.sh --bootstrap-server xiaoer:9092,yangqi1:9092,yangqi2:9092 --from-beginning --topic test
創建消費者組
命令不可創建消費者組,當使用 API 創建時,不存在則會自動創建
消費者組列表

  每一個消費者都屬於一個消費者組,如果沒有指定,則將會生成一個。查看consumer group列表有新、舊兩種命令,分別查看新版(信息保存在broker中)consumer列表和老版(信息保存在zookeeper中)consumer列表,因而需要區分指定bootstrap-serverzookeeper參數。

# 新版命令
[yangqi@xiaoer kafka-2.3.1]$ ./bin/kafka-consumer-groups.sh --bootstrap-server xiaoer:9092,yangqi1:9092,yangqi2:9092 --list

# 老版命令(很多版本已經不兼容)
[yangqi@xiaoer kafka-2.3.1]$ ./bin/kafka-consumer-groups.sh --list --zookeeper xiaoer:2181,yangqi1:2181,yangqi2:2181/kafka
刪除消費者組
# 新版命令
[yangqi@xiaoer kafka-2.3.1]$ ./bin/kafka-consumer-groups.sh --delete --bootstrap-server xiaoer:9092,yangqi1:9092,yangqi2:9092 --group group-test

# 老版命令(要求在 zookeeper 中要存在)
[yangqi@xiaoer kafka-2.3.1]$ ./bin/kafka-consumer-groups.sh --delete --zookeeper xiaoer:2181,yangqi1:2181,yangqi2:2181/kafka --group group-test

在這裏插入圖片描述

查看消費位置
# 查看消費位置(0.9.x 版本)
[yangqi@xiaoer kafka-2.3.1]$ ./bin/kafka-run-class.sh kafka.tools.ConsumerOffsetChecker --bootstrap-server xiaoer:9092,yangqi1:9092,yangqi2:9092 --topic test

# 隨便開啓一個消費者,找到其 id,即消費組。查看其消費的位置信息。如果消費者組沒被啓用,將不會顯示 CONSUMER-ID 及以後的信息
# 消費消息(在 xiaoer 機器上)
[yangqi@xiaoer kafka-2.3.1]$ ./bin/kafka-console-consumer.sh --bootstrap-server xiaoer:9092,yangqi1:9092,yangqi2:9092 --from-beginning --topic test
# 消費者組列表(在 yangqi1 機器上)
[yangqi@xiaoer kafka-2.3.1]$ ./bin/kafka-consumer-groups.sh --bootstrap-server xiaoer:9092,yangqi1:9092,yangqi2:9092 --list
# 查看消費者組(在 yangqi1 機器上)
[yangqi@xiaoer kafka-2.3.1]$ ./bin/kafka-consumer-groups.sh --bootstrap-server xiaoer:9092,yangqi1:9092,yangqi2:9092 --describe --group console-consumer-37253

在這裏插入圖片描述

平衡leaderd

  當一個broker停止或者崩潰時,這個broker中所有分區的leader將轉移給其他副本。這意味着在默認情況下,當這個broker重啓之後,它的所有分區都將僅作爲follower,不再用於客戶端的讀寫操作。不過,在Kafka中有一個副本被稱爲優先副本(preferred replicas)的概念。如果一個分區有3個副本,且這3個副本的優先級分別爲1,5,9,根據優先副本的概念,第一個副本1會作爲5和9副本的leader。爲了使Kafka集羣恢復默認的leader,可以選擇手動和自動另種平衡方式。

# 手動平衡 leader 命令
[yangqi@xiaoer kafka-2.3.1]$ ./bin/kafka-preferred-replica-election.sh --zookeeper xiaoer:2181,yangqi1:2181,yangqi2:2181/kafka

# 自動平衡 leader 操作
# Kafka 爲我們提供了一個參數,可以使得 Kafka 集羣自動平衡 leader,只需要在 server.properties 文件中配置如下配置:
auto.leader.rebalance.enable=true
# 這個值是默認開啓的
Kafka壓測命令

  測試意義:驗證每臺服務器上Kafka寫入消息和消費消息的能力,根據測試結果評估當前Kafka集羣模式是否滿足上億級別的消息處理能力。

  測試方法:在服務器上使用Kafka自帶的測試腳本,分別模擬10w100w1000w的消息寫入請求,查看Kafka處理不同數量級的消息數時的處理能力,包括每秒生成消息數、吞吐量、消息延遲時間。Kafka消息創建topic命名爲test-pref,使用命令發起消費該topic的請求,查看Kafka消費不同數量級別的消息時的處理能力。

# 創建主題
[yangqi@xiaoer kafka-2.3.1]$ ./bin/kafka-topics.sh --create --zookeeper xiaoer:2181,yangqi1:2181,yangqi2:2181/kafka --replication-factor 1 --partitions 3 --topic test-pref
# 列出所有主題
[yangqi@xiaoer kafka-2.3.1]$ ./bin/kafka-topics.sh --list --zookeeper xiaoer:2181,yangqi1:2181,yangqi2:2181/kafka
10w條數據壓力測試
# 寫入 10w 條消息
[yangqi@xiaoer kafka-2.3.1]$ ./bin/kafka-producer-perf-test.sh --topic test-pref --num-records 100000 --record-size 1000 --throughput 2000 --producer-props bootstrap.servers=xiaoer:9092,yangqi1:9092,yangqi2:9092
# 消費 10w 條消息
[yangqi@xiaoer kafka-2.3.1]$ ./bin/kafka-consumer-perf-test.sh --broker-list xiaoer:9092,yangqi:9092,yangqi2:9092 --topic test-pref --fetch-size 1048576 --messages 100000 --threads 1

在這裏插入圖片描述

100w條數據壓力測試
# 寫入 100w 條消息
[yangqi@xiaoer kafka-2.3.1]$ ./bin/kafka-producer-perf-test.sh --topic test-pref --num-records 1000000 --record-size 2000 --throughput 5000 --producer-props bootstrap.servers=xiaoer:9092,yangqi1:9092,yangqi2:9092
# 消費 100w 條消息
[yangqi@xiaoer kafka-2.3.1]$ ./bin/kafka-consumer-perf-test.sh --broker-list xiaoer:9092,yangqi1:9092,yangqi2:9092 --topic test-pref --fetch-size 1048576 --messages 1000000 --threads 1

在這裏插入圖片描述

副本管理
# default.replication.factor
每個 Partition 有幾個副本,默認是 1,即只有 1 個副本(即不做備份)。創建時可以指定,但是創建後不能通過 alter 進行修改。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章