网络模型
Kafka 网络模型
Kafka Client:单线程 Selector
单线程模式适用于并发链接数小,逻辑简单,数据量小。在 kafka 中,consumer 和 producer 都是使用的上面的单线程模式。这种模式不适合 kafka 的服务端,在服务端中请求处理过程比较复杂,会造成线程阻塞,一旦出现后续请求就会无法处理,会造成大量请求超时,引起雪崩。而在服务器中应该充分利用多线程来处理执行逻辑。
Kafka Server:多线程 Selector
在 kafka 服务端采用的是多线程的 Selector 模型,Acceptor 运行在一个单独的线程中,对于读取操作的线程池中的线程都会在 selector 注册 read 事件,负责服务端读取请求的逻辑。成功读取后,将请求放入 message queue 共享队列中。然后在写线程池中,取出这个请求,对其进行逻辑处理,即使某个请求线程阻塞了,还有后续的县城从消息队列中获取请求并进行处理,在写线程中处理完逻辑处理,由于注册了 OP_WIRTE 事件,所以还需要对其发送响应。