一、分片策略partition測試
1、基本原理
為了使得Kafka的吞吐率可以水平擴展,物理上又把topic分成一個或多個partition,每個partition在物理上對應一個文件夾,該文件夾下存儲這個partition的所有消息和索引文件。創建topic時可指定parition數量。
2、實戰演練測試
代碼下載地址:https://gitee.com/jikeh/JiKeHCN-RELEASE.git
項目名:spring-boot-kafka-group-consumer
詳細執行步驟:
- 建立三個broker,三個副本,三個partition的topic:jikeh-multi-topic
[root@jikeh kafka_2.12-1.0.2]# bin/kafka-topics.sh --create --zookeeper localhost:2181 --replication-factor 3 --partitions 3 --topic jikeh
Created topic "jikeh".
- 查看topic的詳情信息
[root@jikeh kafka_2.12-1.0.2]# bin/kafka-topics.sh --describe --zookeeper localhost:2181 --topic jikeh
Topic:jikeh PartitionCount:3 ReplicationFactor:3 Configs:
Topic: jikeh Partition: 0 Leader: 3 Replicas: 3,2,1 Isr: 3,2,1
Topic: jikeh Partition: 1 Leader: 1 Replicas: 1,3,2 Isr: 1,3,2
Topic: jikeh Partition: 2 Leader: 2 Replicas: 2,1,3 Isr: 2,1,3
- 開啟一個生產者,生產消息,查看消息的分佈情況
通過kafka tool來查看每個partition分區的消息分佈情況
二、Consumer Rebalance測試
代碼下載地址:https://gitee.com/jikeh/JiKeHCN-RELEASE.git
項目名:spring-boot-kafka-group-consumer
Kafka通過Zookeeper管理集群配置,在consumer group發生變化時(如:某個consumer因故障下線時)進行rebalance。
- 如果某consumer group中consumer數量少於partition數量,則至少有一個consumer會消費多個partition的數據,
- 如果consumer的數量與partition數量相同,則正好一個consumer消費一個partition的數據,
- 而如果consumer的數量多於partition的數量時,會有部分consumer無法消費該topic下任何一條消息。
場景測試:
- 開啟一個生產者,開啟同屬於一個group的三個消費者
消費的消息基本均勻分佈
- 開啟一個生產者,開啟同屬於一個group的兩個消費者
一個消費者會消費兩個partition中的數據
- 開啟一個生產者,開啟同屬於一個group的四個消費者
有一個消費者不會消費消息
閱讀更多 極客慧 的文章