平时用Kafka也比较多~~~
数据存储被抽象为topic,topic表明了不同数据类型,在broker中可以有很多个topic
Partition 越多,吞吐量越大,在集群数越少时稳定性越差,效率降低
Partition 越多,并发写入硬盘的数据越多如果在同一块硬盘上,会导致数据连续性下降
提前规划好Partition数量通过横向增加集群提高系统稳定性和性能
pagecache 是linux内核的低优先级缓存,在内存空间富裕的情况下才能获得较大的空间。并且kafka不自建缓存(零拷贝,直接内核处理写入磁盘,不进行应用程序的缓存),堆空间需求也比较小。我个人认为Kafka只要能启动起来就好了,留更大的内存空间给系统,以便保证pagecache的分配
/proc/sys/vm/dirty_ratio 这个参数控制文件系统的文件系统写缓冲区的大小,单位是百分比,表示系统内存的百分比,表示当写缓冲使用到系统内存多少的时候,开始向磁盘写出数据。增大 之会使用更多系统内存用于磁盘写缓冲,也可以极大提高系统的写性能。但是,当你需要持续、恒定的写入场合时,应该降低其数值,:
echo '1' > /proc/sys/vm/dirty_ratio
/proc/sys/vm/dirty_background_ratio 这个参数控制文件系统的pdflush进程,在何时刷新磁盘。单位是百分比,表示系统内存的百分比,意思是当写缓冲使用到系统内存多少的时 候,pdflush开始向磁盘写出数据。增大之会使用更多系统内存用于磁盘写缓冲,也可以极大提高系统的写性能。但是,当你需要持续、恒定的写入场合时, 应该降低其数值,:
echo '1' > /proc/sys/vm/dirty_background_ratio
2C4G的kafka集群 JVM配置为1G
使用官方自带的压测工具压测
./kafka-producer-perf-test.sh –topic topic_gb_error –num-records 10000000 –throughput 2000 –producer-props bootstrap.servers=10.142.168.150:9092 –record-size 3000
发送10000000条字节大小为3000的数据 每次发送2000条 CPU为 35.6%
发送10000000条字节大小为3000的数据 每次发送20000条 CPU为 104%
发送10000000条字节大小为30000的数据 每次发送2000条 CPU为 61%
发送10000000条字节大小为3000的数据 峰值大概为3W CPU为 66% 瓶颈在于内存和硬盘读写
系统层面: 1.横向添加机器 2.横向增加硬盘(能用ssd尽量用ssd) 3.内存设置为1G,尽可能的留给系统 4.使用i/o优化实例 5.文件系统格式官方目前推荐XFS,禁用noatime 6.EXT4格式 调整/proc/sys/vm/dirty_background_ratio和/proc/sys/vm/dirty_ratio
kafka配置: 待完善