服务器
测试服务器
172.21.195.89, 172.21.195.90, 172.21.195.91
测试服务器配置
- CPU:4核,Intel Core Processor (Broadwell),2198.724 MHZ
- 内存:8G
- 网络:万兆网
- 磁盘:NAS存储
CPU详细信息:1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103processor : 0
vendor_id : GenuineIntel
cpu family : 6
model : 60
model name : Intel Core Processor (Haswell, no TSX)
stepping : 1
microcode : 0x1
cpu MHz : 2593.992
cache size : 4096 KB
physical id : 0
siblings : 1
core id : 0
cpu cores : 1
apicid : 0
initial apicid : 0
fpu : yes
fpu_exception : yes
cpuid level : 13
wp : yes
flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 ss syscall nx pdpe1gb rdtscp lm constant_tsc rep_good nopl eagerfpu pni pclmulqdq ssse3 fma cx16 pcid sse4_1 sse4_2 x2apic movbe popcnt tsc_deadline_timer aes xsave avx f16c rdrand hypervisor lahf_lm abm arat fsgsbase bmi1 avx2 smep bmi2 erms invpcid xsaveopt
bogomips : 5187.98
clflush size : 64
cache_alignment : 64
address sizes : 40 bits physical, 48 bits virtual
power management:
processor : 1
vendor_id : GenuineIntel
cpu family : 6
model : 60
model name : Intel Core Processor (Haswell, no TSX)
stepping : 1
microcode : 0x1
cpu MHz : 2593.992
cache size : 4096 KB
physical id : 1
siblings : 1
core id : 0
cpu cores : 1
apicid : 1
initial apicid : 1
fpu : yes
fpu_exception : yes
cpuid level : 13
wp : yes
flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 ss syscall nx pdpe1gb rdtscp lm constant_tsc rep_good nopl eagerfpu pni pclmulqdq ssse3 fma cx16 pcid sse4_1 sse4_2 x2apic movbe popcnt tsc_deadline_timer aes xsave avx f16c rdrand hypervisor lahf_lm abm arat fsgsbase bmi1 avx2 smep bmi2 erms invpcid xsaveopt
bogomips : 5187.98
clflush size : 64
cache_alignment : 64
address sizes : 40 bits physical, 48 bits virtual
power management:
processor : 2
vendor_id : GenuineIntel
cpu family : 6
model : 60
model name : Intel Core Processor (Haswell, no TSX)
stepping : 1
microcode : 0x1
cpu MHz : 2593.992
cache size : 4096 KB
physical id : 2
siblings : 1
core id : 0
cpu cores : 1
apicid : 2
initial apicid : 2
fpu : yes
fpu_exception : yes
cpuid level : 13
wp : yes
flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 ss syscall nx pdpe1gb rdtscp lm constant_tsc rep_good nopl eagerfpu pni pclmulqdq ssse3 fma cx16 pcid sse4_1 sse4_2 x2apic movbe popcnt tsc_deadline_timer aes xsave avx f16c rdrand hypervisor lahf_lm abm arat fsgsbase bmi1 avx2 smep bmi2 erms invpcid xsaveopt
bogomips : 5187.98
clflush size : 64
cache_alignment : 64
address sizes : 40 bits physical, 48 bits virtual
power management:
processor : 3
vendor_id : GenuineIntel
cpu family : 6
model : 60
model name : Intel Core Processor (Haswell, no TSX)
stepping : 1
microcode : 0x1
cpu MHz : 2593.992
cache size : 4096 KB
physical id : 3
siblings : 1
core id : 0
cpu cores : 1
apicid : 3
initial apicid : 3
fpu : yes
fpu_exception : yes
cpuid level : 13
wp : yes
flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 ss syscall nx pdpe1gb rdtscp lm constant_tsc rep_good nopl eagerfpu pni pclmulqdq ssse3 fma cx16 pcid sse4_1 sse4_2 x2apic movbe popcnt tsc_deadline_timer aes xsave avx f16c rdrand hypervisor lahf_lm abm arat fsgsbase bmi1 avx2 smep bmi2 erms invpcid xsaveopt
bogomips : 5187.98
clflush size : 64
cache_alignment : 64
address sizes : 40 bits physical, 48 bits virtual
power management:
Kafka
Kafka broker配置
JVM参数:-Xmx4G –Xms4G –Xmn3G。其他采用Kafka默认JVM配置。
Kafka参数:
- 关闭消息刷盘,由操作系统进行刷盘,且官方推荐这样配置,能最大化保证吞吐量。
- Log segment大小为500M,经测试配置为1G时,基本无性能影响。因为 Kafka 的写日志为append模式,与日志大小无关。
- 单Partition总日志大小上限为5G(考虑服务器磁盘空间可能不足)。
- 日志清除时间为10mins(考虑服务器磁盘空间可能不足)。
- 其他配置参见 Kafka 最佳实践。
Kafka测试方案
- 新建topic: topic_log_replica_6_1,表示该topic有6个partition(多partition,为了增大吞吐量),1个replication(即无备份,消除replica同步的影响,提升吞吐量)
- 新建topic: topic_log_replica_1_1,表示该topic有1个partition,1个replication(即无备份,消除replica同步的影响,提升吞吐量)
- 单producer进程实例,进程内启动1000个并发线程,每个线程循环1000次。
- 消息大小分别为100byte,1k,4k,10k,20k,40k,100k,200k,400k。
- 分别进行acks=0和acks=1时的性能测试。
- JVM参数:-Xmx4G –Xms4G –Xmn3G –Xss256k(数据为400k时,采用-Xss512k)。
- 消息体较大时,并发线程适当减少
Log4j&Log4j2
这一部分的测试主要分为三个部分,Log4j,Log4j2 Sync(Log4j2 同步模式),Log4j2 Async(Log4j2 异步模式)
Log4j&Log4j2测试方案
- 单进程实例,进程内1000个并发线程写日志,每个线程循环1000次
- 每条日志大小分别为100byte,1k,4k,10k,20k,40k,100k,200k,400k。
- JVM参数:-Xmx4G –Xms4G –Xmn3G –Xss256k(数据为400k时,采用-Xss512k)。
- 消息体较大时,并发线程适当减少
性能测试结果
性能测试结果TPS对比:
100byte | 1k | 4k | 10k | 20k | 40k | 100k | 200k | 400k | |
---|---|---|---|---|---|---|---|---|---|
Log4j | 252080 | 88550 | 41220 | 21886 | 12498 | 7000 | 2808 | 1366 | 763 |
Log4j2 Sync | 302847 | 154250 | 47542 | 23629 | 13342 | 7147 | 2824 | 1466 | 837 |
Log4j2 Async | 1244942 | 351865 | 75307 | 33799 | 17213 | 8300 | 3086 | 1714 | 944 |
Kafka Partion=6 Replica=1 Acks=0 | 1285314 | 343434 | 117955 | 49906 | 24904 | 13761 | 6484 | 3463 | 1623 |
Kafka Partion=6 Replica=1 Acks=1 | 1274192 | 340797 | 111610 | 49134 | 23887 | 12178 | 6255 | 3067 | 1527 |
Kafka Partion=1 Replica=1 Acks=0 | 1272578 | 238823 | 81231 | 32914 | 16548 | 8980 | 4777 | 2673 | 1360 |
Kafka Partion=1 Replica=1 Acks=1 | 1286008 | 233131 | 80089 | 32497 | 16148 | 7986 | 4472 | 2561 | 1355 |
Kafka Partion=6 Replica=3 Acks=0 | 1074183 | 214996 | 58859 | 26446 | 12519 | 5634 | 1980 | 1073 | 564 |
Kafka Partion=6 Replica=3 Acks=1 | 1096138 | 214325 | 62529 | 26456 | 13047 | 4473 | 2444 | 988 | 512 |
Kafka Partion=6 Replica=3 Acks=all | 992194 | 148245 | 40282 | 16249 | 8452 | 3230 | 1826 | 1001 | 503 |
注:
- 以上测试每一项均经过5~10次不等的测试,取最高值。
- 当消息体大小为100K~400K时,采用8~200的并发线程进行性能测试。
- Kafka 的性能测试均值比较接近于最高值。
- Log4j的性能测试均值与最高值相差较大。
- Log4j2的性能优于Log4j很多。
- 当replica=1时,Acks=1 和 Acks=all 效果是均等的,所以当 Partion=6 Replica=1 和 Partion=1 Replica=1 时,只给出了 Acks=0 和 Acks=1 的测试数据。当 Partion=6 Replica=3 时,给出了 Acks=0 、 Acks=1 和 Acks=all 的测试数据。
测试结论
- Kafka 性能全面优于Log4j和Log4j2。
- 集群共用同一个NAS存储,因此同时进行写磁盘操作,会对性能造成影响。
- Kafka-producer单进程对 Kafka 集群进行性能测试,无法压满 Kafka 集群的全部能力。
- Kafka 集群性能瓶颈在磁盘I/O,当网络I/O不存在瓶颈时,基本可以达到磁盘能写入多少数据,Kafka 内存就可以接收多少数据。
- Kafka-producer API默认采用异步发送模式,因此acks=0和acks=1性能测试结果比较接近。但是acks=all时,性能就差很多。