Kafka集群能够对请求实施配额,以控制客户端使用的broker资源。 Kafka broker可以为共享配额的每组客户强制执行两种类型的客户配额:
- 网络带宽配额定义字节速率阈值(自0.9起)
- 请求速率配额将CPU利用率阈值定义为网络和I / O线程的百分比(自0.11起)
为什么需要配额?
In fact, when running Kafka as a service this even makes it possible to enforce API limits according to an agreed upon contract.
生产者和消费者可能生成/消费非常大量的数据或以非常高的速率生成请求,从而垄断broker资源,导致网络饱和,并且通常是DOS其他客户端和broker本身。有了配额可以防止这些问题,并且在大型多租户群集中更为重要,其中一小部分坏的客户端会降低用户体验。 事实上,当将Kafka作为服务运行时,这甚至可以根据agreed upon 合同强制执行API限制。
客户端组
Kafka客户端的标识是用户主体,它表示安全的集群中经过验证的用户。 在支持未经身份验证的客户端的群集中,用户主体是broker使用可配置的PrincipalBuilder选择的一组未经身份验证的用户。 Client-id是客户端应用程序选择的具有有意义名称的客户端的逻辑分组。 元组(user,client-id)定义了一个共享用户主体和客户机ID的安全逻辑客户端组。
For a given connection, the most specific quota matching the connection is applied. All connections of a quota group share the quota configured for the group. For example, if (user="test-user", client-id="test-client") has a produce quota of 10MB/sec, this is shared across all producer instances of user "test-user" with the client-id "test-client".
配额可以应用于(用户,客户端ID),用户或客户端ID组。 对于给定连接,将应用与连接匹配的最详细的配额。 配额组的所有连接都共享为该组配置的配额。 例如,如果(user =“test-user”,client-id =“test-client”)的生产配额为10MB /秒,则在有着“test-client”作为client-id的用户“test-user”的所有生产者实例之间共享。
网友评论