kafka 经验

1、数据丢失和重复

        kafka  ack

        设置为0 不等leader落盘直接确认回复 leader挂了 数据丢失

        设置为1 时 leader落盘后不等所有副本全部落盘 确认回复  leader 挂了 选举新leader 无此数据 数据丢失

        ACK设置为-1 leader和副本都落盘后确认回复 如果在落盘完成之后 leader回复之前leader挂了  数据会重复读取    

2、Kafka压测

用Kafka官方自带的脚本,对Kafka进行压测。Kafka压测时,可以查看到哪个地方出现了瓶颈(CPU,内存,网络IO)。一般都是网络IO达到瓶颈

kafka-consumer-perf-test.sh

kafka-producer-perf-test.sh

1)Kafka Producer压力测试

(1)在/opt/module/kafka/bin目录下面有这两个文件。我们来测试一下

[1@hadoop102 kafka]$ bin/kafka-producer-perf-test.sh  --topic test --record-size 1000 --num-records 100000 --throughput 1150 --producer-props bootstrap.servers=hadoop102:9092,hadoop103:9092,hadoop104:9092

说明:record-size是一条信息有多大,单位是字节。num-records是总共发送多少条信息。throughput 是每秒多少条信息。

速率=(record-size * throughput)/1024/1024M

每天的数据量 根据公司数据规模自己设定 以10万为例  一亿条数据平均每秒1150条左右

此处生产数据的速率是0.1M/sec 根据数据量进行计算自己需要测试的生产速度集群能不能跟上 

(2)Kafka会打印下面的信息

5751 records sent, 1149.3 records/sec (1.10 MB/sec), 5.6 ms avg latency, 169.0 max latency.

5773 records sent, 1154.1 records/sec (1.10 MB/sec), 1.8 ms avg latency, 21.0 max latency.

5754 records sent, 1150.8 records/sec (1.10 MB/sec), 6.8 ms avg latency, 211.0 max latency.

5751 records sent, 1150.2 records/sec (1.10 MB/sec), 4.3 ms avg latency, 34.0 max latency.

5753 records sent, 1149.9 records/sec (1.10 MB/sec), 8.9 ms avg latency, 93.0 max latency.

5751 records sent, 1150.0 records/sec (1.10 MB/sec), 1.9 ms avg latency, 11.0 max latency.

5755 records sent, 1151.0 records/sec (1.10 MB/sec), 3.7 ms avg latency, 95.0 max latency.

5749 records sent, 1149.8 records/sec (1.10 MB/sec), 4.1 ms avg latency, 47.0 max latency.

5754 records sent, 1150.3 records/sec (1.10 MB/sec), 2.7 ms avg latency, 42.0 max latency.

5755 records sent, 1151.0 records/sec (1.10 MB/sec), 2.1 ms avg latency, 27.0 max latency.

5752 records sent, 1150.2 records/sec (1.10 MB/sec), 2.1 ms avg latency, 36.0 max latency.

5750 records sent, 1148.4 records/sec (1.10 MB/sec), 2.3 ms avg latency, 28.0 max latency.

5764 records sent, 1152.1 records/sec (1.10 MB/sec), 2.9 ms avg latency, 63.0 max latency.

5753 records sent, 1150.1 records/sec (1.10 MB/sec), 3.2 ms avg latency, 81.0 max latency.

5756 records sent, 1150.5 records/sec (1.10 MB/sec), 2.4 ms avg latency, 31.0 max latency.

5755 records sent, 1150.5 records/sec (1.10 MB/sec), 2.3 ms avg latency, 50.0 max latency.

5752 records sent, 1150.2 records/sec (1.10 MB/sec), 1.0 ms avg latency, 10.0 max latency.

100000 records sent, 1149.980450 records/sec (1.10 MB/sec), 3.36 ms avg latency, 211.00 ms max latency, 2 ms 50th, 6 ms 95th, 42 ms 99th, 132 ms 99.9th.

参数解析:本例中一共写入10w条消息,每秒向Kafka写入了1.1MB的数据,平均是1000条消息/秒,每次写入的平均延迟为3.36毫秒,最大的延迟为211毫秒。平均延迟 根据需求计算延迟能不能接受 如果是1秒钟就不能接受。算实时指标时,要求3秒内算出结果 对延迟要求很高。

2)Kafka Consumer压力测试

Consumer的测试,如果这四个指标(IO,CPU,内存,网络)都不能改变,考虑增加分区数来提升性能。

[1@hadoop102 kafka]$

bin/kafka-consumer-perf-test.sh --zookeeper hadoop102:2181 --topic test --fetch-size 10000 --messages 10000000 --threads 1

参数说明:

--zookeeper 指定zookeeper的链接信息

--topic 指定topic的名称

--fetch-size 指定每次fetch的数据的大小

--messages 总共要消费的消息个数

threads 线程数

测试结果说明:

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条。


3、Kafka机器数量(经验公式)=2*(峰值生产速度*副本数/100)+1

先要预估一天大概产生多少数据,然后用Kafka自带的生产压测(只测试Kafka的写入速度,保证数据不积压),计算出峰值生产速度。再根据设定的副本数,就能预估出需要部署Kafka的数量。

比如我们采用压力测试测出写入的速度是10M/s一台,峰值的业务数据的速度是50M/s。副本数为2。

Kafka机器数量=2*(50*2/100)+ 1=3台

发布了48 篇原创文章 · 获赞 5 · 访问量 1189

猜你喜欢

转载自blog.csdn.net/qq_34897849/article/details/102691065
今日推荐