Kafka 硬件配置选择
场景说明
100
万日活,每人每天
100
条日志,每天总共的日志条数是
100
万
* 100
条
= 1
亿条。
1
亿
/24
小时
/60
分
/60
秒
= 1150
条
/
每秒钟。
每条日志大小:
0.5k - 2k
(取
1k
)。
1150
条
/
每秒钟
* 1k
≈
1m/s
。
高峰期每秒钟:
1150
条
* 20
倍
= 23000
条。
每秒多少数据量:
20MB/s
。
服务器台数选择
服务器台数
= 2 *
(生产者峰值生产速率
*
副本
/ 100
)
+ 1
= 2 *
(
20m/s * 2 / 100
)
+ 1
= 3
台
建议
3
台服务器。
磁盘选择
kafka
底层主要是
顺序写
,固态硬盘和机械硬盘的顺序写速度差不多。
建议选择普通的机械硬盘。
每天总数据量:
1
亿条
* 1k
≈
100g
100g *
副本
2 *
保存时间
3
天
/ 0.7
≈
1T
建议三台服务器硬盘总大小,大于等于
1T
。
内存选择
Kafka
内存组成:堆内存
+
页缓存(系统内存)
Kafka
堆内存建议每个节点:
10g ~ 15g
查看
Kafka
进程号
jps
查看gc
jstat -gc 9726 1s 10
参数说明:
S0C
:第一个幸存区的大小;
S1C
:第二个幸存区的大小
S0U
:第一个幸存区的使用大小;
S1U
:第二个幸存区的使用大小
EC
:伊甸园区的大小;
EU
:伊甸园区的使用大小
OC
:老年代大小;
OU
:老年代使用大小
MC
:方法区大小;
MU
:方法区使用大小
CCSC:
压缩类空间大小;
CCSU:
压缩类空间使用大小
YGC
:年轻代垃圾回收次数;
YGCT
:年轻代垃圾回收消耗时间
FGC
:老年代垃圾回收次数;
FGCT
:老年代垃圾回收消耗时间
GCT
:垃圾回收消耗总时间;
查看堆内存
jmap -heap 9726
页缓存:页缓存是
Linux
系统服务器的内存。我们只需要保证
1
个
segment
(
1g
)中
25%
的数据在内存中就好。
每个节点页缓存大小
=
(分区数
* 1g * 25%
)
/
节点数。例如
10
个分区,页缓存大小
=
(
10 * 1g * 25%
)
/ 3
≈
1g
建议服务器内存大于等于
11G
。
CPU 选择
num.io.threads = 8
负责写磁盘的线程数,整个参数值要占总核数的
50%
。
num.replica.fetchers = 1
副本拉取线程数,这个参数占总核数的
50%
的
1/3
。
num.network.threads = 3
数据传输线程数,这个参数占总核数的
50%
的
2/3
。
建议
32
个
cpu core
。
网络选择
网络带宽
=
峰值吞吐量 ≈
20MB/s
选择千兆网卡即可。
100Mbps
单位是
bit
;
10M/s
单位是
byte ; 1byte = 8bit
,
100Mbps/8 = 12.5M/s
。
一般百兆的网卡(100Mbps )、千兆的网卡(
1000
Mbps
)、万兆的网卡(
10000
Mbps
)。
压力测试
生产者
bin/kafka-producer-perf-test.sh --topic first --record-size 1024 --num-records 1000000 --throughput 10000 --producer-props bootstrap.servers=hadoop102:9092 batch.size=16384 linger.ms=0
⚫
record-size
是一条信息有多大,单位是字节,本次测试设置为
1k
。
⚫
num-records
是总共发送多少条信息,本次测试设置为
100
万条。
⚫
throughput
是每秒多少条信息,设成
-1
,表示不限流,尽可能快的生产数据,可测出生产者最大吞吐量。本次实验设置为每秒钟 1
万条。
⚫
producer-props
后面可以配置生产者相关参数,
batch.size
配置为
16k
。
消费者
bin/kafka-consumer-perf-test.sh --bootstrap-server hadoop102:9092 - -topic first --messages 1000 --consumer.config config/consumer.properties
⚫
--bootstrap-server
指定
Kafka
集群地址
⚫
--topic
指定
topic
的名称
⚫
--messages
总共要消费的消息个数。本次实验
100
万条。