有层次有深度分析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的四个消费者

有一个消费者不会消费消息


分享到:


相關文章: