线上部署
系统选择:
linux、windows、mac os三个常用的操作系统中,首选linux,也许没人会部署到其他系统,但是其中的原因,我需要了解一下:
- I/O模型:
- Kafka客户端底层使用了java的Selector,selector在linux上使用的是epoll,windows上是select;
- 数据网络传输效率
- linux零拷贝优势,windows需要等到java8 的60更新版本才能享受;
- 社区支持度:windows版本的bug不做承诺,基本不会修复;
磁盘选择(折中的选择,否则有钱随便砸那肯定上最好的):
- 机械磁盘就好:因为Kafka是利用磁盘的顺序读写来达到高吞吐量,所以对比高昂的SSD,机械磁盘就够用;
- 是否需要组raid:没有必要,Kafka通过副本机制保证数据安全即负载均衡,在软件层面实现;所有没有必要raid;
磁盘容量:
这个其实是跟业务很相关的;
假设每天生产消息 1亿条,消息平均大小10KB,消息留存1周时间,3个副本,那么:
1亿 * 10KB * 3(副本) * 7(天)= 19.557TB;
Kafka 集群除了消息数据还有其他类型的数据,比如索引数据等,所以预留10%:
19.557TB * 1.1 = 21.5TB;
如果启用压缩,压缩比为75%,那么:
21.5TB * 75% = 16TB;
带宽:
如果使用的是一个网口、千兆网络,一小时需要流转的数据是1TB;
那么首先70%的网络占用会有网络丢包的可能,所以最多使用700Mbps,不常规使用700Mbps,额外预留2/3的带宽资源,就是233Mbps,每小时处理量819Gb,那么一台服务器处理1TB需要耗时间:
1TB / 819Gb/h = 10h;
那么使用10台机器即可1h完成;如果副本设置为3,那么就需要30台机器;