One minute
Kafka Pre Pressure
因为对kafka做了新特性, 需要进行压测, 工作如下:
- 机器选择
- kafka配置
- jmx 指标
- prometheus
- grafana
详细
1.机器选择
根据 kafka官网配置, 我申请了如下的机器配置
CPU:48c RAM:256G HDD:10T*8 Nic:25G
-
faq: 为什么要这么大内存?
- 因为kafka通过mmap读写文件, 为了保证写入的数据能够及时、快速的被读取, 依赖OS Cache, 将mmap写入的数据缓存在系统中, 这样, 读取的数据就会在内存中, 而不是磁盘上. 在高并发写+大量partition部署的时候, 为了保证及时、高效的读取, 系统的缓存需要很大. 在线上, 也经常由于 partition数量过多[申请的topic很多, 每个topic的partition混布在不同的broker上,单个broker上的partition负载过多], 会导致读取性能下降, consumer延时升高.
2.Kafka配置
参照 https://docs.confluent.io/current/kafka/deployment.html, 配置gc参数
if [ "x$KAFKA_HEAP_OPTS" = "x" ]; then
export KAFKA_HEAP_OPTS="-Xmx6G -Xms6G"
export KAFKA_JVM_PERFORMANCE_OPTS="-server -XX:MetaspaceSize=96m -XX:+UseG1GC -XX:MaxGCPauseMillis=20 -XX:InitiatingHeapOccupancyPercent=35 -XX:G1HeapRegionSize=16M -XX:MinMetaspaceFreeRatio=50 -XX:MaxMetaspaceFreeRatio=80 -XX:+ExplicitGCInvokesConcurrent -Djava.awt.headless=true"
fi
3.Jmx 指标
在kafka的启动脚本 kafka-server-start.sh 中, 添加如下信息
export JMX_PORT=9999
export KAFKA_OPTS=" -javaagent:$base_dir/jmx_prometheus_javaagent-0.11.0.jar=9990:$base_dir/kafka-agent.yaml"
将依赖的jar包下载到bin目录下, 同时, 在bin目录下创建配置文件 kafka-agent.yaml
hostPort: 127.0.0.1:9999 # 这里9999为设置的jmx端口
lowercaseOutputName: true
关于魔数:
- 9999: kafka jmx堆外暴露的端口, jmx_exporter从9999端口从kafka获取jmx数据
- 9990: jmx_exporter对外暴露的端口, prometheus从 9990端口拉取数据
根据脚本启动后, 可以通过 http://localhost:9990/metrics 进行验证
4.Prometheus
根据官网安装: https://prometheus.io/docs/prometheus/latest/getting_started/ 配置文件添加如下配置
scrape_configs:
.....
- job_name: 'kafka'
# metrics_path defaults to '/metrics'
# scheme defaults to 'http'.
static_configs:
- targets: ['KAFKA_IP:9990']
通过浏览器 http://{PROMETHEUS_IP:9090}/graph?g0.range_input=1h&g0.expr=jvm_gc_collection_seconds_sum&g0.tab=0 进行访问
5.Grafana
- 根据官网安装: http://docs.grafana.org/installation/debian/
- bin目录下直接启动就可以: ./grafana-server
- 记得在grafana 上添加 prometheus 数据源
- 我的grafana图是自己配置的, 可以参考官网其他的grafana配置
134 Words
2019-03-21 22:23 +0800