一、分片策略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的四个消费者
有一个消费者不会消费消息
閱讀更多 極客慧 的文章