Kafka入门第四课:Kafka节点数、分区数、分区副本数设置及Kafka压力测试

一、分区副本数设置
	由于分区副本仅提供数据冗余的功能,且分区副本数量与集群吐吞量负相关,故冗余度在满足安全要求基础上设置为最小即可。
	故我们不妨将分区副本数设置为2.


二、kafka分区数设置
通过对单个分区的topic进行消费者和生产者的压力测试,得出单个分区所能提供的消费和生产的最大峰值吐吞量。
1、创建只有一个分区的topic。
kafka-topics.sh --create \
--zookeeper Linux001:2181   \
--partitions 1   \
--replication-factor 2 \
--topic test 

2、测试该topic的producer峰值吞吐量Tp
kafka-producer-pref-test.sh \
--producer-props bootstrap.servers=${bootstrap.servers} \
--producer.config ${KAFKA_HOME}/config/producer.properties \
--topic test \
--record-size 900000 \  (根据你们的业务进行配置)
--num-records 10000000 \
--throughput -1 
	--producer-prop参数下还可以额外指定其他键值对,如"acks=1"
	--throughput 代表每秒发多少条消息,-1代表不限流
测试环境测得约为Tp=80MB/s。  

3、测试该topic的consumer峰值吞吐量Tc
kafka-consumer-pref-test.sh \
--broker-list ${bootstrap.servers} \
--consumer.config=${KAFKA_HOME}/config/consumer.properties \
--topic test \
--messages 10000000 \
--reporting-interval 1000 \
--show-detailed-stats
 测试环境测得约为Tc=90MB/s。

4、计算所需要的topic分区数
假设你需要的目标吞吐量为T,则分区数num=T/min(Tp,Tc)。
分母取最小值表明即使取消费者额生产者的最小吞吐量,只要设置为num的分区数,仍能达到目标吐吞量要求。

假设我们需要的吐吞量为100MB/s,则分区数num=100/min(80,90)=2

由于消费者Flink数量为3台,为保证充分利用flink计算资源,避免flink消费者空转,我们不妨将Kafka的topic分区设置为3。
后续若业务升级再动态扩容topic分区到6个、9个、12个...保持与flink消费者数n:1的关系。
动态扩容topic分区命令:
 kafka-topics.sh --alter \
 --zookeeper ${zookeeper.url}  \
 --partitions 6	\
 --topic t001 	

三、kafka生产者性能优化测试
我们设置好topic的分区数、分区副本数后,可以使用控制变量的方式来测试,寻找公司集群上各参数的最佳值。
会影响生产端吞吐量的参数:batch.size\longer.ms\acks\,这些参数都可以在--producer-props参数后。
其他参数还有:压缩格式、网络带宽。

四、kafka消费者性能优化测试
我们设置好topic的分区数、分区副本数后,可以使用控制变量的方式来测试,寻找公司集群上各参数的最佳值。
会影响消费端吞吐量的参数:--fetch-size\--threads
其他参数还有:压缩格式、网络带宽。

五、kafka机器节点数量设置
	n=2*(峰值生产速度*副本数/100)+1
	更关注峰值生产速度是为了避免数据在业务层积压。

上一篇:python 将xmind用例转换为excel用例


下一篇:uniapp中mqtt的基本使用