生产者调优、硬件选择

假设:100万日活,每人每天 100 条日志,每天总共的日志条数是 100 万 * 100 条 = 1 亿条

处理速度=1亿/(24*3600s)=1150条/s

一条日志按1k计算,1150 条/每秒钟 * 1k ≈ 1m/s 。

高峰期每秒钟:1150 条 * 20 倍 = 23000 条。数据量:20MB/s

服务器台数选择

服务器台数= 2 * (生产者峰值生产速率 * 副本 / 100)+ 1 = 2 * (20m/s * 2 / 100) + 1 = 3 台

磁盘选择kafka 底层主要是顺序写,固态硬盘和机械硬盘的顺序写速度差不多

每天总数据量:1 亿条 * 1k ≈ 100g

100g * 副本 2 * 保存时间 3 天 / 0.7 ≈ 1T

建议三台服务器硬盘总大小,大于等于 1T

内存选择:堆内存 + 页缓存

kafka 堆内存建议每个节点:10g ~ 15g,默认是1g

堆内存修改方式

在 kafka-server-start.sh 中修改
if [ "x$KAFKA_HEAP_OPTS" = "x" ]; then
 export KAFKA_HEAP_OPTS="-Xmx10G -Xms10G"
fi

查看 Kafka 的 GC 情况,次数少则不用修改

#Kafka 进程号
jps
#查看 Kafka 的 GC 情况
jstat -gc 进程 ls 10

查看内存使用率

        jmap -heap 进程号

配置页缓存

页缓存是 Linux 系统服务器的内存。我们只需要保证 1 个 segment(1g)中 25%的数据在内存中就好

每个节点页缓存大小 =(分区数 * 1g * 25%)/ 节点数。例如 10 个分区,页缓存大小 =(10 * 1g * 25%)/ 3 ≈ 1g

CPU 选择

kafka中最占cpu的三个线程,总量建议占总cpu的2/3

  • num.io.threads = 8 负责写磁盘的线程数,整个参数值要占总核数的 50%。
  • num.replica.fetchers = 1 副本拉取线程数,这个参数占总核数的 50%的 1/3。
  • num.network.threads = 3 数据传输线程数,这个参数占总核数的 50%的 2/3
Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐