有層次有深度分析Kafka Partition策略,Consumer Rebalance策略

一、分片策略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的四個消費者

有一個消費者不會消費消息


分享到:


相關文章: