一、Kafka线上集群部署方案
既然是集群,那必然就要有多个Kafka节点机器,因为只有单台机器构成的kafka伪集群只能用于日常测试之用,根本无法满足实际的线上生产需求。
操作系统:
kafka由Scals语言和Java语言编写而成,编译之后的源代码就是普通的.class文件,文本部署到哪个操作系统应该都是一样的,但是不同操作系统的差异还是给Kafka集群带来了相当大影响。
目前常见的操作系统有3种:Linux、Windows和macOS。考虑操作系统与kafka的适配性,Linux系统更加适合部署,主要体现在下面三个方面:
- I/O模型使用
 
你可以近似地认为I/O模型就是操作系统执行I/O指令的方法。主流的I/O模型有5种类型:阻塞式I/O、非阻塞式I/O、I/O多路复用、信号驱动I/O和异步I/O。每种模型都有各自典型使用场景,比如Java中Socket对象的阻塞模式和非阻塞模式就对应前两种类型;Linux中的系统调用select函数就属于I/O多路复用模型;epoll系统调 用则介于第三种和第四种模型之间;至于第五种模型,其实很少有Linux系统支持,反而Windows系统提供了一个叫IOCP线程模型属于这一种。我们只需要了解认为后一种模型会比前一种模型要高级,比如epoll就比select要好。
实际上kafka客户端底层使用了java的selector,selector在Linux上的实现机制是epoll,而在Windows上实现机制是select。因此在这一点上将kafka部署在Linux上是有优势的,因为能够获得更高效的I/O性能。
- 数据网络传输效率
 
kafka生产和消费的消息都是通过网络传输的,而消息是保存在磁盘上,故需要在磁盘和网络间进行大量数据传输。零拷贝技术就是当数据在磁盘和网络进行传输时避免昂贵的内核态数据拷贝从而实现快速地数据传输,Linux平台实现了这样的零拷贝机制,所以在Linux部署kafka能够享受到零拷贝技术所带来的快速数据传输特性
- 社区支持度
 
社区目前对Windows平台上发现的kafka Bug不做任何承诺,一般是不会修复的。因此,Windows部署kafka只适合于个人测试或用于功能验证,千万不要应用于生产环境。