
1. 概述
最近,一些学生在学习Kafka网络通信的内容时遇到了一些问题. 关于网络模型和通信过程的相关内容,在这里,我将通过此博客为每个人分析这一部分.
2. 内容
Kafka系统作为消息队列,涉及网络通信,主要包括以下两个方面:
拉: 使用者从消息队列中提取消息数据;推送: 生产者将消息数据推送到消息队列中. 为了实现高性能的网络通信,可以使用更多底层的TCP协议或UDP协议来实现. Kafka设计了一组基于生产者,代理和消费者之间的TCP层的通信协议. 该协议是完全根据Kafka系统本身的需求定制的.
提示: 这里需要注意的是,由于UDP协议是不可靠的传输协议线程间通信模型,因此Kafka系统将TCP协议用作服务之间的通信协议.

2.1基本数据类型
通信协议中的基本数据类型分为以下几种类型:
固定长度的数据类型: 例如,与Java语言相对应的int8,int16,int32和int64,分别为字节,短型,整数和长型变量数据类型: 例如,Map,List和其他数组Java语言: 例如2.2语言模型,例如Java语言中的int [],String []
Kafka系统使用Reactor多线程模型,也就是说,所有新连接都是通过一个Acceptor线程处理的,而请求是通过多个Processor线程处理的(例如解析协议线程间通信模型,封装请求,转发等).
提示: Reactor是一种事件模型,可以将请求提交到一个或多个服务程序进行处理. 接收到客户端的请求后,服务器处理程序将使用多通道分发策略,一个非阻塞线程来接收所有请求,然后将这些请求转发到相应的工作线程进行处理.
之后

,在Kafka的版本迭代中,添加了一个新的Handler模块,该模块按指定的线程数处理请求. 处理程序和处理器通过块队列连接. 如下图所示:

在这里,Acceptor是从AbstractServerThread继承的线程类. Acceptor的主要目的是在侦听和接收客户端请求的同时,建立数据传输通道(SocketChannel),然后将其传递给处理器进行轮询处理. 核心代码在Acceptor的run方法中,代码如下:

还有一个用于连接处理器和处理程序的阻塞通道(BlockingChannel),代码如下:




3. 沟通过程
Kafka系统的通信框架也通过不同的版本进行了迭代. 例如,在旧的Kafka版本中,NIO被用作网络通信的基础. 通过将多个套接字连接注册到一个选择器进行监视,可以仅使用一个线程来管理多个连接,从而大大节省了多个线程. 资源开销.
在Kafka之后的新版本中,NIO仍然用作网络通信的基础,并且还使用Reactor多线程模型. 不同之处在于,新版本分离了特定的业务处理模块(Handler模块),并对线程池使用了单独的Control. 如下图所示:


通过以上图片,我们可以总结一下卡夫卡的沟通过程:
当客户端向服务器发送请求时,负责接收TCP请求,并在连接成功后将其传递给Processor线程;当处理器线程接收到新的连接后,它将在自己的选择器中注册它,并在客户端处于当前状态时侦听READ事件. 在连接对象上写入数据时,将触发READ事件. 根据TCP协议调用Handler处理该Handler之后,可以将返回值返回给Client,并将Handler返回的结果绑定到Response终端,以进行摘要和分析. 我们可以知道新版本的Kafka中的独立Handler模块具有以下优点:
可以分别指定Handler线程的数量,这便于调整和管理,以防止过大的请求阻塞Processor线程. 请求,处理程序和响应都通过队列连接,因此它们之间没有耦合. 该现象对于提高Kafka系统的性能非常有帮助. 应该注意的是,在Kafka的网络通信中,RequestChannel提供了一个缓冲区,用于在Processor线程和Handler线程之间进行数据交换. 它是在通信中缓存请求和响应的地方. . 因此,它的作用是在通信中扮演数据缓冲区队列的角色. 处理器线程将读取的请求添加到RequestChannel的全局队列(RequestQueue). 处理程序线程从请求队列获取并处理. 处理完成后,将响应添加到RequestChannel的ResponseQueue(响应队列). responseListeners处理器线程将唤醒相应的侦听器. 最后,处理器线程从响应队列中获取并发送给客户端. 实现代码如下:


4. 摘要
通过仔细阅读和分析Kafka网络通信层代码,您可以获得有关NIO网络通信的大量知识. 通过阅读和学习Kafka的源代码,这对于Kafka集群的性能调整和问题定位非常有帮助.
5. 结论
此博客与您共享. 如果您在研究和研究过程中有任何疑问,可以添加小组讨论或发送电子邮件给我. 我会尽力回答您的问题并与您分享!
本文来自电脑杂谈,转载请注明本文网址:
https://www.pc-fly.com/a/jisuanjixue/article-277243-1.html
明明说了数量外
中国动作太快了
因为穷人在今后中国的发展过程中根本不能多生