使用https://github.com/strimzi/strimzi-kafka-operator
开源项目部署kafka
,首先部署kubernetes
持久化存储nfs-subdir-external-provisioner
。
helm install nfs-subdir-external-provisioner ./helm --set nfs.server=192.168.50.103 --set nfs.path=/var/nfs
kubectl patch storageclass nfs-client -p '{"metadata": {"annotations":{"storageclass.kubernetes.io/is-default-class":"true"}}}'
部署kafka
kubectl create -f strimzi-0.20.1/install/cluster-operator
kubectl create -f strimzi-0.20.1/examples/kafka/kafka-persistent.yaml
创建topic
kubectl create -f strimzi-0.20.1/examples/topic/kafka-topic.yaml
部署zoo-entrance
,因为strimzi kafka
集群的zookeeper
集群安全性考虑默认不能被外部访问,因此部署访问代理zoo-entrance
。
kubectl apply -f zoo-entrance-master/deploy.yaml
kafka
操作
查看topic
root@bionic-1:/home/test# kubectl exec -it my-cluster-kafka-1 bash
kubectl exec [POD] [COMMAND] is DEPRECATED and will be removed in a future version. Use kubectl kubectl exec [POD] -- [COMMAND] instead.
[kafka@my-cluster-kafka-1 kafka]$ bin/kafka-topics.sh --list --zookeeper zoo-entrance:2181
__consumer_offsets
connect-cluster-configs
connect-cluster-offsets
connect-cluster-status
my-topic
生产数据
bin/kafka-console-producer.sh --broker-list my-cluster-kafka-bootstrap:9092 --topic my-topic
消费数据
bin/kafka-console-consumer.sh --bootstrap-server my-cluster-kafka-bootstrap:9092 --topic my-topic --from-beginning
用Kafka
官方自带的脚本,对Kafka
进行压测。Kafka
压测时,可以查看到哪个地方出现了瓶颈(CPU
,内存,网络IO
)。一般都是网络IO
达到瓶颈。
kafka-consumer-perf-test.sh
kafka-producer-perf-test.sh
2)Kafka Producer
压力测试
(1)在/opt/module/kafka/bin
目录下面有这两个文件。我们来测试一下
[atguigu@hadoop102 kafka]$ bin/kafka-producer-perf-test.sh --topic test --record-size 100 --num-records 100000 --throughput 1000 --producer-props bootstrap.servers=my-cluster-kafka-plain-bootstrap:9092
说明:record-size
是一条信息有多大,单位是字节。num-records
是总共发送多少条信息。throughput
是每秒多少条信息。
(2)Kafka
会打印下面的信息
5000 records sent, 999.4 records/sec (0.10 MB/sec), 1.9 ms avg latency, 254.0 max latency.
5002 records sent, 1000.4 records/sec (0.10 MB/sec), 0.7 ms avg latency, 12.0 max latency.
5001 records sent, 1000.0 records/sec (0.10 MB/sec), 0.8 ms avg latency, 4.0 max latency.
5000 records sent, 1000.0 records/sec (0.10 MB/sec), 0.7 ms avg latency, 3.0 max latency.
5000 records sent, 1000.0 records/sec (0.10 MB/sec), 0.8 ms avg latency, 5.0 max latency.
参数解析:本例中一共写入10w
条消息,每秒向Kafka
写入了0.10MB
的数据,平均是1000
条消息/秒,每次写入的平均延迟为0.8
毫秒,最大的延迟为254
毫秒。
3)Kafka Consumer压力测试
Consumer
的测试,如果这四个指标(IO,CPU,
内存,网络)都不能改变,考虑增加分区数来提升性能。
[atguigu@hadoop102 kafka]$
bin/kafka-consumer-perf-test.sh --bootstrap-server my-cluster-kafka-plain-bootstrap:9092 --topic test --fetch-size 10000 --messages 10000000 --threads 1
参数说明:
–zookeeper
指定zookeeper
的链接信息
–topic
指定topic
的名称
–fetch-size
指定每次fetch
的数据的大小
–messages
总共要消费的消息个数
测试结果说明:
start.time, end.time, data.consumed.in.MB, MB.sec, data.consumed.in.nMsg, nMsg.sec
2019-02-19 20:29:07:566, 2019-02-19 20:29:12:170, 9.5368, 2.0714, 100010, 21722.4153
开始测试时间,测试结束数据,最大吞吐率9.5368MB/s
,平均每秒消费2.0714MB/s
,最大每秒消费100010
条,平均每秒消费21722.4153
条。
Kafka
机器数量(经验公式)=2*(峰值生产速度 * 副本数/100)+1
先要预估一天大概产生多少数据,然后用Kafka
自带的生产压测(只测试Kafka
的写入速度,保证数据不积压),计算出峰值生产速度。再根据设定的副本数,就能预估出需要部署Kafka
的数量。
比如我们采用压力测试测出写入的速度是10M/s
一台,峰值的业务数据的速度是50M/s
。副本数为2
。
Kafka
机器数量=2*(50*2/100)+ 1=3台
kafka-manager
是用于管理kafka
集群的web
端。
通过helm3 部署
helm install cmak-operator ./cmak-operator --create-namespace -n cmak-ns
界面上配置管理多套kafka
集群。
每个kafka
集群可以查看和配置topic
,查看brokers
和Consumers
。
运维