瞧瞧Kafka是如何应对百万连接的

最简单的连接,短连接

短连接(short connnection)是相对于长连接而言的概念,指的是在数据传送过程中,只在需要发送数据时,才去建立一个连接,数据发送完成后,则断开此连接。

也就是说,如果一个连接建立之后,然后发送请求,接着就断开,那这个连接维持的时间是很短的,这个就是所谓的短连接。
在这里插入图片描述

长连接

但是短连接有一个很明显的问题,那就是每次发送请求,都必须要建立一个连接,然后再断开连接。

我们都知道,网络连接的建立是一个比较耗费资源的过程。

那么是不是可以建立好一个连接,然后不停的发送请求过来,系统再通过那个连接返回响应。这样就可以通过一个连接发送多个请求和返回多个响应,这就是所谓的长连接。
在这里插入图片描述

大量连接下使用长连接的问题

可是现在又有了一个新的问题,那就是当大量用户需要发送请求时,那么相当于每个用户都要跟系统建立一个长连接,对于系统来说就需要多个线程,每个线程需要去维护一个用户的长连接,然后通过这个连接跟一个用户不停的通信。
在这里插入图片描述
用户少的时候可能没什么问题,可是如果有几十万上百万的用户需要连接时,此时假设你的系统做了集群部署一共有100个服务实例,难道每个服务实例要维持1万个连接吗?

要是期望每个服务实例来维持上万个线程,那几乎是不可能的,所以这种模式最大的问题就在于这里,没法支撑大量连接。


Kafka 面临的挑战,大量连接

Kafka 作为大名鼎鼎的消息中间件,势必会面临大量连接的挑战,有大量生产者和消费者都要跟Kafka建立类似上面的长连接,然后基于一个连接,一直不停的通信。

在这里插入图片描述
那么 Kafka 是如何应对的呢?总不可能开几千上万个线程吧?

Reactor多路复用

Reactor多路复用模型,这就是Kafka采用的应对策略了。

Kafka Reactor的模型包括三种角色:

Acceptor
主要职责是监听客户端的连接请求,并建立和客户端的数据传输通道,然后为这个客户端指定一个processor,它的工作就到此结束了,这样它就可以去响应下一个客户端的连接请求了。

Processor
主要的职责就是负责从客户端读取数据和将响应返回给对应客户端,它本身就不处理具体的业务逻辑,每一个Processor都有一个Selector,用来监听多个客户端,因此可以费阻塞地处理多个客户端的读写请求,Processor会将数据放入请求队列中。

工作线程
主要的职责是从请求队列中提起请求,处理以后再将结果添加到响应队列中。

简单来说,就是通过一个acceptor线程,实现连接请求监听。该acceptor线程基于底层操作系统的支持可以监听大量连接。

如果有某个设备发送了建立连接的请求过来,那么那个线程就把这个建立好的连接交给processor线程。

每个processor线程同样会基于底层操作系统的支持监听多个连接,一个线程就可以负责维持多个连接。

如果某个连接发送了请求过来,那么这个processor线程就会把请求放到一个请求队列里去。

然后后台有一个线程池,这个线程池里有工作线程,会从请求队列里获取请求,处理请求,接着将请求对应的响应放到每个processor线程对应的一个响应队列里去。

最后,processor线程会把自己的响应队列里的响应发送回给客户端。
在这里插入图片描述


由上图我们可以看到,每个processor线程可以维持N个连接,并且所有的请求都会入队列排队,交给后台线程池来处理。

在这种模式下,每台机器只需要有限的线程数量就可以抗住大量的连接。

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Kafka可以通过Kerberos进行身份验证和安全连接。下面是通过Kerberos连接Kafka的步骤: 1. 配置Kafka服务器: - 在Kafka服务器上安装Kerberos客户端和服务端软件。 - 配置Kafka服务器的`server.properties`文件,设置以下属性: ``` listeners=SASL_PLAINTEXT://<kafka_server>:<kafka_port> security.inter.broker.protocol=SASL_PLAINTEXT sasl.mechanism.inter.broker.protocol=GSSAPI sasl.enabled.mechanisms=GSSAPI sasl.kerberos.service.name=kafka ``` - 启动Kafka服务器。 2. 创建Kerberos主体和Keytab文件: - 在Kerberos服务器上创建一个服务主体(例如:`kafka/kafka_server_hostname@REALM`)。 - 为该服务主体生成Keytab文件,并将其分发到Kafka服务器。 3. 配置Kafka客户端: - 在Kafka客户端上安装Kerberos客户端软件。 - 配置Kafka客户端的`client.properties`文件,设置以下属性: ``` bootstrap.servers=<kafka_server>:<kafka_port> security.protocol=SASL_PLAINTEXT sasl.mechanism=GSSAPI sasl.kerberos.service.name=kafka sasl.kerberos.principal=<kafka_client_principal> sasl.kerberos.keytab=<kafka_client_keytab> ``` - 将Kerberos客户端的`krb5.conf`文件配置为正确的Kerberos Realm和KDC信息。 4. 使用Kafka客户端: - 使用Kafka提供的Kerberos认证库进行身份验证和连接。 - 例如,使用Kafka命令行工具发送和接收消息: ``` kafka-console-producer.sh --broker-list <kafka_server>:<kafka_port> --topic <topic> --producer.config client.properties kafka-console-consumer.sh --bootstrap-server <kafka_server>:<kafka_port> --topic <topic> --consumer.config client.properties ``` 通过以上步骤,你可以通过Kerberos安全连接Kafka。请确保正确配置Kerberos和Kafka的相关参数,并提供正确的主体和Keytab文件路径。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值