kafka分区和副本机制验证

1.三台机器对应一个分区

目前使用kafka集群,但是由于数据量还行,就不想使用太多的分区,所以只想弄一个分区,网上资料看了一大堆,基本都是些理论和啰嗦,于是乎自己手动来验证下这个情况的好坏。
① 假设是三台机器的kafka集群,创建一个主题one_fb1_fq1,指定副本数1和分区数1,命令:

bin/kafka-topics.sh --create --zookeeper kafka_zk001:2181,kafka_zk002:2181,kafka_zk003:2181 --replication-factor 1 --partitions 1 --topic one_fb1_fq1

查看日志目录/tmp/kafka-logs/发现:只在其中一台机器上存在one_fb1_fq1-0这个目录。

结论:这意味着如果刚好存在one_fb1_fq1-0的这台机器挂掉了,生产者和消费者都不能正常使用,会报错。

② 假设是三台机器的kafka集群,创建一个主题one_fb2_fq1,指定副本数2和分区数1,命令:

bin/kafka-topics.sh --create --zookeeper kafka_zk001:2181,kafka_zk002:2181,kafka_zk003:2181 --replication-factor 2 --partitions 1 --topic one_fb2_fq1

查看日志目录/tmp/kafka-logs/发现:其中有两台机器存在one_fb2_fq1-0这个目录。

结论:可以正常提供服务,只是没有one_fb2_fq1-0目录的那台机器显得有点多余,这不符合集群的目的。

③ 假设是三台机器的kafka集群,创建一个主题one_fb3_fq1,指定副本数3和分区数1,命令:

bin/kafka-topics.sh --create --zookeeper kafka_zk001:2181,kafka_zk002:2181,kafka_zk003:2181 --replication-factor 3 --partitions 1 --topic one_fb3_fq1

查看日志目录/tmp/kafka-logs/发现:三台机器都存在one_fb3_fq1-0这个目录。

结论:可以正常提供服务。

2.三台机器对应三个分区

① 假设是三台机器的kafka集群,创建一个主题two_fb2_fq3,指定副本数2和分区数3,命令:

bin/kafka-topics.sh --create --zookeeper kafka_zk001:2181,kafka_zk002:2181,kafka_zk003:2181 --replication-factor 2 --partitions 3 --topic two_fb2_fq3

查看日志目录/tmp/kafka-logs/发现:机器A存在two_fb2_fq3-0和two_fb2_fq3-1;机器B存在two_fb2_fq3-1和two_fb2_fq3-2;机器C存在two_fb2_fq3-0和two_fb2_fq3-2。

结论:每台机器除了自身目录外,还在另外两台其中之一存在副本。假设挂掉其中任何一台机器,另外两台机器都能够凑齐三个分区 ,所以数据不会丢失,可正常提供服务。

② 假设是三台机器的kafka集群,创建一个主题two_fb3_fq3,指定副本数3和分区数3,命令:

bin/kafka-topics.sh --create --zookeeper kafka_zk001:2181,kafka_zk002:2181,kafka_zk003:2181 --replication-factor 3 --partitions 3 --topic two_fb3_fq3

查看日志目录/tmp/kafka-logs/发现:三台机器都存在two_fb3_fq3-0、two_fb3_fq3-1和two_fb3_fq3-2。

结论:可正常提供服务,也是比较实用的方案。

你可能感兴趣的:(kafka)