1.下载kafka安装包并解压
# wget https://dlcdn.apache.org/kafka/2.6.2/kafka_2.13-2.6.2.tgz
# tar -zxvf kafka_2.13-2.6.2.tgz -C /home/hadoop/app/
# ln -s /home/hadoop/app/kafka_2.13-2.6.2 /home/hadoop/app/kafka
2.修改配置文件/home/hadoop/app/kafka/config
# cd /home/hadoop/app/kafka/config
# vim server.properties
broker.id=1
log.dirs=/home/hadoop/data/kafka/kafka-logs
zookeeper.connect=dba-01:2181,dba-02:2181,dba-03:2181,dba-04:2181,dba-05:2181/kafka
listeners=PLAINTEXT://dba-01:9092 --集群模式必须配置,否则以后的操作会报找不到leader的错误
参数说明:
【broker.id】:每个broker都必须自己设置的一个唯一id,可以在0~255之间
【log.dirs】:这个极为重要,kafka的所有数据就是写入这个目录下的磁盘文件中的,如果说机器上有多块物理硬盘,那么可以把多个目录挂载到不同的物理硬盘上,然后这里可以设置多个目录,这样kafka可以数据分散到多块物理硬盘,多个硬盘的磁头可以并行写,这样可以提升吞吐量。ps:多个目录用英文逗号分隔
【zookeeper.connect】:连接kafka底层的zookeeper集群的
【Listeners】:broker监听客户端发起请求的端口号,默认是9092
【num.network.threads】默认值为3
【num.io.threads】默认值为8,细心的朋友们应该已经发现了,这就是上一篇我们在网络架构上提到的processor和处理线程池的线程数目。所以说掌握Kafka网络架构显得尤为重要。现在你看到这两个参数,就知道这就是Kafka集群性能的关键参数了【unclean.leader.election.enable】 默认是false,意思就是只能选举ISR列表里的follower成为新的leader,1.0版本后才设为false,之前都是true,允许非ISR列表的follower选举为新的leader
【delete.topic.enable】 默认true,允许删除topic
【log.retention.hours】可以设置一下,要保留数据多少个小时,这个就是底层的磁盘文件,默认保留7天的数据,根据自己的需求来就行了
【min.insync.replicas】acks=-1(一条数据必须写入ISR里所有副本才算成功),你写一条数据只要写入leader就算成功了,不需要等待同步到follower才算写成功。但是此时如果一个follower宕机了,你写一条数据到leader之后,leader也宕机,会导致数据的丢失。
3.配置环境变量(broker节点都要配置)
# vim ~/.bash_profile
#KAFKA_HOME
export KAFKA_HOME=/home/hadoop/app/kafka
export PATH=$PATH:$KAFKA_HOME/bin
#source ~/.bash_profile
4.启动集群
# kafka-server-start.sh -daemon $KAFKA_HOME/config/server.properties
5.关闭集群
# kafka-server-stop.sh
6.集群测试
# 测试生产数据
# kafka-producer-perf-test.sh --topic test-topic --num-records 500000 --record-size 200 --throughput -1 --producer-props bootstrap.servers=dba-03:9092,dba-04:9092,dba-05:9092 acks=-1
# 测试消费数据
# kafka-consumer-perf-test.sh --broker-list dba-03:9092,dba-04:9092,dba-05:9092 --fetch-size 2000 --messages 500000 --topic test-topic
6.1.生产者
6.1.1 batch.size(所处理的数据批次大小)
./bin/kafka-producer-perf-test.sh --topic kf_perfromance_test --num-records 1000000 --record-size 687 --producer-props bootstrap.servers=dba-01:9092,dba-02:9092,dba-03:9092 batch.size=5000 --throughput 30000
./bin/kafka-producer-perf-test.sh --topic kf_perfromance_test --num-records 1000000 --record-size 687 --producer-props bootstrap.servers=dba-01:9092,dba-02:9092,dba-03:9092 batch.size=10000 --throughput 30000
./bin/kafka-producer-perf-test.sh --topic kf_perfromance_test --num-records 1000000 --record-size 687 --producer-props bootstrap.servers=dba-01:9092,dba-02:9092,dba-03:9092 batch.size=20000 --throughput 30000
./bin/kafka-producer-perf-test.sh --topic kf_perfromance_test --num-records 1000000 --record-size 687 --producer-props bootstrap.servers=dba-01:9092,dba-02:9092,dba-03:9092 batch.size=40000 --throughput 30000
./bin/kafka-producer-perf-test.sh --topic kf_perfromance_test --num-records 1000000 --record-size 687 --producer-props bootstrap.servers=dba-01:9092,dba-02:9092,dba-03:9092 batch.size=60000 --throughput 30000
./bin/kafka-producer-perf-test.sh --topic kf_perfromance_test --num-records 1000000 --record-size 687 --producer-props bootstrap.servers=dba-01:9092,dba-02:9092,dba-03:9092 batch.size=80000 --throughput 30000
结论:批次越大,处理时间延迟越小。批次为5000时,吞吐能力最强,整体吞吐能力相差不大。
6.1.2 throughput(吞吐量,单位时间内处理消息的数量)
./bin/kafka-producer-perf-test.sh --topic kf_perfromance_test --num-records 10000000 --record-size 687 --producer-props bootstrap.servers=dba-01:9092,dba-02:9092,dba-03:9092 batch.size=40000 --throughput 100000
./bin/kafka-producer-perf-test.sh --topic kf_perfromance_test --num-records 10000000 --record-size 687 --producer-props bootstrap.servers=dba-01:9092,dba-02:9092,dba-03:9092 batch.size=40000 --throughput 250000
./bin/kafka-producer-perf-test.sh --topic kf_perfromance_test --num-records 10000000 --record-size 687 --producer-props bootstrap.servers=dba-01:9092,dba-02:9092,dba-03:9092 batch.size=40000 --throughput 350000
./bin/kafka-producer-perf-test.sh --topic kf_perfromance_test --num-records 10000000 --record-size 687 --producer-props bootstrap.servers=dba-01:9092,dba-02:9092,dba-03:9092 batch.size=40000 --throughput 400000
./bin/kafka-producer-perf-test.sh --topic kf_perfromance_test --num-records 10000000 --record-size 687 --producer-props bootstrap.servers=dba-01:9092,dba-02:9092,dba-03:9092 batch.size=40000 --throughput 500000
./bin/kafka-producer-perf-test.sh --topic kf_perfromance_test --num-records 10000000 --record-size 687 --producer-props bootstrap.servers=dba-01:9092,dba-02:9092,dba-03:9092 batch.size=40000 --throughput 600000
7.kafka集群监控(待续)