操作系统
选择linux系统,社区对linux支持较好,linux的I/O模型是使用epoll[ epoll比windows的select性能好]。
磁盘
因为kafka使用顺序写来保证写速度,所以在磁盘的选择上可以直接使用普通机械磁盘。同时,因为kafka自己实现了冗余的磁盘存储空间,所以实际上没有必要使用到磁盘阵列[RAID]。
磁盘容量
这个我们需要结合一些信息来评估。看下面的例子:
假设公司业务每天向kafka集群发送1亿条消息,每条信息保存以防止数据俯视,消息默认保存两周[14天]时间。假设消息平均大小是1KB。那么kafka集群需要为这个业务预留多少磁盘空间?
首先计算数据容量:1亿 * 1KB * 2 /1024/1024=200GB
同时除了消息之外,我们还需要保留索引数据以及日志数据。要预留多15%的存储空间
也就是一天的磁盘空间是 200*1.15 = 230GB
我们要保留14天 也就是 230 * 14 = 3.2 TB 这就是总的存储磁盘要求【这里没有考虑压缩,如果有压缩还可以考虑压缩比】。
这个评估可以放到别的消息中间件类比。
规划磁盘容量需要考虑的:
消息数,保存时间,平均消息大小 ,备份数,是否启用压缩。
带宽
公司常见的机房网络是1Gb千兆网络和10Gb万兆网络。千兆网络是一般公司网络的标准配置。
首先我们要看指标:1小时内处理1TB的业务数据【一般达不到】
我们需要多少台机子来支持kafka完成这个业务?
1Gbps的带宽,每秒处理1Gb数据,假设每天kafka服务器是装在专属的机器上。假设kafka用到70%带宽[这个是个经验值],也就是超过70%的带宽就会有丢包的问题。一台kafka是使用大约700Mb的带宽。同时这个700Mb是一个峰值。为了应对突发峰值,需要额外预留2/3的资源,即单台服务器使用带宽700Mb/3 约等于 240Mbps。
那1小时 处理1TB所需的服务器数量。
1TB * 8 /3600/3600 = 2336Mb / 240 = 10台 假如消息需要额外复制2份,那么总服务器台数需要*3 也就是30台