首页 > 其他分享 >Kafka硬件配置选择

Kafka硬件配置选择

时间:2022-11-19 17:12:36浏览次数:44  
标签:used MB 配置 Kafka 硬件 内存 1g 100 kafka

场景:

100万日活(中型公司),每人每天100条日志,每天总共的日志条数是100万 * 100条 = 1亿条。其日志处理速度为:1亿条/24小时/60分/60秒 ≈ 1157条/每秒钟。  

假设每条日志大小:0.5k - 2k(取1k), 则:1157条/每秒钟 * 1k ≈ 1m/s 。

高峰期每秒钟(假设平均值20倍):1157条 * 20倍 = 23140条。 

每秒多少数据量:23140*1k/1024k ≈ 20MB/s。 

 

1. 服务器台数选择

服务器台数(经验公式)  = 2 *(生产者峰值生产速率 * 副本 / 100) + 1 。

       = 2 *(20m/s * 2 / 100) + 1 

       = 3台 

建议3台服务器。 

2. 磁盘选择

kafka按照顺序读写,因此,机械硬盘和固态硬盘顺序读写速度差不多。

1亿条 * 1k ≈ 100g

100g * 2个副本 * 3天(保存天数)/ 0.7(预留30%的内存) ≈ 1T  

建议三台服务器的磁盘大小大于 1T  

3. 内存选择

kafka内存 = 堆内存(kafka内部配置,生产环境一般配置10~15g,根据实际需求进行调整)+ 页缓存。

  •  堆内存:10~15g,假设取 10g。

  • 页缓存:页缓存是Linux系统服务器的内存。我们只需要保证1个segment(1g)中25%的数据在内存中就好。 每个节点页缓存大小 = (分区数 * 1g * 25%)/ 3(节点数)。例如10个分区,页缓存大小=(10 * 1g * 25%)/ 3 ≈ 1g 。

 因此,建议一台服务器内存大小要大于 10g + 1g = 11g。

kafka-server-start.sh文件中配置:

if [ $# -lt 1 ];
then
        echo "USAGE: $0 [-daemon] server.properties [--override property=value]*"
        exit 1
fi
base_dir=$(dirname $0)

if [ "x$KAFKA_LOG4J_OPTS" = "x" ]; then
    export KAFKA_LOG4J_OPTS="-Dlog4j.configuration=file:$base_dir/../config/log4j.properties"
fi

if [ "x$KAFKA_HEAP_OPTS" = "x" ]; then
    export KAFKA_HEAP_OPTS="-Xmx1G -Xms1G"
fi

EXTRA_ARGS=${EXTRA_ARGS-'-name kafkaServer -loggc'}

查看kafka垃圾回收状态:

[root@-9930 bin]# jstat -gc 21345
 S0C    S1C    S0U    S1U      EC       EU        OC         OU       MC     MU    CCSC   CCSU   YGC     YGCT    FGC    FGCT     GCT   
 0.0   2048.0  0.0   2048.0 53248.0  24576.0   993280.0   188416.1  44284.0 40616.0 5628.0 5206.6      8    0.149   0      0.000    0.149

查看kafka堆内存使用情况,可根据内存使用情况进行调整:

[root@-9930 bin]# jmap -heap 21345(进程号PID)
Attaching to process ID 21345, please wait...
Debugger attached successfully.
Server compiler detected.
JVM version is 25.40-b25

using thread-local object allocation.
Garbage-First (G1) GC with 2 thread(s)

Heap Configuration:
   MinHeapFreeRatio         = 40
   MaxHeapFreeRatio         = 70
   MaxHeapSize              = 1073741824 (1024.0MB)
   NewSize                  = 1363144 (1.2999954223632812MB)
   MaxNewSize               = 643825664 (614.0MB)
   OldSize                  = 5452592 (5.1999969482421875MB)
   NewRatio                 = 2
   SurvivorRatio            = 8
   MetaspaceSize            = 21807104 (20.796875MB)
   CompressedClassSpaceSize = 1073741824 (1024.0MB)
   MaxMetaspaceSize         = 17592186044415 MB
   G1HeapRegionSize         = 1048576 (1.0MB)

Heap Usage:
G1 Heap:
   regions  = 1024
   capacity = 1073741824 (1024.0MB)
   used     = 222298240 (212.0001220703125MB)
   free     = 851443584 (811.9998779296875MB)
   20.703136920928955% used
G1 Young Generation:
Eden Space:
   regions  = 25
   capacity = 54525952 (52.0MB)
   used     = 26214400 (25.0MB)
   free     = 28311552 (27.0MB)
   48.07692307692308% used
Survivor Space:
   regions  = 2
   capacity = 2097152 (2.0MB)
   used     = 2097152 (2.0MB)
   free     = 0 (0.0MB)
   100.0% used
G1 Old Generation:
   regions  = 194
   capacity = 1017118720 (970.0MB)
   used     = 192938112 (184.0001220703125MB)
   free     = 824180608 (785.9998779296875MB)
   18.969084749516753% used

11981 interned Strings occupying 1342824 bytes.

3. CPU选择

num.io.threads = 8  负责写磁盘的线程数,整个参数值要占总核数的50%。

num.replica.fetchers = 1 副本拉取线程数,这个参数占总核数的50%的1/3。

num.network.threads = 3  数据传输线程数,这个参数占总核数的50%的2/3。

建议32core。

4. 网络选择

 网络带宽 = 峰值吞吐量 ≈ 20MB/s   选择千兆网卡即可。 

 100Mbps单位是bit;10M/s单位是byte ; 1byte = 8bit,100Mbps/8 = 12.5M/s

 一般百兆的网卡(100Mbps )、千兆的网卡(1000Mbps)、万兆的网卡(10000Mbps)。 

 

标签:used,MB,配置,Kafka,硬件,内存,1g,100,kafka
From: https://www.cnblogs.com/huangdh/p/16906495.html

相关文章

  • 跟着文档学Fabric:获取通道配置
    原文在这里。1.获取通道配置peerchannelfetchconfigconfig_block.pb-o$ORDERER_CONTAINER-c$CH_NAME--tls--cafile$TLS_ROOT_CA上述命令需要在peer容器中......
  • VS Code 常用配置、快捷键和插件
    工欲善其事,必先利其器!常见前端开发IDE:HBuilder(国产)、SublimeText、WebStorm、VisualStudioCodeVSCode官网:​​​​https://code.visualstudio.com/​​免费的,直接下载;下......
  • settings配置文件和源码
    BASE_DIR:用来在项目中构建路径SECRET_KEY:项目生成时候用的秘钥DEBUG:调试模式,在写代码的时候打开,投入使用了就不用了ALLOWED_HOSTS=['']:运行那些ip来进行访问......
  • redis配置文件详解
    redis配置文件详解1、开头说明这里没什么好说的,需要注意的是后面需要使用内存大小时,可以指定单位,通常是以k,gb,m的形式出现,并且单位不区分大小写。2、INCLUDE......
  • Android studio 下载安装配置教程
    目录下载Androidstudio下载Androidstudio指定了版本Androidstudio4.1.2下载链接,输入网址即可自动下载https://redirector.gvt1.com/edgedl/android/studio/install......
  • centos7配置IP
    一、centos7获取IP地址的两种方法动态获取IP设置静态IP地址二、动态获取IP(不推荐使用)1、使用ipaddr命令查看查看网卡名和是否有网络,获知网卡名为ens33。2、输入v......
  • 华三交换机怎么在配置试图下配置console口密码
     V5设置Console口登录密码典型配置1.     设置为密码登录<H3C>system-view[H3C]user-interfaceaux0     //如果没有aux选项,则选择console选项[H3C-ui-aux......
  • 篇(13)-Asp.Net Core入门实战-将功能代码增加异步功能Async和配置简单防范CSRF攻击
    入门实战-将功能代码增加异步功能Async和配置简单防范CSRF攻击关于Asp.NetCore的新特性Async,异步,还是需要掌握的,这个特性,按微软官方的说法是可以提高你服务器的负荷,可以......
  • 提升mysql服务器性能(存储引擎与配置参数设置)
    服务层实现了与引擎无关的性能 frm用于记录结构 使用表锁 使用共享所和读锁支持全文索引 前缀索引  如果不对表进行操作尽可以进行压缩; myisamchk 命令行工具需......
  • Java开发环境安装与配置(干货详细教程)
    Java开发环境安装与配置(干货详细教程) 对于文章中出现的任何错误请大家批评指出,会及时做出修改! 安装JDKJDK是Java语言的软件开发工具包链接Java中国官网https:/......